title: Tworzenie i przypisywanie console.log nowego obiektu

text: Widziałem taki kod w kilku miejscach: (function() { var method; var noop = function noop() {}; var methods = [ 'assert', 'clear', 'count', 'debug', 'dir ', 'dirxml', 'error', 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 'markTimeline', 'profile', 'profileEnd', 'table', „time”, „timeEnd”, „timeStamp”, „trace”, „warn”]; var length = methods.length; var console = (window.console = window.console || {}); while (length-- ) { metoda = metody[długość]; // Tylko skrótowe niezdefiniowane metody.if (!console[metoda]) { konsola[metoda] = noop; } } }()); W szczególności interesuje mnie ten wiersz kodu var console = (window.console = window.console || {}); Dlaczego tworzymy nowy obiekt `window.console`, jeśli `window.console` nie jest zdefiniowane? Dlaczego więc ustawiamy `window.console={}`?


title: Czy istnieją przyzwoite samouczki dla początkujących dotyczące debugowania?

text: W tagach, które często odwiedzam na Stack Overflow, na dużą część pytań _powinno_ odpowiadać podstawowa wiedza na temat debugowania rzeczy – np. ucząc OP łowić ryby – zamiast dawać poprawkę dla przedstawionego fragmentu kodu. Czy są jakieś dobre tutoriale dotyczące debugowania dla początkujących, szczególnie? Skrypty PHP (W sytuacjach takich jak "moje zmienne POST nie są wyświetlane" itp.) * Jak debugować skrypty Ajax (Jak używać Firebuga, aby zobaczyć, co jest wysyłane, itp.), ale także inne języki i platformy?


title: Macbook pro dla programisty C++?

text: Jestem studentem informatyki i zastanawiam się nad zakupem nowego laptopa. Czy programista Macbook C++ jest przyjazny dla programistów? Czy OSX ma wystarczająco dużo narzędzi jak w Linuksie do programowania. Czy praca nad macbookiem sprzyja mojemu rozwojowi jako programista C++. EDIT: Używam głównie gedit, gdb, g++, meld, ddd (gdb frontend), valgrind itp. w Ubuntu Czy OSX ma równoważne oprogramowanie.


title: PHP jako język skryptowy

text: Mam rozsądną znajomość PHP, Perla i Basha. Używam Perla do większości przetwarzania tekstu w moim systemie (znajdź, zamień, filtruj dane wyjściowe itp.). Używam PHP do tworzenia stron internetowych, umożliwiając użytkownikowi przeglądanie i interakcję z danymi bazy danych za pośrednictwem przeglądarki. Często używam Basha do szybkich i brudnych skryptów, aby uzupełnić bardziej złożone skrypty Perla. Jestem wielkim zwolennikiem skupiania się na jak najmniejszej liczbie języków (aby wykonać zadanie) i stania się w nich ekspertem. Więc pytanie brzmi, dlaczego nie używać PHP do typowych zadań, z których korzysta Perl (i Bash)? Czy istnieją dobre powody (ograniczenia lub funkcje), dla których PHP jest najczęściej używane do tworzenia stron internetowych, podczas gdy Perl i Bash są najczęściej używane do "skryptowania" offline?


title: Ograniczenia korzystania z maszyny wirtualnej Hyper-V jako środowiska programistycznego .NET

text: Myślałem o użyciu maszyny Hyper-V zamiast fizycznego komputera do instalowania moich narzędzi programistycznych .NET / Azure / Xamarin / ASP.NET / Windows Phone. W ten sposób mogłem łatwo przenieść się z komputera stacjonarnego na laptopa, gdy muszę coś opracować w podróży. Czy w tym scenariuszu są jakieś ograniczenia, o których powinienem wiedzieć? Dzięki, Adrian


title: jak sprawdzić, czy adres e-mail istnieje, czy nie w php

text: Próbowałem wiele, ale nie mogłem znaleźć sposobu, w jaki znajdę, czy identyfikator e-mail istnieje, czy nie. Mój problem polega na tym, że nie chcę, aby odwiedzający wysyłali mi e-mail z fałszywym identyfikatorem e-mail. Czy jest na to jakieś rozwiązanie? Nie chcę korzystać z usługi smpt, ponieważ wysyłam pocztę, aby rozwiązać ten problem.


title: Która licencja na projekt open source, który może być używany jako bot w niektórych aplikacjach, ale nie jest przeznaczony do tego celu?

text: Zastanawiam się, czy jest jakaś licencja, którą mógłbym umieścić na swojej stronie internetowej, na której mógłbym opublikować aplikację open-source, która potencjalnie mogłaby zostać wykorzystana do oszukiwania w jednej grze na smartfony. Teraz muszę podkreślić, że celem aplikacji w żaden sposób nie jest oszukiwanie, więc tą licencją chcę wyeliminować możliwość, że autorzy gry na smartfony (w której mógłby posłużyć mój bot) mogliby mnie pozwać, gdyby ktoś inny zaczyna korzystać z aplikacji, aby być lepszym w swojej grze. Mogę być zbyt paranoikiem, ale z tymi wszystkimi dziwnymi prawami, których nigdy nie znasz. Zrobiłem trochę badań i wymyśliłem Creative Commons Attribution 3.0 (CC BY 3.0), ale zastanawiałem się, czy któryś z was był kiedykolwiek w podobnej sytuacji i co zrobiliście w takim przypadku? Nawiasem mówiąc, przeczytałem i rozważyłem moralne implikacje ewentualnej aplikacji pojawiającej się na mojej stronie, więc teraz potrzebuję tylko licencji, jak podano w pytaniu.


title: Czy dołączam linki asocjacyjne dla obiektów, które mają tylko zakres metody w diagramach klas UML?

text: Na przykład mam klasę użytkową, która zawiera kilka stałych (GCMConstants), ta klasa jest używana w jednej metodzie w aplikacji. Jednak ponieważ nie jest członkiem klasy, nie powinien być modelowany za pomocą linku asocjacyjnego. Czy powinienem kontynuować tak jak jest i nie dołączać linku, czy powinienem go dołączyć? Sprawdziłem moje książki UML, ale wydaje się, że żadna z nich nie obejmuje takich rzeczy.


title: Czy klienci poczty systemu Windows rzeczywiście interesują się załącznikami binarnymi typu MIME?

text: ...lub innymi słowy: czy wysyłając pocztę programowo, naprawdę muszę przejść przez kłopoty z ustawieniem prawidłowego typu MIME, czy też mogę po prostu użyć `application/octet-stream`? Wszystkie klienty poczty, które przetestowałem, robią „właściwą rzecz” w oparciu o rozszerzenie pliku, nawet jeśli typ MIME to po prostu ogólny `strumień aplikacji/oktetów`, więc po co zawracać sobie tym głowę? Wiem, że uważa się to za „dobrą praktykę”. Pytam z naukowej ciekawości, bo chcę wiedzieć, czy ma to znaczenie praktyczne, czy nie.


title: Konta użytkowników zorientowane na cel na jednym komputerze?

text: # Punkt wyjścia: * Obecnie zajmuję się programowaniem dla Dynamics Ax, Androida i od czasu do czasu param się Wordpressem i Pythonem. * Wkrótce rozpocznę projekt polegający na skonfigurowaniu WP w Google Apps Engine. * Wszystko jest i powinno nadal działać z tego samego komputera (z Linux Mint). # Problem: Boję się zepsuć/ugrzęznąć w mojej konfiguracji z powodu majsterkowania/instalacji wielu środowisk wykonawczych/IDE/SDK/usług, więc myślałem o korzystaniu z wielu użytkowników, z których każdy ma na celu obsługę danego zadania (internet, Android itp. ) i jak najbardziej obojętny wobec każdego użytkownika. Muszę wiedzieć, co następuje: * Czy jest to dobra/wykonalna praktyka? Drugą zbliżoną rzeczą do tego jest użycie połączeń zdalnych pulpitów, albo z komputerami, albo z maszynami wirtualnymi, których wolałbym uniknąć. * A co z przełączaniem użytkowników? Czy można to zrobić bezproblemowo? * Coś jeszcze, co powinienem wiedzieć? * * * # Aktualizacja i wyjaśnienia dotyczące maszyn wirtualnych i innych rzeczy: Powodem, dla którego chcę uniknąć uciekania się do maszyn wirtualnych, jest to, że nie lubię związanego z tym wpływu na wydajność i spowolnienia. Podejrzewam też, że może to dodać warstwę złożoności, której chciałbym uniknąć. Ta odpowiedź Wyatta jest interesująca, ale myślę, że tylko częściowo pasuje do wymagań (na przykład tworzenie stron internetowych). Ponadto, w odniesieniu do kwestii dotyczących instalacji w całym systemie, istnieje kompromis na poziomie, który powinienem zaakceptować jako na przykład doświadczony przez to. Ta opcja sugerowana przez 9000 jest również kusząca (w rzeczywistości bardziej niż w przypadku maszyn wirtualnych) i w żadnym wypadku nie zamierzam „żonglować” maszynami JVM i tak dalej, częściowo z powodu wspomnianego wcześniej. Jeśli chodzi o złożoność, zgadzam się i rozważę to, co zostało powiedziane, tylko z mojego doświadczenia mam tendencję do zanieczyszczania środowiska pracy pakietami SDK i środowiskami wykonawczymi, które wypróbowałem i odrzuciłem, co czasami pozostawiało resztki, które powodują problemy podczas sesji. To, czego **naprawdę** chcę, to zestaw dobrze zdefiniowanych, niezwirtualizowanych sesji, z których mogę wybierać w wolnym czasie i być w większości (w rozsądnym stopniu) bezpiecznym przed wpływem na każdą sesję z drugiej. A tak naprawdę pytam, czy i jak można to zrobić za pomocą kont użytkowników.


title: Liczba witryn do zbudowania, zanim spróbujesz zostać programistą internetowym?

text: Ktoś zadał mi to pytanie i nie mogłem odpowiedzieć, ponieważ nie jestem na stronie rozwoju, więc pytam tutaj. Jeśli ktoś właśnie skończył studia i próbuje przebić się do tworzenia stron internetowych/projektowania stron internetowych, portfolio już opracowanych projektów/stron wydaje mi się niezbędne do pójścia na rozmowę kwalifikacyjną. Co powiesz na dobrą liczbę pojedynczych stron do stworzenia dla swojego portfolio przed wysłaniem CV i pójściem na rozmowy kwalifikacyjne na stanowisko web developera? Jaka byłaby również liczba witryn do zaprojektowania, gdybyś dążył do stanowiska projektanta stron internetowych?


title: Jak komputer wykonuje obliczenia czasu?

text: Potrzebuję dodać do modułu w danym projekcie pewną funkcję dotyczącą kalkulacji czasu. W tym konkretnym przypadku używam Javy i czytając dokumentację klasy Date dowiedziałem się, że czas jest liczony w milisekundach, począwszy od 1 stycznia 1970, 00:00:00 GMT. Myślę, że można bezpiecznie założyć, że w innych językach jest podobna „data rozpoczęcia”, więc myślę, że konkretna implementacja w Javie nie ma znaczenia. Jak obliczany jest czas przez komputer? Skąd dokładnie wie, ile milisekund minęło od podanej „daty i godziny rozpoczęcia” do bieżącej daty i godziny?


title: Iteracyjne budowanie frameworka testowego

text: (Z góry, nie jestem ekspertem od testów ani zwinności, po prostu próbuję popchnąć nas, abyśmy byli lepsi. Jeśli się mylę w czymkolwiek, pokocham opinie twojego faceta). Dlatego naciskałem na to, abyśmy stali się prawdziwym sklepem zwinnym, a mniej „zwinnym” sklepem ad-hoc. Więc iteracyjnie próbuję ulepszyć nasz proces. Odkryłem, że dobrze jest powoli budować w kierunku „robienia tego dobrze”: mogę wykupić małe zmiany lub same duże zmiany. Tak więc mamy powolne iteracje (około miesiąca), których używam, aby powoli wtapiać się w coraz więcej. Moim osobistym celem jest doprowadzenie nas do procesu, który wspiera ciągłą integrację: w tym momencie myślę, że możemy coś zrobić jak przyspieszyć nasze iteracje przy znacznie niższych kosztach. Kolejnym elementem, który sprzedałem managementowi, który musimy ulepszyć, są nasze testy. Nigdy nie mieliśmy naprawdę solidnej strategii testowej, więc chciałbym zacząć tam budować nasze możliwości. Wprowadziliśmy już "Test Driven Development", wykorzystując framework Google Test (test jednostkowy), który zaprowadził nas bardzo daleko. Jednak te testy jednostkowe nie wystarczą do przetestowania systemu jako całości. Uzupełniamy to naszym starym sposobem testowania, testami systemowymi ad-hoc i testami funkcjonalnymi, które są naprawdę specyficzne dla projektu, które są przepisywane za każdym razem i które nie są zautomatyzowane. Co gorsza, nasze testy funkcjonalne i systemowe są często bardziej podobne do zadań charakteryzacyjnych niż do zadań typu pass-fail: nasze systemowe/funkcjonalne narzędzia testowe muszą być w stanie obsługiwać zaawansowane kreślenie i przetwarzanie liczb, co oznacza, że wiele z nich znajduje się w Matlabie _dreszcz_. Z tego, co mogę powiedzieć, dobry automatyczny system testów składa się z dwóch części: Test Framework (coś podobnego do roboframework itp.), który określa, jakie testy należy uruchomić, nazywa te testy, organizuje wyniki itp. ... rzecz, która faktycznie robi automatyzację. To używa narzędzi testowych, urządzenia, które faktycznie wykonuje test. Może źle to postrzegam, ale Test Framework jest jak ogromny plik wsadowy, a narzędzia testowe to testy. Widzę więc dwa możliwe sposoby na „co dalej”. 1. Zaimplementuj (może to być pisanie własnego, chociaż wolałbym nabyć/zmodyfikować) Framework Testowy. Zostaw nasze ad-hoc testy systemu, ale pozwól frameworkowi przejąć automatyzację. Celem byłoby znalezienie sposobu na trafienie „Test” i uruchomienie wszystkich testów. 2. Zastanów się, w jaki sposób możemy wykorzystać narzędzia testowe bardziej wydajnie i efektywnie. Nie jestem pewien, jaka jest najlepsza droga tutaj, ani czy którakolwiek z następujących kwestii: * Zajmujemy się rozwojem zarówno Windows, jak i Linuksa, chociaż zwykle nie w tym samym czasie * Chociaż chcę skupić się na C++, C z CMake , zajmujemy się również programowaniem w C# i Matlab. Idealny framework wspierałby to wszystko, nawet jeśli są to różne narzędzia. * „Testerzy”, „automaty testowe” i „programiści” będą pobierani z tej samej grupy wysoce kompetentnych programistów (na razie). * Muszę teraz obsługiwać pliki wykonywalne wiersza poleceń i biblioteki, ale lubi wspierać GUI (QT i .NET) w przyszłości. Zakres 2 wydaje się OGROMNY, chociaż zrobienie 1 najpierw wydaje się stawiać wóz przed koniem. Czy mam częściowo dokładny obraz tego, co się dzieje? Przeczytałem kilka rzeczy, które używają Google Test jako struktury testowej, ale czy nie lepiej pasuje do definicji narzędzia testowego? Czy odgryzam więcej, niż mogę przeżuć?


title: Dlaczego ludzie zaczęli uważać za konieczne oddzielanie hooków JS od hooków CSS w HTML?

text: Edycja: Wyjaśnienie, identyfikatory i klasy jako oddzielne haki to tylko jedna z form zastosowanej idei, o której mowa, która polega na tym, aby nigdy nie używać tych samych haczyków w CSS, co w JS. Widziałem również, że ludzie chcą rzeczy takich jak js-combo_box i css-combo_box jako klas na tym samym elemencie. To jest ten, na który coraz częściej wpadam w ostatnich latach. Osoby, które chcą używać tylko identyfikatorów dla JS i klas dla CSS. Lub nie chcą, aby JS w ogóle dotykał klas i identyfikatorów i polegał na takich rzeczach, jak zaczepy atrybutów danych HTML5 (co jest i prawdopodobnie pozostanie najwolniejszym sposobem na znalezienie elementu nawet w nowoczesnych przeglądarkach). W ciągu ponad 5 lat sporadycznie ciężkiego/nienormalnego tworzenia stron internetowych po stronie klienta, w tym jednej bardzo dużej, całkowicie pomieszanej operacji handlu detalicznego, w której HTML, z którym nikt nawet nie pracował, zmutowałby, ponieważ mieliśmy 200 deweloperów offshore o różnym poziomie znajomości kodu (całkowicie na niskim poziomie, nie żartuję) skakanie w górę iw dół po back-endowej bazie kodu bez kontroli źródła, nigdy nie spotkałem się z problemem, w którym JS i CSS ukierunkowane na wspólne atrybuty w HTML powodowały jakąkolwiek łatwość konserwacji lub łatwość problem modyfikacji dla mnie. Myślę, że zastanawiam się, co informuje o tej dostrzeganej potrzebie i czy brakuje mi czegoś, co pojawia się u wielu osób? Czy HTML za pośrednictwem selektorów i DOM API nie jest faktycznie punktem abstrakcji, który spaja wszystko razem? Dlaczego JS i CSS dotyczą współdzielenia tam tych samych atrybutów, które kiedykolwiek stwarzają problem?


title: Czy powinienem przeczytać rozdział o zarządzaniu pamięcią, jeśli obecnie używamy głównie ARC?

text: Czytam książkę o celu C i zastanawiałem się nad 2 rzeczami: 1. Czy powinienem poświęcić czas na przeczytanie całego rozdziału o zarządzaniu pamięcią? 2. Jeśli wykonujesz naprawdę dobrą robotę w zarządzaniu ręcznym, czy możesz osiągnąć lepszą wydajność niż przy użyciu ARC?


Gdzie mogę znaleźć kolegów programistów, którzy szukają pomocy przy tworzeniu startupu? Czy są jakieś strony współpracy, na których ludzie prezentują pomysły, a grupa ludzi „dołącza” do projektu w celu stworzenia jakiegoś prototypu? **Edytuj:** @Vitor Braga – Poważnie, nie chcę zarabiać pieniędzy, tylko znaleźć programistów, którzy są zainteresowani tworzeniem banalnej małej aplikacji z kimś innym. **Edytuj:** Warto wyjaśnić, że mieszkam na odludziu w Australii.


title: Umieszczasz język programowania w swoim CV?

text: Ile doświadczenia w danym języku potrzebujesz, aby umieścić je w swoim CV? Jest jeden język, w którym jestem biegły (Java), który na pewno umieściłbym w CV, ale powiedziałem, że wziąłem udział w kilku semestralnych kursach na studiach, które obejmowały rozbudowane programowanie w C lub samouczenie się C #, ale nie napisałem w nim żadnych znaczących projektów , czy mogę umieścić te języki w CV bez śmiechu pracodawcy lub postrzegania ich jako inflacji CV?


title: Wybór między CL a Pythonem do tworzenia stron internetowych

text: Pochodzę ze środowiska Java / PHP i po przeczytaniu tego krótkiego eseju Paula Grahama zacząłem się zastanawiać nad wyborem nowego języka, mianowicie Common Lisp, aby przyspieszyć moją pracę (jestem programistą stron internetowych). Obecnie piszę projekty dla zwierząt domowych, ale mam pewne plany biznesowe na przyszłość. Paul mówi o LISP-ie w swoim eseju jako o „tajnej broni”. Nie wiem, czy to stwierdzenie jest prawdziwe po 10 latach, ale zanurzyłem palce w ładnym samouczku CL i wygląda na to, że LISP może być lepszy do tworzenia stron internetowych. Paul wspomina również o Pythonie jako o fajnym wyborze, który właściwie znam. Moje pytanie brzmi: który powinienem wybrać do moich przyszłych projektów internetowych? O czym myślałem: * Nie zamierzam tworzyć aplikacji desktopowych, więc mogę wybrać preferowany język. * python wydaje się mieć bardzo dużą społeczność, a więc znacznie więcej bibliotek / frameworków w porównaniu do lisp * Odkryłem, że lisp ma pewne funkcje (takie jak makra), których nie można znaleźć nigdzie indziej * Pracuję głównie sam lub z 1-2 innymi programistami ale znalezienie kogoś z wiedzą seplenienia może być trudne Więc co o tym myślisz?


title: Badania nad defektami oprogramowania

text: W książce „Tworzenie oprogramowania: co naprawdę działa i dlaczego w to wierzymy” znajduje się rozdział autorstwa Andy'ego Orama i Grega Wilsona o defektach oprogramowania oraz o tym, jakie metryki można wykorzystać do ich przewidywania. Podsumowując (z tego, co pamiętam), wyjaśnili, że używali kodu C, który był open source i miał opublikowaną historię śledzenia defektów. Wykorzystali szereg dobrze znanych metryk, aby sprawdzić, co jest najlepsze w przewidywaniu obecności defektów. Pierwszą metryką, od której zaczęli, były wiersze kodu (bez komentarzy), które wykazywały korelację z defektami (tj. wraz ze wzrostem LOC rośnie liczba defektów). Zrobili to samo dla wielu innych metryk (nie pamiętam, co z mojej głowy) i ostatecznie doszli do wniosku, że bardziej złożone metryki nie są znacząco lepsze w przewidywaniu defektów niż prosta liczba LOC. Łatwo byłoby z tego wywnioskować, że wybór mniej gadatliwego języka (języka dynamicznego?) spowoduje mniej linii kodu, a tym samym mniej defektów. Ale badania w ramach _"Tworzenie oprogramowania"_ nie omawiały wpływu wyboru języka na defekty ani na klasę defektów. Na przykład, być może program Java można przepisać w clojure (lub scala, groovy, lub...), co daje ponad 10-krotne oszczędności w LOC. Z tego powodu możesz wywnioskować 10x mniej defektów. Ale czy to możliwe, że zwięzły język, choć mniej gadatliwy, jest bardziej podatny na błędy programisty (w porównaniu do bardziej gadatliwego)? Albo, że defekty napisane w mniej gadatliwym języku są 10 razy trudniejsze do znalezienia i naprawienia? Badania w _"Making Software"_ były dobrym początkiem, ale sprawiły, że chciałem więcej. Czy opublikowano coś na ten temat?


title: Strategia nadążania za zmianami języka (Python)

text: ## Pisanie kodu, który będzie działał jeszcze przez lata Języki programowania ulegają zmianie. Biblioteki się zmieniają. Niektóre kody sprzed 5, 10, a nawet 20 lat mogą nadal działać i dawać oczekiwane rezultaty, podczas gdy kod sprzed 2 lat może zawieść z błędem składni. Jest to częściowo nieuniknione, ponieważ języki ewoluują (przynajmniej większość). Deweloperzy są odpowiedzialni za utrzymanie swojego kodu. Ale czasami stabilność jest ważnym wymogiem w kodzie produkcyjnym, a kod powinien po prostu działać przez 10 lat, bez potrzeby, aby ktoś co roku przechodził przez kod w celu dostosowania go do zmian językowych. Albo mam małe skrypty, na przykład do naukowej analizy danych, do których muszę wrócić po latach nie dotykania ich. Na przykład w biurach meteorologicznych istnieje wiele operacyjnych kodów Fortran, nawet dla części, które nie są istotne z punktu widzenia prędkości, a stabilność kodu jest jednym z powodów. Słyszałem, że obawa o niestabilność jest jednym z obiektów, które mają przeciwko przejściu na Pythona (pomijając oczywiście inercję języka; jest to możliwe tylko w przypadku nowego kodu, niezależnego od starego). Oczywiście jedną ze strategii stabilnego kodu jest zamrożenie całego systemu operacyjnego. Ale nie zawsze jest to możliwe. Używam Pythona jako przykładu, ale problem nie ogranicza się w szczególności do Pythona. ## Dokumenty dotyczące problemów ze zgodnością z Pythonem W przypadku Pythona istnieje kilka dokumentów opisujących politykę zmian niekompatybilnych wstecz. ### PEP-5 Zgodnie z PEP 5: > Musi istnieć co najmniej roczny okres przejściowy między wydaniem > wersji przejściowej Pythona a wydaniem wersji > wstecznie niezgodnej. Użytkownicy będą mieli co najmniej rok na przetestowanie swoich programów > i migrację ich z używania przestarzałej konstrukcji do alternatywnej >. Osobiście uważam, że jeden rok jest raczej krótki. To znaczy, że mógłbym napisać jakiś kod i za półtora roku nie będzie już działał. ### PEP 291 PEP 291 zawiera niekompletną listę wskazówek, których należy unikać, aby zachować kompatybilność wsteczną. Dotyczy to jednak tylko Pythona 2.x. Ponieważ Python 2.7 jest ostateczną wersją serii 2.x, a Python 2.7 jest przeznaczony tylko do naprawiania błędów, ten PEP ma teraz tylko znaczenie historyczne. ### PEP 387 Istnieje również PEP 387 dotyczący zmian niekompatybilnych wstecz. PEP 387 to projekt, a nie oficjalna polityka. W czerwcu 2009 zostało to omówione na liście dyskusyjnej Python-ideas. Część dyskusji skupiła się na tym, jak programiści mogą pisać kod, który jest odporny na zmiany języka. Jeden post zawierał porady dotyczące tego, czego _nie_ robić: > Oprócz tego istnieje kilka zasad, które można wywnioskować, które prawdopodobnie są prawdziwe > w większości przypadków: nie wywołuj rzeczy zaczynających się od `"_"`, nie rób małp- łata > cokolwiek, nie używaj dynamicznego zastępowania klas na obiektach z klas innych > niż twoja, nie uzależniaj > od głębokości hierarchii dziedziczenia (np. bez `".__bases__[0].__bases__[0]" `), upewnij się, że twoje testy są uruchamiane > bez generowania ostrzeżeń o deprecjacji, pamiętaj o potencjalnych konfliktach przestrzeni nazw > podczas dodawania atrybutów do klas, które dziedziczą z innych > bibliotek. Nie sądzę jednak, że wszystkie te rzeczy są spisane w jednym miejscu >. Ponadto pojawiło się kilka punktów dotyczących „pola minowego” (nowe funkcje, które prawdopodobnie ulegną zmianie) i „obszarów zamrożonych” (bardzo sprzedane interfejsy API praktycznie gwarantowały, że się nie zmienią). Cytując Antoine'a Pitrou: > Myślę, że "obszar zamrożony" powinien być zdefiniowany pozytywnie (wyraźne publiczne API > i jawnie gwarantowane zachowanie), a nie negatywnie (wyraźne > "pole minowe"). W przeciwnym razie zapomnimy umieścić kilka ważnych rzeczy na polu minowym i ugryziemy się później, gdy będziemy musieli zmienić te rzeczy w sposób niekompatybilny wstecz. Wydaje się, że nie ma żadnych wniosków z tego wątku, ale zbliża się do sedna tego, czego szukam. Wątek ma już prawie cztery lata, więc być może sytuacja się zmieniła lub poprawiła. Jaki kod prawdopodobnie przetrwa, a jaki kod jest bardziej kruchy? ### Wskazówki dotyczące portowania Oprócz dokumentów wymienionych powyżej, każda wersja Pythona zawiera wskazówki dotyczące portowania: portowanie do Pythona 3.2, portowanie do Pythona 3.3 itd. ### Przydatna kompatybilność PEP 3151 wprowadził mnie w koncepcję _użytecznej kompatybilności_. Moim zdaniem sprowadza się to do idei, że tylko wtedy, gdy kod jest starannie napisany, programiści muszą uważać, aby zachować kompatybilność. Tak naprawdę nie definiuje _użytecznej kompatybilności_ , ale myślę, że jest podobny do pomysłów, które zacytowałem w dyskusji PEP 387 powyżej. ## Z punktu widzenia programistów Jako programista wiem, że Python zmieni się w przyszłości i że ludzie – przede wszystkim ja – spróbują uruchomić mój kod może za kilka lat w wersji Pythona, czyli jeden, dwa , a może trzy mniejsze wersje w górę. Nie wszystko będzie kompatybilne i tak naprawdę łatwo jest wymyślić kod, który się nie powiedzie (kiedyś natknąłem się na kod stwierdzający `if sys.version[:3] != '2.3': print 'Niewłaściwa wersja, wychodzenie''). To, czego szukam, to zestaw wytycznych dotyczących _co robić, a czego_ **nie** _robić_, aby zwiększyć szanse, że mój kod będzie nadal działał bez zmian w przyszłości. Czy istnieją takie wytyczne? **Jak napisać kod w Pythonie, który będzie działał w przyszłości?** Moje pytanie dotyczy zarówno rdzenia Pythona, jego standardowej biblioteki, jak i powszechnie używanych bibliotek dodatkowych, w szczególności `numpy`, `scipy `, `matplotlib`. * * * **EDYTUJ**: Jak dotąd dwie odpowiedzi dotyczą python2 vs. python3. Nie o to mi chodzi. Znam narzędzia do migracji z Python2 do Python3. Moje pytanie dotyczy zmian językowych _jeszcze nadchodzących_. Możemy lepiej niż _kryształowa kula_ znaleźć bardziej stabilne wytyczne kodowania. Na przykład: * `import module` jest bardziej przyszłościowy niż `from module import *`, ponieważ ten ostatni może złamać kod, jeśli `module` rozszerzy jedną lub więcej nowych funkcji/klas. * Korzystanie z nieudokumentowanych metod może być mniej odporne na przyszłość niż korzystanie z udokumentowanych metod, ponieważ coś, co jest nieudokumentowane, może oznaczać, że coś nie jest jeszcze stabilne. Szukam takich praktycznych porad dotyczących kodowania. Skoro chodzi o teraźniejszość→przyszłość, możemy ograniczyć się do Pythona3, ponieważ Python2 już się nie zmieni.


title: Jak określić poziomy abstrakcji?

text: Czytałem dziś książkę zatytułowaną „Czysty kod” i natknąłem się na akapit, w którym autor mówił o poziomach abstrakcji na funkcję, sklasyfikował kod jako niski/średni/wysoki poziom abstrakcji. Moje pytanie brzmi, jakie są kryteria określania poziomu abstrakcji? Cytuję akapit z książki: Aby upewnić się, że nasze funkcje robią „jedną rzecz”, musimy upewnić się, że wszystkie instrukcje w naszej funkcji są na tym samym poziomie abstrakcji. Łatwo zauważyć, w jaki sposób listing 3-1 narusza tę zasadę. Są tam koncepcje > na bardzo wysokim poziomie abstrakcji, takie jak > getHtml(); inne, które są na średnim poziomie abstrakcji, takie jak: > String pagePathName = PathParser.render(pagePath); i jeszcze inne, które są > wyjątkowo niskie, takie jak: .append("\n").


title: Jakie są zalety OOP opartego na prototypach nad OOP opartego na klasach?

text: Kiedy po raz pierwszy zacząłem programować JavaScript, mając do czynienia głównie z OOP w kontekście języków opartych na klasach, nie wiedziałem, dlaczego OOP oparty na prototypach miałby kiedykolwiek być preferowany od OOP opartego na klasach. 1. Jakie są strukturalne zalety korzystania z OOP opartego na prototypach, jeśli takie istnieją? (np. Czy spodziewalibyśmy się, że w niektórych aplikacjach będzie szybsze lub mniej pamięciożerne?) 2. Jakie są zalety z punktu widzenia kodera? (np. Czy łatwiej jest kodować określone aplikacje lub rozszerzać kod innych osób za pomocą prototypowania?) Proszę nie traktować tego pytania jako pytania o Javascript (który przez lata miał wiele błędów, które są całkowicie niezwiązane z prototypowaniem). Zamiast tego spójrz na to w kontekście teoretycznych zalet prototypowania w porównaniu z klasami. Dziękuję Ci.


title: Porady dotyczące architektury aplikacji/usług

text: Zaczynam projekt, który będzie miał fronton sieciowy dla użytkowników w połączeniu z bazą danych. Zostanie wtedy uruchomiona samodzielna usługa, która w określonych odstępach czasu będzie odpytywać interfejs API i aktualizować bazę danych o znalezione zmiany. Potrzebuję porady, jak skonfigurować usługę. Kiedy użytkownik utworzy konto w witrynie, będę musiał utworzyć „hak” w usłudze, który następnie przejdzie do odpytywania API dla tego konkretnego użytkownika. Przyjrzałem się tworzeniu usługi za pomocą NodeJS, ponieważ mogłem użyć nie- blokując jego strukturę wraz z wywołaniami zwrotnymi, wtedy API zwraca dane, które muszą być odzwierciedlone w bazie danych.Nie wiem, jak będę mógł utworzyć więcej monitorów, gdy użytkownik utworzy konto, ponieważ już działa.Czy NodeJS może działać w ciągła pętla jako usługa?Jestem zaznajomiony z .Net i mógłbym użyć usługi Windows, ale jak to skaluje się z odpytywaniem, gdy liczba użytkowników wzrośnie?


title: Model dokumentu edytora tekstu

text: Pracuję nad edytorem tekstu w javascript. Stworzyłem frontend i muszę wykonać prototyp backendu. Muszę zamodelować strukturę dokumentu używając tego jako hierarchii: Charakter , Słowo , Tag , Dokument Próbuję tworzyć obiekty w oparciu o tę hierarchię. Na przykład: Znaki są reprezentowane przez połączoną listę. Słowo to wskaźniki do pierwszego i ostatniego znaku. Tagi to kolejna połączona lista słów, a dokument to zbiór słów i tagów. Zastanawiam się, czy ktoś ma lepszą propozycję modelowania tych relacji jako klas. Otrzymuję znak z klawiatury i muszę go zapisać jako obiekt w moim modelu dokumentu. Dziękuję


title: Jak sprawić, by właściciele firm wykupili odpowiednio żądane zmiany produktów?

text: Pracuję w wewnętrznym sklepie IT. Używamy systemu podobnego do scrum. To, z czym teraz walczymy, to skłonienie właścicieli firm do śledzenia procesu. Wszyscy lubią to w koncepcji, dopóki czegoś nie chcą, wtedy proces jest dla innych ludzi. Jak przekonać ich, że podążanie za tym procesem da im bardziej spójne wyniki, niż po prostu rzucenie granatu przez płot i powiedzenie „niech to zadziała”.


title: Jak radzić sobie z ostrzeżeniami w starym projekcie

text: Pracuję nad projektem C++, który generuje bajilliony ostrzeżeń. Większość ostrzeżeń pojawiła się już po napisaniu kodu: * Początkowo projekt używał Visual C++ 8, wkrótce przełączenie na 9, ale nie ma dużej różnicy w generowanych ostrzeżeniach. Ostrzeżenia były albo naprawione, albo wyciszone, więc nie było wtedy ostrzeżeń. * Następnie dodano 64-bitowy cel. Wygenerował ogromną liczbę ostrzeżeń, głównie z powodu niechlujnego użycia typów (np. „unsigned” vs. „size_t”). Nikt nie zadał sobie trudu, ani nie miał czasu, aby je naprawić, gdy kod zadziałał w tym celu. * Następnie dodano obsługę innych platform korzystających z GCC (4.5 i 4.6, początkowo niektóre 4.4). GCC jest znacznie bardziej wybredny, więc generował znacznie więcej ostrzeżeń. Znowu nikt nie zadał sobie trudu, ani nie miał czasu, aby je naprawić. Było to skomplikowane przez fakt, że GCC nie miało pragma, aby uciszyć ostrzeżenie w konkretnym fragmencie kodu aż do 4.5, a zgodnie z dokumentacją nadal nie jest to to, czego potrzeba. * W międzyczasie pojawiły się przestarzałe ostrzeżenia. Więc teraz mamy projekt generujący tysiące ostrzeżeń. I nie mogę nawet powiedzieć z ilu miejsc, ponieważ nawet pliki `.cpp` są kompilowane kilka razy przez różne kompilatory, a ostrzeżenia w nagłówkach są drukowane w kółko. Czy istnieje najlepsza praktyka na sprzątanie czegoś takiego? A przynajmniej jakieś pozytywne doświadczenie z tym związane?


title: Jak zbudować serwis internetowy do wykrywania zmian treści na zewnętrznej stronie internetowej?

text: Poszukuję sposobów na zbudowanie usługi sieciowej do okresowego przechodzenia przez z góry określoną listę stron internetowych (innej zewnętrznej witryny internetowej) w celu wykrycia, czy zawartość strony zmieniła się od 1. edycji strony i 2. usunięcia strony. Ostatecznym celem jest, aby ta usługa internetowa publikowała zdarzenia powiadomień push na urządzeniach mobilnych. FYI, przeszukałem i przeczytałem "Pytania o podobnych tytułach" tutaj. Dziękuję za podzielenie się swoimi odpowiedziami.


title: Jak zaimplementować cukier składni w OO

text: ### Problem Regularnie piszę ten sam kod w kółko. Na przykład, jeśli chcę wartość z zagnieżdżonej struktury tablicy, piszę coś takiego: $config = function_to_get_nested_array(); $węzeł = $konfiguracja; foreach(array('vendor','product','config','leave') as $index => $key){ if(! isset($node[$key])){ //wyrzuć wyjątek } $węzeł = $węzeł[$klucz]; } Wolałbym mieć coś takiego jak $config = function_to_get_nested_array(); $node = get_node($config, 'dostawca/produkt/konfiguracja/wyjdź'); Ale jak to zaimplementować? ### Możliwe rozwiązania 1. Mógłbym zaimplementować funkcję tak jak powyżej. _ALE_ moje pakiety w dużym stopniu opierają się na automatycznym ładowaniu i są czysto OO. Teraz muszę tylko sklonować podmoduł w odpowiednim katalogu i wszystko działa dobrze. 2. Mogę to wdrożyć tam, gdzie tego potrzebuję. _ALE_ oznacza to, że muszę wdrażać go niezliczoną ilość razy w niezależnych projektach. 3. Mógłbym użyć cechy, gdybym nie utknął z PHP 5.3. Nie jest to dla mnie opcja. 4. Potrafię zaimplementować dostawcę usług statycznych. Z różnych powodów klasy i metody statyczne są zazwyczaj złym wyborem, ale kusi mnie, aby to zrobić w tym przypadku. użyj vendor\product\helpers\ArrayTree jako Tree ... $config = function_to_get_nested_array(); $węzeł = Drzewo::getNode($config, 'dostawca/produkt/konfiguracja/wyjście'); Wygląda _bardzo_ kusząco, ponieważ obsługuje automatyczne ładowanie i przestrzenie nazw. ### Pytanie Czy istnieje lepsze rozwiązanie do implementacji tego rodzaju funkcji pomocniczych?


title: Prywatne moduły aplikacji Node.js. Gdzie je umieścić?

text: Sytuacja wyglądałaby następująco: rozwijam 2 projekty w moim środowisku programistycznym Node.js, P1 i P2. P1 wymagał opracowania dwóch prostych modułów, mod1 i mod2, które są przechowywane w `P1/lib`. Każdy z tych modułów znajduje swoje zewnętrzne zależności w `P1/node_modules`. Niezbędne zależności dla P1 zostały zainstalowane w tym folderze przez npm. Teraz obraz, który chcemy ponownie wykorzystać mod1 w innym projekcie P2, oto moje wątpliwości. Mógłbym... * Po prostu skopiuj mod1 do `P2/lib`. Replikacja, więc nawet nie rozważam tej opcji. * Z P2 odwołuje się do mod1 z P1: `require($PROJECTS_DIR + '/P1/lib/mod1')`. Nie jest to dobra opcja, w ten sposób P2 będzie zależał od P1. * Umieść mod1 w katalogu wyższego poziomu lub użyj NODE_PATH, aby P1 i P2 mogły rozwiązać problem, po prostu nie `require('mod1')`. Jednak podczas wdrażania powinienem również wdrożyć ten katalog wyższego poziomu, który wydaje się nieco brudny. * Chciałbym traktować mod1 jako moduł npm, aby można go było łatwo zainstalować w dowolnym projekcie lub środowisku, jednak w tym konkretnym przypadku nie mogę opublikować modułu do npm, ponieważ jest to zbyt specyficzne dla projektu. Mógłbym stworzyć prywatne repozytorium npm i umieścić w nim mod1. Istotą tego byłoby skonfigurowanie go tak, aby był dostępny również ze środowiska produkcyjnego. Czy warto? * A co powiesz na złożenie tego wszystkiego razem w `node_modules`? (zależności zewnętrzne i własne biblioteki). Byłoby świetnie, ponieważ moduły mogą być po prostu wymagane, jak `require('module'). Ale wydaje się też dość brudny. * Nie jestem pewien, jak `npm link` będzie działał podczas wdrażania. Tworzy dowiązanie symboliczne, które nie jest stosowane podczas zatwierdzania kodu przez Git lub SVN. Jeśli uruchomię `npm install` w środowisku produkcyjnym, czy zainstaluje również połączony moduł? Żadne z powyższych nie do końca mnie satysfakcjonuje. Nie wiem, czy któraś z nich jest odpowiednia, czy macie inne sugestie, ale czy są jakieś preferowane sposoby tworzenia własnych **prywatnych** bibliotek, aby można je było łatwo ponownie wykorzystać w innych projektach?


title: obsługa wielu wywiadów/ofert

text: Jaki jest najlepszy sposób na radzenie sobie z sytuacją, w której masz lub oczekujesz wielu ofert? Idealna sytuacja jest taka, że kilka ofert pojawia się mniej więcej w tym samym czasie i dokonujesz wyboru. to jednak nie tak się dzieje. Możesz mieć ofertę i kilka prawie końcowych rozmów kwalifikacyjnych w kolejce na kolejne dni lub tygodnie. Jednym ze sposobów poradzenia sobie z tym byłoby poproszenie o dłuższy czas na podjęcie decyzji o pierwszych otrzymanych ofertach. 2 tygodnie? Daje to czas na pośpieszenie do końca z resztą rzeczy, przez które przechodzisz. mam jednak wątpliwości, czy prośba o 2 tygodnie na podjęcie decyzji jest rozsądna. Domyślam się, że pracodawca przejrzałby to i zmusiłby cię do ręki. Innym sposobem radzenia sobie z tym byłoby zaakceptowanie pierwszej oferty i poproszenie o rozsądny okres przed datą początkową, a następnie po prostu „zrezygnuj” z pierwszej pozycji przed rozpoczęciem pracy, jeśli pojawi się coś lepszego. Z jednej strony zatrudnienie jest dobrowolne, a pracodawcy regularnie z tego faktu korzystają. Z drugiej strony wydaje się to moralnie niewłaściwa rzecz i może spalić niektóre mosty. I oczywiście ostatnią opcją jest po prostu ocena każdej oferty osobno i zaakceptowanie lub odrzucenie w określonym czasie. jakieś pomysły?


title: SQL W/hibernacja vs rozwiązanie w pamięci

text: Niedawno zamieściłem tutaj pytanie: Metody udostępniania pamięci lub stanu w JVMs? i doceń odpowiedzi. Jednak, gdy przeczytałem kod i lepiej poznałem system, dowiedziałem się, że nadmiernie komplikowałem problem. Tylko jedna maszyna JVM naprawdę dba o dane dynamiczne, więc nie ma potrzeby przekazywania danych dynamicznych przez granice pamięci. Jednak nadal mamy problem, że ręcznie utrzymują stan między in-memory a sql; kod ręczny nie jest doskonały i nie chroni przed nieaktualnymi danymi, wyścigami danych itp. I chcę go całkowicie usunąć w taki czy inny sposób, abym mógł czuć się bardziej bezpieczny w ogólnej stabilności. Ponieważ tylko jedna JVM dba o dane dynamiczne, a dane dynamiczne mogą być regenerowane za każdym razem podczas uruchamiania (z niewielką karą czasową), moim zamiarem jest usunięcie wszystkich danych dynamicznych z sql i przechowywanie wszystkiego w pamięci; po co komplikować cokolwiek? Jednak podobało im się sql jako narzędzie do debugowania. Ten system jest rozwijany zwinnie, działa w systemie na żywo, ale ze względu na zwinną naturę pojawiają się błędy i błędy. Kiedy tak się dzieje, ssh do systemu live i debugowania go w locie; często poprzez przeglądanie bazy danych. SQL pozwala im zobaczyć rzeczywiste trasy i ścieżki, które są używane. Mogą również zobaczyć, kiedy trasa wygląda nieprawidłowo, zmienić ją, a następnie zrestartować moduł, aby stała ścieżka została załadowana do pamięci i od tej pory używana. Podoba im się ta umiejętność szybkiego naprawiania złych tras, nie chcą jej zgubić. Teraz mówi się o utrzymaniu bazy danych, ale o wspieraniu jej za pomocą hibernacji, aby uniknąć koszmaru ręcznego zsynchronizowania JVM i sql. Istnieje kilka innych drobnych korzyści, ale przede wszystkim dlatego, że mogą zachować sql i próbować używać go jako narzędzia do debugowania. Coś jest w tym wszystkim nie tak, ale nie jestem całkowicie pewien, CO jest w tym tak złego. Gdybyśmy porzucili dynamiczne dane sql, mógłbym częściowo emulować to, czego chcą, dodając komunikaty, aby wydrukować wykres bez zmian lub zmodyfikować wykres w locie, ale oczywiście napisanie każdej wiadomości zajmuje trochę czasu. Czy utrzymywanie SQL zamiast próbować pisać komunikaty, aby umożliwić zmianę pamięci w locie ma sens? Myślę, że użycie hibernacji może nieco utrudnić pisanie naszych obiektów, których używamy do generowania i utrzymywania ścieżek, ponieważ musimy zachować strukturę podobną do bazy danych SQL i tak dalej. Ale myślę, że moim prawdziwym problemem jest pomysł wprowadzenia zmian w naszym stanie w pamięci poprzez zmianę naszej bazy danych. To po prostu wydaje mi się niebezpieczne; w podobny sposób niewłaściwa enkapsulacja jest niewłaściwa. Nie sądzę, że podoba mi się pomysł naprawiania uszkodzonej trasy poprzez ręczną zmianę trasy w sql, jest bezpieczny. Ale nie wiem, jak wyrazić, dlaczego to wszystko jest nie tak. Może powinienem zasugerować lepsze rozwiązanie do debugowania? Czy mam rację, że się martwię, czy hibernacja jest naprawdę najlepszym podejściem?


title: Definicja architektury zgodna z normą IEC 62304

text: Obecnie mam za zadanie stworzyć architekturę oprogramowania zgodną z normą IEC 62304. Przepisy te są notorycznie niejasne i nie dostarczają żadnej rzeczywistej treści, co jest wymagane dla „architektury oprogramowania”. Standard określa > Producent powinien przekształcić wymagania dla > oprogramowania medycznego na udokumentowaną architekturę, która opisuje strukturę > oprogramowania i identyfikuje elementy oprogramowania. Teraz poszedłem do szkoły informatyki stosowanej, więc zdecydowana większość moich nauk dotyczyła tego, jak faktycznie pisać kod i pracować nad projektami, o ile pamiętam, nigdy nie omawialiśmy niczego związanego z tworzeniem diagramów architektury oprogramowania. Zasadniczo napisałem już całe oprogramowanie, ale do celów regulacyjnych muszę stworzyć tę dokumentację do projektu. Krótko mówiąc, moje pytanie brzmi: z czego dokładnie składa się „architektura oprogramowania”?


title: Jak skutecznie debugować za pomocą aplikacji opartej na swingu?

text: Próbuję zrozumieć, jak przycisk radiowy jest tworzony w polu dynamicznym, odczytując z XML przy użyciu Netbeans 7.0. Wiem, że przycisk radiowy jest tworzony, ponieważ XML jest odczytywany z bazy danych, ale nie widzę **jak** tworzony jest przycisk radiowy. Ponadto, ponieważ nie wiem, gdzie umieścić punkty przerwania, nie widzę, jak debugowałbym tworzenie komponentów w Edytorze dynamicznym. Może próbuję złego podejścia lub czegoś takiego, więc jak skutecznie debugować taką aplikację?


title: Czy ramki iframe to zapach designu?

text: W naszej firmie mamy dość stare, niezgrabne aplikacje .Net 1.1, które – zamiast na siłę aktualizować – po prostu dodają ramkę iFrame, aby można było porzucić nowe funkcje. Jest to tak dobrze znana opcja, że wielu pracowników zarządzających Tak naprawdę nie mam dużej wiedzy technicznej ani doświadczenia, sugerując po prostu wrzucenie ramki iframe na stronę, jakby to był jedyny sposób na rozwiązanie problemu. Nie mam problemu z elementem iframe per se, jeśli jest to absolutnie konieczne, ale wydaje się, że jest to bardzo wygodne narzędzie do czegoś, co można lepiej osiągnąć przy odrobinie przemyślenia i rozważenia projektu. Czy ramki iframe są odpowiednikiem zapachu kodu w projektowaniu stron internetowych?


title: Wewnętrzne wykonanie strony internetowej

text: Moje pytanie brzmi, jaki jest obszar tematyczny, który obejmuje wykonywanie/ładowanie strony internetowej. Chcę kupić książkę według tematu, która obejmuje, kiedy coś jest wykonywane lub ładowane na stronie internetowej, niezależnie od tego, czy jest to prosty html, html i JavaScript, czy strona PHP. Czy ten temat jest objęty szczegółową książką html, czy też powinienem spodziewać się znaleźć takie informacje w książce JavaScript lub PHP? Rozumiem, że PHP i Perl działają na serwerze i że Javascript jest po stronie klienta i wiem, że istnieje wiele dokumentacji on-line opisującej `<html>, <head>, <body>` i tak dalej. Zastanawiam się po prostu, jaki obszar tematyczny obejmuje książka, aby to wszystko opisać, nie dyskusja na temat najlepszej książki lub czyjejś ulubionej książki, ale obszar tematyczny.


title: Podpisywanie sterowników Windows

text: Moja firma opracowuje sterownik dla naszego sprzętu. Teraz muszę podpisać mój sterownik dla platform 32 i 64 bitowych. Proszę powiedz, teraz muszę kupić certyfikat Authenticode, prawda? Jakiego urzędu certyfikacji użyć? DigiCert? Globalny znak? (http://www.sslshopper.com/microsoft-authenticode-certificates.html) Symantec? (http://www.symantec.com/verisign/code-signing/microsoft- Authenticode) Jaka jest różnica między ofertami tego urzędu certyfikacji? Muszę skorzystać z narzędzi z WDK?


title: Jak zlokalizować kod źródłowy, który zaimplementował określoną funkcję?

text: Zastanawiałem się, jakie są techniki lokalizowania kodu implementującego konkretną funkcję w aplikacji komputerowej. Jestem młodszym programistą, posiadającym jedynie profesjonalne doświadczenie w programowaniu związane z programowaniem webowym. W sieci jest to łatwiejsze. Na przykład „sprawdzasz” przycisk za pomocą narzędzi przeglądarki i możesz zobaczyć, co się dzieje, gdy go klikniesz. A następnie, zakładając, że masz pełny kod źródłowy, możesz drążyć hierarchię wywołań. Ale jak to zrobić w aplikacjach desktopowych? Przynajmniej bez konieczności zagłębiania się w pełną bazę kodu?


title: Jakimi normami/standardami powinienem się kierować podczas pisania specyfikacji funkcjonalnej?

text: Chciałbym wiedzieć, jakimi dokumentami (ISO?) powinienem się kierować, pisząc specyfikację funkcjonalną. Albo czym powinni kierować się projektanci przy tworzeniu projektu systemu? Powiedziano mi, że w ostatnich latach nastąpił postęp, ale nie powiedziano mi, w jakim stopniu (profesor collegu). Dziękuję EDIT: Nie mówię o treści dokumentów itp., ale o standardach przechwytywania wymagań, analizy biznesowej.


title: Reprezentacje referencyjne RESTful - link semantyczny a uri

text: Projektujemy RESTful API, aby otwierać informacje o koncie naszych klientów. Mamy reprezentacje, które zawierają odniesienia do innych zasobów związanych z bieżącym zasobem. Wynika to z wielu najlepszych praktyk, które udało nam się znaleźć w publicznych interfejsach API, a także w opublikowanych materiałach. Reprezentacje mogą być w formacie XML lub JSON. Na przykład dla zasobu konta mielibyśmy odniesienia do adresów konta, a dla zasobu z listą stronicowaną mielibyśmy odniesienia do pierwszej, następnej i poprzedniej strony. Interfejs API został po raz pierwszy zaprojektowany przy użyciu linków semantycznych „<link title="" rel="" href="" />` zgodnie z opisem w książce O'Reilly i używanym w interfejsach API przez Netflix i Google. Kiedy nadszedł czas, aby nasi inżynierowie QA napisali pakiet automatyzacji, mieli problemy z deserializacją łączy. Zasugerowaliśmy teraz prostsze elementy ciągu uri, które były używane w interfejsach API przez Facebook i Twitter. Nasi inżynierowie QA rozwiązali już swoje problemy z deserializacją, ale nadal mam obawy co do łatwości użycia obecnej specyfikacji API z linkami semantycznymi. Nasz interfejs API będzie używany głównie przez naszych klientów i niektóre partnerstwa z innymi firmami, a my przeszliśmy do REST, ponieważ poprzedni interfejs API XML-RPC był zbyt trudny dla naszych konsumentów. tl; dr; Pytanie: ### Czy ktoś, kto zaimplementował reprezentację łącza semantycznego, miał problemy z konsumentami? * * * Aktualizacja (6/21): Postanowiłem pozostać przy linkach semantycznych i mam nadzieję, że zamieszanie było skrajnym przypadkiem. Postaram się pamiętać, aby odpowiedzieć na pytanie naszymi doświadczeniami, gdy interfejs API zostanie uruchomiony z niektórymi konsumentami. * * * Edycja: dodaj przykłady Konto semantyczne JSON: { "username": "paul", "links": [ { "title": "addresses", "rel": "related", "href": "http:/ /example.com/account/paul/addresses" }, { "title": "history", "rel": "related", "href": "http://example.com/account/paul/history" } ] } Semantyczny kod XML konta: <konto> <username>paul</username> <link title="addresses" rel="related" href="http://example.com/account/paul/addresses" /> <link title="history" rel="related" href="http://example.com/account/paul/history" /> </account> Proste konto JSON: { "username": "paul", "addresses": "http://example.com/account/paul/addresses" "history": "http://example.com/account/paul/history" } Prosty kod XML konta: <konto t> <username>pawel</username> <adresy>http://example.com/konto/paul/addresses</addresses> <history>http://example.com/account/paul/history</history> </konto>


title: Czy jestem totalnie nieprzystosowany do programowania, czy jest to dramat korporacyjny?

text: Moje wykształcenie: inżynier informatyk z około 4 i pół letnim doświadczeniem jako programista. W ciągu ostatniego roku zmieniłem 4 stanowiska programistyczne i obejmują firmy zarówno duże, jak i małe, zarówno produktowe, jak i usługowe, iw końcu rzuciłem wszystkie cztery stanowiska. Oto kilka typowych problemów, z którymi się borykam i jak mogę poprawić swoją sytuację w następnej pracy? 1. Oczekuje się, że doświadczeni programiści wejdą na pokład i zaczną wdrażać funkcje, nawet jeśli nie wiem w pełni, ile klas jest w grze. Oczywiście rozumiem, że będąc doświadczonym, nie mogę zająć dużo czasu, aby zdobyć projekt, ale dosłownie poprosiłem w ciągu pierwszych kilku tygodni, aby zacząć dawać aktualizacje statusu. 2. Menedżerowie projektów prawie zawsze mówią, a przynajmniej twierdzą, że byli programistami z innej technologii, wysyłającymi 2 komunikaty w tym samym czasie. Jednym z nich jest to, że oni również programowali w przeszłości, a drugim, że tak naprawdę nie mogą mi pomóc z bieżącymi problemami technicznymi projektu. 3. Wielkie wyzwanie, przez które obecnie przechodzi projekt, jest rzucone bezpośrednio na nowego nabywcę. Chociaż nie oczekuje się, że nowy gracz rozwiąże to od razu, ale przynajmniej oczekuje się, że da wiarygodne rozwiązanie, z którym zmaga się oryginalny zespół, nie wiem, jak długo. 4. Programowanie jest traktowane tak, jakby ludzie po prostu mieli rozwiązania od samego początku, a fakt, że prawie wszystko w tworzeniu oprogramowania wymaga wielu badań, jest całkowicie ignorowany. 5. Jeszcze jedna główna powszechna obserwacja jest taka, że każdy projekt jest w jakiś sposób skomplikowany w swoim projekcie, a kod jest nieco nieuporządkowany na początku. Jeśli wskaże się, że projekt wymaga przeprojektowania i nie może być kontynuowany jak POC, menedżerowie często postrzegają to jako niezdolny zasób, gdy zmiana projektu była konieczna dla przetrwania samego oprogramowania. Większość menedżerów po prostu nie jest zainteresowana słyszeniem „Nie” jako odpowiedzi na cokolwiek i chcą po prostu przeprowadzić pewne działania hakerskie, aby mogli zgłosić postępy kierownictwu wyższego szczebla. 6. Ogólnie stwierdziłem, że wszystkie cztery prace wydawały się być tym samym zakładem pracy z różnymi ludźmi, z prawie tym samym rodzajem złożoności i stresu. Rozmawiając z innymi kolegami z zespołu o tym, jak się czuję, mówią mi, że tak po prostu jest i musimy się z tym pogodzić. Czekałem na kilka sugestii, jak mogę poprawić swoją obecną sytuację, a także czy zmiana ścieżki kariery na zarządzanie może pomóc?


title: Pozyskiwanie i utrzymywanie danych z dużej liczby źródeł w sieci

text: Na potrzeby ćwiczenia chcę zagregować cenniki z cenami pochodzącymi z serii witryn internetowych w ustrukturyzowanej formie (XML, JSON...). Jeśli mam kontrolę po obu stronach, jak mogę sprawić, by aktualizacje cen były jak najbardziej efektywne? Edycja: Aby wyjaśnić, szukam bardziej wydajnego podejścia niż posiadanie skryptu lub aplikacji ściągającej w całości cenniki ze wszystkich źródeł w celu aktualizacji.


title: Oddzielenie dostępu do danych w ASP.NET MVC

text: Chcę mieć pewność, że przestrzegam standardów branżowych i najlepszych praktyk podczas mojego pierwszego prawdziwego cracku w MVC. W tym przypadku jest to ASP.NET MVC przy użyciu języka C#. Będę używał Entity Framework 4.1 dla mojego modelu, z obiektami code-first (baza danych już istnieje), więc będzie obiekt DBContext do pobierania danych z bazy danych. W demach, przez które przechodziłem na stronie asp.net, kontrolery mają w sobie kod dostępu do danych. Wydaje mi się to nie w porządku, zwłaszcza gdy podążasz za praktyką DRY (nie powtarzaj się). Załóżmy na przykład, że piszę aplikację internetową do użytku w bibliotece publicznej i mam kontroler do tworzenia, aktualizowania i usuwania książek w katalogu. Kilka akcji może przyjąć numer ISBN i wymagać zwrócenia obiektu „Książka” (zauważ, że prawdopodobnie nie jest to w 100% poprawny kod): public class BookController : Controller { LibraryDBContext _db = new LibraryDBContext(); public ActionResult Details(String ISBNtoGet) { Book currentBook = _db.Books.Single(b => b.ISBN == ISBNtoGet); zwróć widok(bieżąca książka); } public ActionResult Edit(String ISBNtoGet) { Książka currentBook = _db.Books.Single(b => b.ISBN == ISBNtoGet); zwróć widok(bieżąca książka); } } Zamiast tego, _should_ faktycznie mam metodę w moim obiekcie kontekstu db, aby zwrócić jedną książkę? Wygląda na to, że jest to dla mnie lepsze rozdzielenie i pomaga promować DRY, ponieważ być może będę musiał uzyskać obiekt książki według numeru ISBN w innym miejscu w mojej aplikacji internetowej. public częściowa klasa LibraryDBContext: DBContext { public Book GetBookByISBN(String ISBNtoGet) { return Books.Single(b => b.ISBN == ISBNtoGet); } } public class BookController : Controller { LibraryDBContext _db = new LibraryDBContext(); public ActionResult Details(String ISBNtoGet) { return View(_db.GetBookByISBN(ISBNtoGet)); } public ActionResult Edit(ByVal ISBNtoGet as String) { return View(_db.GetBookByISBN(ISBNtoGet)); } } Czy jest to prawidłowy zestaw reguł, których należy przestrzegać podczas kodowania mojej aplikacji? Albo, jak sądzę, bardziej subiektywne pytanie brzmiałoby: „czy to jest właściwy sposób na zrobienie tego?”


title: Najlepsze podejście do bazy danych długich ciągów

text: Muszę przechowywać pytania i odpowiedzi w bazie danych. Pytania będą składać się z jednego do dwóch zdań, ale odpowiedzi będą długie, co najmniej akapit, prawdopodobnie więcej. Jedyny sposób, w jaki wiem, żeby to teraz zrobić, to baza danych SQL. Jednak nie wydaje mi się, żeby to było dobre rozwiązanie, ponieważ z tego co widziałem, te bazy danych nie są używane dla danych tego typu lub rozmiaru. Czy to właściwa droga, czy jest lepszy sposób na przechowywanie tych danych? Czy jest lepszy sposób niż przechowywanie surowych sznurków?


title: Konwersja Delphi na pryzmat?

text: W moim biurze rozpoczynamy niezwykłą podróż polegającą na przekształceniu starej aplikacji Delphi 5 w coś bardziej nowoczesnego. Jedną z naszych opcji jest konwersja na pryzmat Delphi, ale chcemy zobaczyć, jakie opcje są dostępne, aby nam pomóc. Jak dotąd wszystko, co znalazłem, to Oxidizer (ostatnio pracowałem 2 lata temu). Czy są jakieś inne opcje, które pomogą nam dość szybko przejść na Pryzmat? Dziękuję.


title: Wzorzec projektowy: tablica statyczna/lista w obiekcie klasy

text: Jestem absolwentem CS, ale nie nauczyliśmy się zbyt wiele poprzez OOP lub wzorce projektowe. Słyszałem frazę C z iostreams i uznałem, że pasuje. W każdym razie nie o to chodzi. Jestem po prostu ciekawa, jak dostrzegam bardzo prosty wzorzec projektowy. Czy ktoś z was grał w grę Starcraft? Wiesz, jak możesz zaznaczyć/odznaczyć jednostki? Wróćmy do tego za sekundę. Załóżmy, że mam klasę jednostek i chciałem, aby śledziła wszystkie wybrane jednostki. Wpadłem na pomysł, że mogę utworzyć statyczną listę/tablicę wewnątrz klasy Unit, a same jednostki mogą dodawać lub usuwać się z tablicy, gdy były wybierane/odznaczane. To tylko jeden przykład, mogą istnieć inne zastosowania tego „wzoru”. Powiedzmy, że chcesz zachować listę widocznych "kart" w przeglądarce internetowej lub w/e, możesz dodać odwołanie do siebie w statycznej tablicy w klasie. Pomysł polega na tym, że możesz po prostu wywołać Unit.GetSelected() i uzyskać wskaźnik/odwołanie do wszystkich „wybranych” lub „otwartych” jednostek/kart. Zdaję sobie sprawę, że istnieją inne, może lepsze sposoby rozwiązania tych problemów, ale to też nie o to chodzi. Jak nazwałby się ten wzór?


title: Usługi sieciowe integracji systemów

text: Zostałem przydzielony do projektu integracji systemów. Nie rozumiem jednak części architektury implementacji integracji. Na przykład mam skaner paszportów podłączony do aplikacji Windows Client skonstruowanej w C++. Aplikacja kliencka przekaże zdjęcie paszportowe, imię i nazwisko, adres itp. (po zakończeniu skanowania paszportu) do aplikacji WPF. Nie jestem pewien, czy komunikacja między obydwoma systemami powinna być powiązana z usługami sieciowymi, czy jest na to inny sposób? Jeśli usługi sieci Web okażą się jedynym rozwiązaniem, która strona jest dostawcą usług sieci Web i zleceniodawcą? Z mojej perspektywy aplikacja WPF powinna stać się requesterem usługi sieciowej. Tymczasem aplikacja kliencka skanera działa jako dostawca usług internetowych, który będzie hostował usługi internetowe. Jednak w programie Visual Studio nie ma możliwości dodania pliku usługi WCF do projektu aplikacji klienckiej C++. Czy ktoś może mnie o tym oświecić?


title: jakie techniki można wykorzystać do wdrożenia funkcji „Osoby, które możesz znać” na Facebooku?

text: Z technicznego punktu widzenia jestem ciekaw, jakie techniki można wykorzystać do formułowania rekomendacji m.in. Facebooka „Ludzie, których możesz znać” (jakiego algorytmu używają itp.)? Jedną z rzeczy, które przychodzą mi do głowy, jest liczba wspólnych przyjaciół. Poza tym, jakie są różne parametry, których używają do zgłaszania sugestii?


title: Jaki język programowania wybrać do tego zadania XML i przetwarzania danych?

text: Obecnie koduję w PHP. Ostatnio pracowałem nad projektem wykorzystującym PHP i Symfony, który: 1. odczytuje duże pliki XML (dużo parsowania/odczytu DOM), 2. konwertuje duże pliki XML na duże tablice, 3. łączy 2 duże tablice (dużo sortowanie), 4. pobiera 2 duże tablice i przekształca je w duży plik CSV. Skończyłem go w PHP, ale teraz wymaga trochę pamięci i wymaga około 8-15 sekund do uruchomienia. Więc teraz mam następujące opcje i potrzebuję pomocy w wyborze jednej z nich: 1. Spróbuj przepisać/refaktoryzacji używając lepszych metod w PHP 2. Wybierz inny język programowania (chciałem się nauczyć jednego, być może inny język przetwarza te rzeczy o wiele szybciej ?) 3. Zrób 1 lub 2 i dodatkowo skonfiguruj coś, aby stale czytać pliki xml i zapisywać je do dokumentów MongoDB, aby obsługiwać klientów z bazy danych zamiast złomowania danych. Jestem skłonny zrobić 2 lub 3 (używając innego języka), ponieważ jestem pewien, że istnieje inny język, który obsługuje tego rodzaju zadania znacznie szybciej (np. Python, C itp.). Po prostu nie jestem pewien, który.


title: kolizje UUID

text: Czy ktoś przeprowadził jakiekolwiek prawdziwe badania nad prawdopodobieństwem kolizji UUID, zwłaszcza z UUID w wersji 4 (losowe), biorąc pod uwagę, że generatory liczb losowych, których używamy, nie są naprawdę losowe i że możemy mieć dziesiątki lub setki identycznych maszyn z tym samym kodem generowanie identyfikatorów UUID? Moi współpracownicy uważają, że testowanie kolizji UUID jest kompletną stratą czasu, ale zawsze wprowadzam kod, aby przechwycić wyjątek zduplikowanego klucza z bazy danych i spróbować ponownie z nowym UUID. Ale to nie rozwiąże problemu, jeśli UUID pochodzi z innego procesu i odnosi się do rzeczywistego obiektu.


title: Zaczynasz programowanie systemu?

text: Odkąd odkryłem programowanie pięć lat temu, zrobiłem wiele rzeczy. Nauczyłem się wielu języków programowania i technologii oraz wypróbowałem wiele ciekawych rzeczy. Pisałem gry, zarówno konsolowe, jak iz grafiką, aplikacje konsolowe i okienkowe, które działają na pulpicie, aplikacje webowe CRUD, własną (kiepską) bazę danych opartą na PHP XML. Oprócz sieci i komputerów, próbowałem tworzyć aplikacje mobilne na Androidzie, ale nie podobało mi się to, więc przestałem to robić. Niedawno ukończyłem mój projekt internetowy i teraz uczę się programowania funkcjonalnego (Haskell). Ale nigdy wcześniej nie zajmowałem się programowaniem systemowym. Pomysł budowania oprogramowania (nie jestem nawet pewien, czy jest to właściwa terminologia do użycia) na niskim poziomie, który współdziała z systemem operacyjnym, wydaje się interesujący. Problem polega na tym, że nie jestem pewien, jak dokładnie zacząć i potrzebuję więcej przykładów tego, co z tym robię. Czy powinienem zacząć od nauki API Win32? Znam trochę C++, ponieważ używałem go do tworzenia wielu aplikacji i gier na konsole, ale nie używałem go od kilku lat. Czy to jest droga do zrobienia? A co z C? Planuję dowiedzieć się więcej o C (korzystając z książki K&R) przed końcem lata i rozpoczęciem studiów. Chcę mieć dobry start jako student pierwszego roku studiów z solidnym przygotowaniem programistycznym.


title: Poświęcanie zbyt dużo czasu na debugowanie

text: Wczoraj wypuściłem wersję 1.0 projektu internetowego, nad którym pracowałem około 6 tygodni (z przerwami). Nie sporządziłem żadnych dokładnych zapisów swojego czasu, ale zgodnie z moimi doświadczeniami oszacowałbym, że z całego czasu spędzonego na programowaniu połowa tego czasu została poświęcona na debugowanie. Szacuję, że będzie to około 15-20 godzin poświęconych na debugowanie, co jest dla mnie cennym czasem, który można by lepiej poświęcić na pisanie nowego kodu lub wcześniejsze ukończenie projektu. Szczególnie nie pomaga to, że za 5 tygodni będę studentem pierwszego roku w college'u. Chodzi o to, że czuję się źle, że spędzam cały ten czas na debugowaniu. Cały ten czas spędzony na debugowaniu uświadamia mi, że podczas opracowywania projektu popełniłem kilka głupich błędów, których naprawienie kosztowało mnie cholernie dużo czasu. Jak mogę temu zapobiec w przyszłości? Nie chcę spędzać 50% czasu na debugowaniu, wolę poświęcić 10% na debugowanie, a resztę na pisanie nowego kodu. Jakie techniki mogę wypróbować, aby osiągnąć ten cel?


title: Czy testy jednostkowe powinny być przechowywane w repozytorium?

text: Jestem rozwijającym się programistą, który w końcu wprowadza w życie testowanie jednostkowe dla biblioteki, którą przechowuję na GitHub. Przyszło mi do głowy, że mogę włączyć zestawy testów do repozytorium, ale gdy rozglądam się po innych projektach, włączenie testów wydaje się trafione lub chybione. Czy uważa się to za złą formę? Czy pomysł, że użytkowników interesuje tylko działający kod i że i tak będą testować we własnym frameworku?


title: Co definiuje solidny kod?

text: Mój profesor odwołuje się do tego przykładu Javy, kiedy mówi o „solidnym” kodzie: if (var == true) { ... } else if (var == false) { ... } else { ... } że "solidny kod" oznacza, że twój program bierze pod uwagę wszystkie możliwości i że nie ma czegoś takiego jak błąd - wszystkie sytuacje są obsługiwane przez kod i skutkują prawidłowym stanem, stąd "inne". Wątpię jednak. Jeśli zmienna jest wartością logiczną, jaki jest sens sprawdzania trzeciego stanu, gdy trzeci stan jest logicznie niemożliwy? „Nie mieć czegoś takiego jak błąd” również wydaje się śmieszne; nawet aplikacje Google wyświetlają błędy bezpośrednio użytkownikowi, zamiast połykać je po cichu lub w jakiś sposób uznawać je za stan prawidłowy. I dobrze – lubię wiedzieć, kiedy coś pójdzie nie tak. I wydaje się, że twierdzenie, że aplikacja nigdy nie będzie zawierała żadnych błędów, wydaje się całkiem słuszne. Jaka jest więc _rzeczywista_ definicja „solidnego kodu”?


title: Dlaczego nie XHTML5?

text: Powiedziano mi, że HTML5 jest wielkim krokiem naprzód. Ostatnim krokiem naprzód, o którym wiem, było wprowadzenie XHTML. Zalety były oczywiste: prostota, ścisłość, możliwość używania standardowych parserów i generatorów XML do pracy ze stronami internetowymi i tak dalej. Jakże dziwne i frustrujące jest to, że HTML5 cofa to wszystko: po raz kolejny pracujemy z niestandardową składnią; po raz kolejny mamy do czynienia z bagażem historycznym i złożonością parsowania; po raz kolejny nie możemy używać naszych standardowych bibliotek XML, parserów, generatorów lub transformatorów; i wszystkie zalety wprowadzone przez XML (rozszerzalność, przestrzenie nazw, standaryzacja itd.), które W3C spędziło dekadę na forsowaniu z dobrych powodów, zostały utracone. W porządku, mamy XHTML5, ale wygląda na to, że nie zyskał on popularności tak jak kodowanie HTML5. Zobacz na przykład to pytanie SO. Nawet specyfikacja HTML5 mówi, że HTML5, a nie XHTML5, „jest formatem sugerowanym dla większości autorów”. Czy moje fakty się mylą? W przeciwnym razie, dlaczego tylko ja czuję się w ten sposób? Dlaczego ludzie wybierają HTML5 zamiast XHTML5?


title: Czy komentarze XML są niezbędne do dokumentacji?

text: Kiedyś byłem fanem wymagania komentarzy XML do dokumentacji. Od tego czasu zmieniłem zdanie z dwóch głównych powodów: > 1. Podobnie jak dobry kod, metody powinny być oczywiste. > 2. W praktyce większość komentarzy XML to bezużyteczny szum, który nie daje żadnej dodatkowej wartości. > Wiele razy po prostu używamy GhostDoc do generowania ogólnych komentarzy i to właśnie rozumiem przez bezużyteczny szum: /// <summary> /// Pobiera lub ustawia jednostkę miary. /// </summary> /// <value> /// Jednostka miary. /// </value> ciąg publiczny UnitOfMeasure { get; ustawić; } Dla mnie to oczywiste. To powiedziawszy, jeśli byłyby specjalne instrukcje do uwzględnienia, powinniśmy bezwzględnie używać komentarzy XML. Podoba mi się ten fragment tego artykułu: > Czasami będziesz musiał napisać komentarz. Ale powinien to być wyjątek > nie reguła. Komentarze powinny być używane tylko wtedy, gdy wyrażają > coś, czego nie można wyrazić w kodzie. Jeśli chcesz pisać elegancki > kod, postaraj się wyeliminować komentarze i zamiast tego napisz kod samodokumentujący. **Czy mylę się, myśląc, że powinniśmy używać komentarzy XML tylko wtedy, gdy kod nie jest wystarczający do samodzielnego wyjaśnienia?** Uważam, że jest to dobry przykład, w którym komentarze XML sprawiają, że ładny kod wygląda brzydko. Zajmuje klasę taką jak ta... public class RawMaterialLabel : EntityBase { public long Id { get; ustawić; } ciąg publiczny Identyfikator producenta { get; ustawić; } ciąg publiczny NumerCzęści { get; ustawić; } ciąg publiczny Ilość { get; ustawić; } ciąg publiczny UnitOfMeasure { get; ustawić; } ciąg publiczny Numer Lotu { get; ustawić; } ciąg publiczny NumerPodlotu { get; ustawić; } public int NumerSeryjny Etykiety { get; ustawić; } ciąg publiczny NumerZleceniaZakupu { get; ustawić; } ciąg publiczny NumerLiniiZamówieniaZakupu { get; ustawić; } public DateTime Data produkcji { get; ustawić; } ciąg publiczny LastModifiedUser { get; ustawić; } public DateTime LastModifiedTime { get; ustawić; } public NumerWersji Binarnej { get; ustawić; } public ICollection<LotEquipmentScan> LotEquipmentScans { get; zestaw prywatny; } } ... I zamienia to w to: /// <summary> /// Pojemnik na właściwości etykiety surowca /// </summary> public class RawMaterialLabel : EntityBase { /// <summary> /// Pobiera lub ustawia identyfikator. /// </summary> /// <value> /// Identyfikator. /// </value> publiczny długi identyfikator { get; ustawić; } /// <summary> /// Pobiera lub ustawia identyfikator producenta. /// </summary> /// <value> /// Identyfikator producenta. /// </value> ciąg publiczny Identyfikator producenta { get; ustawić; } /// <summary> /// Pobiera lub ustawia numer części. /// </summary> /// <value> /// Numer części. /// </value> ciąg publiczny NumerCzęści { get; ustawić; } /// <summary> /// Pobiera lub ustawia ilość. /// </summary> /// <value> /// Ilość. /// </value> ciąg publiczny Ilość { get; ustawić; } /// <summary> /// Pobiera lub ustawia jednostkę miary. /// </summary> /// <value> /// Jednostka miary. /// </value> ciąg publiczny UnitOfMeasure { get; ustawić; } /// <summary> /// Pobiera lub ustawia numer partii. /// </summary> /// <value> /// Numer partii. /// </value> ciąg publiczny Numer Lotu { get; ustawić; } /// <summary> /// Pobiera lub ustawia numer podpartii. /// </summary> /// <value> /// Numer podpartii. /// </value> ciąg publiczny NumerPodlotu { get; ustawić; } /// <summary> /// Pobiera lub ustawia numer seryjny etykiety. /// </summary> /// <value> /// Numer seryjny etykiety. /// </value> public int NumerSeryjny Etykiety { get; ustawić; } /// <summary> /// Pobiera lub ustawia numer zamówienia zakupu. /// </summary> /// <value> /// Numer zamówienia zakupu. /// </value> ciąg publiczny NumerZleceniaZakupu { get; ustawić; } /// <summary> /// Pobiera lub ustawia numer wiersza zamówienia zakupu. /// </summary> /// <value> /// Numer wiersza zamówienia zakupu. /// </value> public string NumerLiniiZamówieniaZakupu { get; ustawić; } /// <summary> /// Pobiera lub ustawia datę produkcji. /// </summary> /// <value> /// Data produkcji. /// </value> public DateTime Data produkcji { get; ustawić; } /// <summary> /// Pobiera lub ustawia ostatnio zmodyfikowanego użytkownika. /// </summary> /// <value> /// Ostatni zmodyfikowany użytkownik. /// </value> ciąg publiczny LastModifiedUser { get; ustawić; } /// <summary> /// Pobiera lub ustawia czas ostatniej modyfikacji. /// </summary> /// <value> /// Czas ostatniej modyfikacji. /// </value> public DateTime LastModifiedTime { get; ustawić; } /// <summary> /// Pobiera lub ustawia numer wersji. /// </summary> /// <value> /// Numer wersji. /// </value> public Numer_wersji binarnej { get; ustawić; } /// <summary> /// Pobiera skany wyposażenia partii. /// </summary> /// <value> /// Skanuje wyposażenie partii. /// </value> public ICollection<LotEquipmentScan> LotEquipmentScans { get; zestaw prywatny; } }


title: Freelancerzy, czy masz dopłatę za pójście do pracy u klienta?

text: Obecnie jestem początkującym freelancerem jako programista i muszę dowiedzieć się, jakie są niektóre z „norm”, bez upodabniania się do amatora. Wygrałem już trochę pracy od lokalnej firmy zajmującej się rozwojem C# i podając stawkę godzinową za pracę, którą wykonuję w moim biurze. Jednak przy jednym nadchodzącym projekcie zostałem poproszony o przybycie na miejsce (biuro klienta), aby pracować przez cały tydzień. Czy rozsądne jest naliczanie opłat wyższych niż zwykła stawka godzinowa za pracę na miejscu? A jak mam uzasadnić dodatkowe opłaty?


title: Jak zostać zatrudnionym jako zdalny programista za granicą, a nie być przedsiębiorcą?

text: Pytanie jest dość interesujące jak dla mnie, ponieważ oglądałem ogłoszenia o ofertach pracy i przeważnie wszystkie: * A) Wymagają lokalizacji w tym samym kraju co wakat * B) Pracodawcy nie chcą zatrudniać zagranicznych programistów, jeśli nie mają H1B lub coś * C) Z reguły większość ogłoszeń zawiera stanowisko na kontrakt na 6 miesięcy. Mogę dodawać przez dłuższy czas listę opisującą jakąś pracę dopisuje specyfikacje, zresztą z reguły większość stanowisk wymaga statusu współpracy niepracowniczej. Nie mam firmy zajmującej się tego rodzaju „robieniem projektów na zlecenie klienta”, więc jest to dość skomplikowane; Więc próbowałem tylko, jeśli chodzi o statystykę, dowiedzieć się, czy jest sposób na zatrudnienie za granicą zdalnego programisty, tak jakbym został zatrudniony w moim rodzinnym mieście? Nie chodzi o to, żebym był zatrudniony tam, gdzie mogę być zatrudniony „bo jestem w tym czy tamtym miejscu”, ale o możliwość (nie relokację), która właściwie powinna dostarczać dzisiejsze technologie, szczególnie dla informatyków z wielu różnych dziedzin; A więc pytanie, czy można pracować w dowolnym kraju w trybie zdalnym, tak jakbym pracował we własnym miejscu? Czego do tego potrzebuję? Czy możesz doradzić kilka przydatnych stron internetowych w tym kierunku?


title: Jakie języki proceduralne obsługują algebraiczne typy danych?

text: Jedną z rzeczy, które lubię w nowym języku Apple Swift, jest to, że łączy on programowanie proceduralne z algebraicznymi typami danych. Jakie inne języki to robią?


title: Czy powinniśmy przenosić programistów między pomieszczeniami, aby pogrupować ich według projektu, w który są zaangażowani?

text: Załóżmy, że firma prowadzi kilka projektów jednocześnie. Kiedy projekt osiągnie określony stan (zakończony, beta jest wysłana itp.), niektórzy ludzie przechodzą do innych projektów, a następnie do drugiego, w nieskończoność. Dobrym pomysłem może być przypisanie pokoi do określonych projektów i przeniesienie tam osób, gdy tylko zostaną dodani do projektu. Niektóre metodologie oprogramowania, na przykład Scrum i inne zwinne, wyraźnie deklarują, że posiadanie wszystkich programistów w tym samym pomieszczeniu jest dobrodziejstwem i korzyścią dla rozwoju. Jednak grupa programistów spędzająca lata pracy w świetlicy tworzy konstruktywną i silną relację między jej członkami. Programiści w nim zawsze wiedzą, kogo poprosić o poradę na temat konkretnej technologii, a bliskość sprawia, że ludzie są pomocni i ufni. Można również skorzystać z bliższej interakcji społecznej. Czy należy zmarnować taką okazję tylko po to, by zaaranżować kilku partnerów do konkretnego, krótkoterminowego projektu? Innymi słowy, **jak powinniśmy zorganizować przenoszenie programistów między pokojami?** Uwaga: Być może najlepszą opcją jest trzymanie każdego programisty w osobnym biurze. Załóżmy jednak, że rozważane biuro nie jest na to wystarczająco duże.


title: Dobra praktyka programowania dla podobnych zajęć dla dzieci

text: Tworzę aplikację na iOS, w której muszę narysować kilka wzorów na widoku na podstawie wybranej przez użytkownika opcji. Pozwól, że wyjaśnię ci jaśniej. Użytkownikowi zostanie wyświetlona liczba obrazów jako opcje do wyboru. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/pmxti.jpg) Po wybraniu opcji zostanie narysowany widok. Ten widok dziedziczy z klasy, powiedzmy `ParentClass`, gdzie ustawiłem wspólne właściwości dla klas potomnych. - -**ParentClass** @interface ParentClass : UIView -(ImagePlaceHolder *) imageHolderTouched:(CGPoint) pozycja; //wspólne właściwości zadeklarowane @end Obecnie moje podejście polega na użyciu oddzielnych klas dla każdego wzorca. Zastępuję `drawRect:` dla różnych wzorców. Dlatego dla każdej z nich tworzę osobne klasy potomne. **ChildDesign** @interface ChildDesign : ParentClass @end @implementation CollageDesign - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // Kod inicjujący [self drawViews]; } zwróć siebie; } -(void) drawRect:(CGRect)rect { //różna implementacja dla różnych klas } @end Istnieje wiele podobnych klas potomnych, które mają tylko inną implementację `drawRect`. W kontrolerze głównym inicjuję klasę potomną wzorca na podstawie wyboru za pomocą przypadku przełącznika. ParentClass collView; switch (selectedOptionIndex) { case 1: collView = [[ChildDesign alloc] initWithFrame:newframe]; przerwanie; przypadek 2: collView = [[ChildDesign2 alloc] initWithFrame:nowaramka]; //podobne inne klasy break; case 3: collView = [[ChildDesign3 alloc] initWithFrame:newframe]; przerwanie; } Problem w tym, że mam dużo opcji, powiedzmy 50 - 100. Tworzenie oddzielnych dziedziczonych klas (50 - 100 plików .h i .m) byłoby moim zdaniem bardzo złym podejściem i jest złą praktyką programistyczną. Więc jaki wzorzec powinienem tutaj zastosować, aby zoptymalizować mój kod? Jak powinienem stworzyć moje klasy/wzory dla dzieci? Jakie będzie najlepsze podejście? Pomysł w mojej głowie to przekazanie wybranego indeksu do Mam nadzieję, że moje pytanie jest jasne.. Dzięki. Moim zdaniem pomysł polega na stworzeniu jednej klasy wzorca potomnego z wybranym indeksem jako właściwością. Na podstawie wybranego indeksu zaimplementuję metodę `drawRect:`. Ale będzie wiele przypadków if-else lub switch.


title: Tworzenie strony internetowej bez ram

text: Używam frameworków PHP od tak dawna, że właściwie zapomniałem "najlepszych praktyk" tworzenia stron internetowych bez nich. Zwykle używam Symfony, a ostatnio używam Laravela. Klient chce mieć bardzo prostą stronę internetową, ale z pewnymi jej elementami dynamicznymi. Ze względu na charakter strony, korzystanie z Wordpressa lub Frameworka nie wchodzi w rachubę. Jestem frajerem, że szczycę się swoim kodem, ale wydaje mi się, że zadaję tak podstawowe pytanie, że aż mnie zabija. Ale jakie są najlepsze praktyki tworzenia stron internetowych bez frameworka? Lubię żyć według metody myślenia K.I.S.S (Keep It Simple Stupid!). Mój pomysł polegał na tym, aby po prostu utworzyć wymagane strony .php, wykonać dowolne przetwarzanie strony lub interakcję z bazą danych na tej stronie, a następnie umieścić kod HTML pod zamykającym tagiem PHP. Miałbym żadnych pomocników/funkcji w pliku functions.php. To jest to, co pamiętam, zanim zacząłem używać Frameworków i wydaje mi się, że jest to bardzo oldschoolowy sposób robienia rzeczy. Nie stworzyłem strony bez Frameworka przez dosłownie 2 lata, więc zgubiłem się w podstawach. Każda rada byłaby bardzo mile widziana.


title: Narzędzia uniksowe w zastosowaniach biznesowych: czy są pomocne?

text: Czy uważasz, że znajomość narzędzi uniksowych, takich jak sed, awk, LaTeX, Perl, daje ci wielką przewagę w świecie biznesu? (np. bycie menedżerem) Z mojej krótkiej refleksji wynika, że jedynym zawodem, który potrzebuje tego rodzaju narzędzi (zwykłego tekstu) jest programowanie. Bo nawet kiedy piszę twórczo, rzadko kiedy tego potrzebuję. Chodzi mi o to, czy dyrektorzy generalni i dyrektorzy dużych korporacji kiedykolwiek uczą się tego rodzaju rzeczy, jeśli nie byli specjalistami od CS?


title: Przykładowy kod pod MS-PL: czy trzeba zostawić oryginalne komentarze?

text: W moim projekcie mam kilka plików, które rozpoczęły się od przykładu w przeglądarce przykładowej kodu „wszystko w jednym”: http://visualstudiogallery.msdn.microsoft.com/4934b087-e6cc-44dd-b992-a71f00a2a6df Niektóre pliki zawierają standardowy kod, który Mocno modyfikuję. Zawierają one komentarze MS na górze, które wspominają o licencji, prawach autorskich Microsoft itp. Czy muszę zostawić cały blok komentarzy na górze plików źródłowych, które modyfikuję, czy mogę po prostu dołączyć licencję MS-PL w osobnym plik dla całego projektu?


title: Czy masz listę znajdź/zamień ulepszenia kodu C/C++, które nie powodują skutków ubocznych?

text: Raz za razem musisz pracować z kodem, który nie jest tak bezpieczny, jak byś chciał. Albo to jest kod kogoś innego, albo coś, co napisałeś o 3 nad ranem 5 lat temu, ale tak się dzieje. W takich przypadkach dobrze byłoby uczynić ten kod trochę bezpieczniejszym i bardziej podatnym na błędy pisarskie. Jednocześnie chcesz uniknąć obszernych testów, a jeśli kod nie jest objęty testami jednostkowymi, cóż, bądźmy szczerzy, nawet jeśli tak jest, nie możesz być pewien, że niczego nie zepsujesz podczas większości refaktoryzacji rzeczy. Zastanawiam się więc, jaka byłaby krótka lista kodu C/C++, który można zautomatyzować, aby prawie „znaleźć/zamienić wszystko”, co uczyniłoby kod bezpieczniejszym, bez wysokiego ryzyka zmiany zachowania programów. Kilka rzeczy, które przyszły mi do głowy: * Uczyń wszystkie funkcje składowe const * Ustaw wszystkie argumenty dla wewnętrznie połączonych funkcji const * Usuń wszystkie rzutowania w stylu C i zastąp je rzutowaniami w stylu C++ na błędy * Zamień większość makr w funkcje wbudowane lub szablony * Zmień wyliczenia do wpisanych wyliczeń Większość z nich wymagałaby jednak rekompilacji i ręcznej weryfikacji. Masz innych kandydatów, a może nawet bezpieczniejszych?


title: jeśli chcę nauczyć się budować strony internetowe, czy powinienem zajmować się xhtml, czy od razu przejść do html5?

text: Czy nadal istnieje praktyczny powód, aby uczyć się xhtml? Czy powinienem nauczyć się tworzyć swoje strony internetowe w xhtml zamiast w html5, czy ma to znaczenie?


title: Egzaminy certyfikacyjne Qt

text: Zastanawiam się nad zrobieniem w tym roku egzaminu certyfikacyjnego Qt, ale nie jestem w 100% pewien, czy inwestycja jest warta. Rozważam to, ponieważ myślę, że mogłoby to być miłe **+** w moim CV, a jak wiecie, jestem za ulepszeniem mojej osobowości inżyniera oprogramowania. Ponieważ już zdobyłem tytuły licencjata i magistra z informatyki, proces certyfikacji sądzę, że postrzegam go jako rodzaj przygody. W każdym razie wiem, że spędzę dużo czasu przygotowując się do egzaminu i chciałem tylko wiedzieć, czy certyfikacja Qt jest warta wysiłku. Podobno w świecie Qt można uzyskać 2 certyfikaty: * **Nokia Certified Qt Developer** (podstawowy) * **Nokia Certified Qt Specialist** (zaawansowany) Obecnie buduję wieloplatformowe oprogramowanie w C++ i ten egzamin pięknie pasowałby do mojego CV. Moją główną obawą jest to, że **biorąc pod uwagę niejasną przyszłość Qt**, mogę wyrzucać czas i pieniądze przez okno. Poszukuję porad dotyczących przydatności takich certyfikatów.


title: Reguła SONAR i DesignForExtensionCheck

text: Podczas włączania funkcji SONAR w wewnętrznym projekcie Java zgłaszana jest duża liczba naruszeń z powodu reguły `DesignForExtensionCheck`. Chociaż zgadzam się z teorią, że wszystkie klasy/metody powinny być oznaczone jako abstrakcyjne, końcowe itp. Ale czy jest to absolutnie konieczne w przypadku aplikacji wewnętrznej, w której programiści mają pełną kontrolę nad bazą kodu i testami jednostkowymi itp.? Przykładem jest obiekt wartości, w przypadku którego każdy pobierający/ustawiający musi być ostateczny, aby przejść ten test. Kiedy masz ponad 500 takich problemów zgłaszanych, jest to wielka prośba o zmodernizowanie kodu. Niektórzy stwierdzili, że Java ma pewne wady, a jedną z nich jest to, że klasy/metody nie są domyślnie ostateczne. Pamiętając, że nie mamy ostatecznego zachowania jako domyślnego, ile wysiłku naprawdę musimy włożyć, aby zadeklarować wszystko jako ostateczne? Uwaga: zdaję sobie sprawę, że API używane przez strony trzecie musi mieć ściślejsze kontrole. To pytanie dotyczy aplikacji wewnętrznych.


title: Jakie wdrożenie programu jest dobre dla studiowania SICP?

text: Słyszałem o doktorze Scheme, ale tak naprawdę go nie używałem. Jakie jest Twoje doświadczenie z SICP, jakiego zestawu narzędzi programowych używałeś podczas nauki SICP?


title: Wieloplatformowy rozwój mobilny VS Native Mobile Development: Teraźniejszość i przyszłość

text: Właśnie ukończyłem rok w rozwoju smartfonów, pracując nad BlackBerry i Androidem, a także opracowałem jedną aplikację skierowaną wyłącznie do telefonów z funkcjami Nokia. A zaledwie miesiąc temu dowiedziałem się o narzędziu Titanium Appcelerator, które umożliwia rozwój międzyplatformowy, ale są programiści, którzy narzekają na jego słabą funkcjonalność. Nawet moje niewielkie doświadczenie mówi, że programowanie w środowisku natywnym, a nie w tych wieloplatformowych narzędziach, da więcej korzyści, dając programiście szansę na dodanie większej liczby funkcji o lepszej wydajności. Czy masz takie samo doświadczenie? A może uważasz, że takie narzędzia programistyczne są naprawdę przydatne, jeśli chodzi o zwiększanie funkcjonalności i wydajności? Ponieważ przenoszenie (lub współtworzenie) tej samej aplikacji na inną platformę mobilną jest w dzisiejszych czasach powszechną rzeczą, jak myślisz, jak te wieloplatformowe narzędzia będą ewoluować i zmuszą programistów do praktycznego podejścia do nich, czy większość pozostanie przy natywnym środowisku programistycznym?


title: Jak nie dać się ponieść szczegółom?

text: Kiedy programuję, często za bardzo angażuję się w szczegóły. Może być jakaś drobnostka, która nie robi _dokładnie_ tego, czego chcę, a może jest jakaś mała funkcja, którą chcę dodać. Tak czy inaczej, żadne z nich nie są tak naprawdę istotne dla aplikacji - to tylko drobna uciążliwość (jeśli w ogóle). Jednak próbując to naprawić, może się zdarzyć, że spędzę nad tym znacznie więcej czasu niż planowałem, a są rzeczy o wiele ważniejsze, które powinienem zrobić, zamiast zajmować się tym drobnym szczegółem. Co mogę zrobić, aby nie dać się ponieść szczegółom, gdy trzeba zrobić ważniejsze rzeczy? (Nie wiedziałem, jak otagować to pytanie, więc możesz dodać wszelkie odpowiednie tagi, których brakuje).


title: Dlaczego pierwotnie „goto” miało być zawarte w Javie?

text: `goto` jest nadal słowem kluczowym w Javie, chociaż nie ma żadnego zastosowania. Zostało zapisane jako słowo kluczowe na początku na wypadek, gdyby w przyszłości zapadła decyzja o dodaniu funkcjonalności `goto`. Moje pytanie brzmi: Dlaczego współczesny język programowania OO miałby w ogóle uwzględniać możliwość włączenia instrukcji `goto` do języka? Jak rozumiem "goto" jest uważane za szkodliwe, a nawet prymitywne. Nie ma zastosowania w nowoczesnym programowaniu, nigdy nie widziałem go w żadnym kodzie OO. Dlaczego twórcy Javy w ogóle rozważali dodanie `goto`s do języka?


title: Czy powinienem używać terminu „logika biznesowa” mówiąc o aplikacji niebiznesowej?

text: Załóżmy, że istnieje część programu, która nie zajmuje się inicjalizacją, wejściem, wyjściem. Określa tylko, co należy zrobić, co jest dozwolone, a co nie. Używam w tym celu terminu „logika biznesowa”. Ale aplikacja nie może mieć nic wspólnego z biznesem. Przykład: gra. Załóżmy, że są następujące części: 1. Przetwarzanie danych wejściowych 2. Wykrywanie kolizji, fizyka, kontrola gracza 3. Renderowanie danych wyjściowych 4. AI - Jak NPC osiągają określony cel. 5. "Logika biznesowa" - co się dzieje, gdy gracz dotyka określonych obiektów. Jakie typy NPC są tam i co robią, kiedy ..., koncepcje "życia", "amunicji", "poziomów", "punktacji". Ale to nie biznes, to tylko gra. Wikipedia nie jest tego jasna.


title: Co oznacza „pełnomocnik”?

text: Ciągle natykam się na słowo "proxy" używane jako czasownik w tutorialach itp. Zwykle coś będzie "proxy" dla czegoś innego. Co to znaczy? Spędziłem trochę czasu szukając w Google, co to oznacza w kontekście programowania, głównie znalazłem "serwer proxy" lub inne użycie rzeczownika. Rozumiem, że słowo proxy ogólnie oznacza „zastępować”, więc „pełnomocnik” musi oznaczać „zastępować”. Prawidłowy? Ale nadal jestem zdezorientowany, ponieważ wydaje się, że nie jest to używane w ten sposób. Przykład (z samouczka PHP ZF): "__get(), __set(), __isset() i __call(): Wszystkie te metody po prostu **proxy** do instancji wiersza przechowywanej w $_row. łatwy sposób na połączenie Zend_Db_Table_Row z naszym elementem zasobów modelu." Keith Pope, _Zend Framework 1.8 Web Application Development_, 2009. Co autor rozumie przez „proxy to” w tym kontekście?


title: Dlaczego dodanie większej ilości zasobów do spóźnionego projektu opóźnia to później?

text: To dość powszechne powiedzenie, że dodanie większej liczby programistów do późnego projektu pogorszy sytuację. Dlaczego to?


title: Gdzie należy zlokalizować pamięć podręczną w usłudze WCF?

text: Zamierzam zbudować usługę Windows Communication Foundation (WCF) przy użyciu biblioteki Microsoft Enterprise Library do buforowania. Zastanawiam się, czy powinienem umieścić pamięć podręczną w warstwie usług. Jeśli to zrobię, czy muszę używać `InstanceContextMode = Single`, aby to zadziałało? Czy są lepsze alternatywy, ponieważ wolę używać `InstanceContextMode = PerSession`. Gdzie mogę umieścić skrzynkę?


title: Zagnieżdżone jednostki w Google App Engine. Czy robię to dobrze?

text: Próbuję jak najlepiej wykorzystać koncepcję encji GAE Datastore, ale mam pewne wątpliwości. Powiedzmy, że mam model: class User(ndb.Model): email = ndb.StringProperty(indexed=True) password = ndb.StringProperty(indexed=False) first_name = ndb.StringProperty(indexed=False) last_name = ndb.StringProperty( indexed=False) created_at = ndb.DateTimeProperty(auto_now_add=True) @classmethod def key(cls, email): return ndb.Key(User, email) @classmethod def Add(cls, email, password, first_name, last_name): user = User(parent=cls.key(email), email=email, password=password, first_name=first_name, last_name=last_name) user.put() UserLogin.Record(email) class UserLogin(ndb.Model): time = ndb .DateTimeProperty(auto_now_add=True) @classmethod def Record(cls, user_email): login = UserLogin(parent=User.key(us) er_email)) login.put() I muszę śledzić czasy udanych operacji logowania. Za każdym razem, gdy użytkownik się loguje, wykonywana jest metoda `UserLogin.Record()`. Teraz pytanie – czy to dobrze? Dziękuję. * * * ### EDIT 2 Ok, użyłem wpisanych argumentów, ale potem podniosłem to: `Expected Key instance, get User(key=Key('User', 5418393301680128), created_at=datetime.datetime(2013, 6, 27, 10, 12, 25, 479928), email=u'al@mail.com', imię=u'Pierwsze', nazwisko=u'Ostatnie', hasło=u'hasło')`. To zrozumiałe, ale nie rozumiem, dlaczego dokumentacja wprowadza w błąd? Domyślnie proponują użycie: # Ustaw Employee jako Adres bezpośrednio rodzica encji... address = Address(parent=employee) Ale Model oczekuje klucza. A co gorsza, `parent=user.key()` przysięga, że `key()` nie można wywołać. I dowiedziałem się, że `user.key` działa. * * * ### EDIT 1 Po przeczytaniu przykładu z dokumentacji i próbie jego replikacji — otrzymałem błąd typu: `TypeError('Konstruktor modelu nie przyjmuje argumentów pozycyjnych.')`. To jest używany dokładny kod: user = User('al@mail.com', 'password', 'First', 'Last') user.put() stamp = UserLogin(parent=user) stamp.put() I zrozum, że Model otrzymał zły argument, ALE dlaczego jest w dokumentacji?


title: Regulacja branży oprogramowania

text: Co kilka lat ktoś proponuje zaostrzenie regulacji dla branży oprogramowania. Ten artykuł w IEEE przyciągnął ostatnio trochę uwagi na ten temat. > Gdyby inżynierowie oprogramowania, którzy piszą programy dla systemów, które narażają > społeczeństwo na ryzyko fizyczne lub finansowe, wiedzieliby, że zostaną przetestowani pod kątem ich kompetencji, > myślenie idzie, zmniejszyłoby to błędy i błędy w kodzie — i może > uratowało by kilka istnień ludzkich w okazyjnej cenie. Jestem sceptycznie nastawiony do wartości i wartości tego. Moim zdaniem wygląda to na zagarnięcie ziemi przez tych, którzy to zaproponowali. Cytat, który jest dla mnie kluczowy, to: > Egzamin sprawdzi podstawową wiedzę, a nie opanowanie przedmiotu, ponieważ duże porażki (np. THERAC-25) wydają się być złożonymi, subtelnymi zagadnieniami, do których „wiedza podstawowa” nigdy nie wystarczyłaby zapobiegać. Ignorowanie wszelkich lokalnych problemów (takich jak istniejące zabezpieczenia tytułu Inżyniera w niektórych jurysdykcjach): Cele są szlachetne – unikaj znachorów/szarlatanów1 i uczyń to rozróżnienie bardziej oczywistym dla tych, którzy kupują ich oprogramowanie. _Czy bardziej restrykcyjne regulacje w branży oprogramowania mogą kiedykolwiek osiągnąć swój pierwotny cel?_ 1 Dokładnie tak, jak miało to na celu uregulowanie zawodów medycznych.


title: O co chodzi z językami programowania jako ścisłymi wymaganiami zawodowymi?

text: Niedawno byłem na „targach pracy” i byłem zaskoczony, jak duży nacisk w miejscu pracy kładzie się na języki programowania, które znają kandydaci. Z mojego (co prawda ograniczonego) doświadczenia wynika, że prawdziwe opanowanie języka programowania może zająć lata, ale nauka go na rozsądnym poziomie jest dość prostą sprawą dla kogoś, kto ma już doświadczenie z innymi językami i zdecydowanie może zmieścić się w ramach czasowych, które zwykle wyznaczają pracodawcy początkowy rozwój. Myślę, że pracodawcy bardziej zależy na tym, ile języków/paradygmatów znam lub jakie mam doświadczenie w projektowaniu algorytmów/oprogramowania, w przeciwieństwie do konkretnej technologii, w której aktualnie się znam. Powiedzmy, że znam już Javę, C++, Smalltalk i Prolog... czy miejsce pracy, które opiera się na Objective-C, powinno uważać mnie za niewykwalifikowanego, ponieważ brakuje mi doświadczenia w tym języku? Czy jest to wada w metodologiach rekrutacji, a jeśli tak, to co mogę zrobić, aby przekonać to miejsce pracy, że mój brak doświadczenia z Objective-C nie powinien mieć znaczenia? Pytam hipotetycznie, a nie konkretnie o wymienione języki programowania. Ewentualnie moje doświadczenie jest ograniczone i przyznaję, że czegoś mi brakuje. Czy wcześniejsze doświadczenia z językiem programowania są ważniejsze niż to, o czym myślę? Czy to ma znaczenie, czy jest to stanowisko juniora czy seniora? _Czy_ powinno to mieć znaczenie?


title: Współdziałanie z deweloperem, który nieustannie ignoruje skrajne przypadki w swojej pracy

text: Mam ciekawy, chyba dość powszechny problem z jednym z programistów w moim zespole. Facet jest świetnym programistą, pracuje szybko i produktywnie, tworzy kod całkiem dobrej jakości iw ogóle. Dobry inżynier. Ale jest z nim problem – bardzo często nie uwzględnia w swoim kodzie przypadków skrajnych. Rozmawialiśmy z nim o tym wiele razy i próbuje, ale myślę, że po prostu nie myśli w ten sposób. Tak więc kończy się to, że kontrola jakości znalazłaby wiele problemów z jego kodem i zwracała go z powrotem do rozwoju raz za razem, co ostatecznie doprowadziło do niedotrzymania terminów i niezadowolenia wszystkich członków zespołu. Nie wiem, co z nim zrobić i jak pomóc mu przezwyciężyć ten problem. Może ktoś z większym doświadczeniem mógłby doradzić? Dziękuję Ci!


title: Czy istnieje standard branżowy dla uprawnień zarejestrowanych użytkowników systemów w zakresie modelu bazy danych?

text: Opracowałem wiele aplikacji z zarejestrowanym dostępem użytkowników dla moich klientów korporacyjnych. Przez wiele lat zmieniłem sposób, w jaki to robię, tym bardziej, że z biegiem czasu używałem wielu języków programowania i typów baz danych. Niektóre z nich nie są zbyt proste, jak uprawnienia `wyświetlania`, `tworzenia` i/lub `edycji` dla każdego modułu w aplikacji, lub są oznaczone jako `dostęp` lub `nie mam dostępu` do niektórych modułów. Ale teraz, kiedy rozwijam bardzo rozbudowaną aplikację z wieloma modułami i wieloma rodzajami użytkowników, aby uzyskać do nich dostęp, zastanawiałem się, czy istnieje standardowy model do robienia tego, ponieważ już widzę, że to proste lub lekkie nie będzie wystarczająco.


title: Mocks and Stubs - Klasy i metody?

text: Staram się uzyskać wysoki poziom zrozumienia kpin i zaćmienia. Moje języki/frameworki to ruby, rails, rspec, jasmine Słyszałem bardzo wysokopoziomową definicję: * Mocki są używane do reprezentowania samych obiektów * Odcinki są używane do metod instancji obiektów i zwracają wartość, którą słyszałem od innych, nie wcale. Ale nie słyszałem ich prostej, wysokopoziomowej definicji, która utknęła. Większość definicji jest bardzo rozwlekła z dużą ilością szczegółów niższego poziomu. Nie jestem pewien, czy istnieje jasne uzasadnienie, kiedy użyć którego. Oczywiście użyj skrótu, jeśli nie chcesz wywoływać rzeczywistej metody instancji (lub jeszcze nie istnieje), ale kiedy ma sens użycie makiety?


title: Jakie są zasady łączenia ViewModel i View we wzorcu MVVM?

text: Zatem biorąc pod uwagę _Separation of Concerns_ , jak połączone powinny być View i ViewModel? Na przykład chcę, aby widoczność kontrolki w widoku była powiązana z danymi (powiązany z danymi?) z flagą w ViewModel. Moim pierwszym przeczuciem byłoby użycie wartości logicznej „IsControlVisible”, która zwraca wartość true/false. Jednak w widoku widoczność jest ustawiana przez Enum. Mam więc wybór: zmień właściwość na Enum lub użyj konwertera, aby przekonwertować wartość logiczną na Enum widoczności. **Jakie jest właściwe podejście, gdy próbujesz podążać za idiomatycznym MVVM?**


title: Jak dojrzały jest FreeBASIC?

text: Mój przyjaciel rozważa użycie FreeBASICa w krytycznym środowisku produkcyjnym. Obecnie używają GWBasic i chcą łagodnie przejść do bardziej nowoczesnych języków. Martwię się tylko, że w oprogramowaniu mogą być niewykryte błędy. Widzę, że ich numer wersji to 0.22.0, co wskazuje, że nie jest jeszcze do końca dojrzała. Przeczytałem również tę dyskusję, nie będąc w stanie zakończyć. Również na ich stronach Sourceforge nie ma informacji, czy jest to Alpha, czy Beta (co i tak nie jest zbyt dobrym wskaźnikiem). Czy ktoś ma własne doświadczenie na temat dojrzałości, pomysły, jak ocenić dojrzałość lub wie o firmach używających FreeBASICa w krytycznym środowisku produkcyjnym?


title: Dlaczego „język głównego nurtu” jest tak przeciwny „zbudowanemu na małym rdzeniu cech ortogonalnych”?

text: Na stronie "hammerprinciple.com" znajdują się języki programowania, wypowiedzi na ich temat oraz głosowanie, które wiąże języki z wypowiedziami. W szczególności istnieją stwierdzenia: * „Ten język jest zbudowany na małym rdzeniu cech ortogonalnych” * „To jest język głównego nurtu” Dlaczego są sobie tak przeciwni? Czy bycie niespójnym, obciążonym historią, obciążonym dodatkowymi przypadkami jest koniecznością, aby być popularnym, "głównym nurtem" języka programowania? Może jest to podobny powód, dla którego piękne i spójne sztuczne języki naturalne (jak esperanto) nie są tak popularne?


title: W jakim języku mogę śledzić liczenie referencji w najprostszy i najbezpieczniejszy sposób? (Albo śledzić istniejące liczenie referencji?)

text: Chcę policzyć referencje obiektów, tak jak w przypadku (niektórych) wyrzucania śmieci, ale wszystko, co chcę zrobić, to przekształcić to w zestaw danych wykresu, który mogę następnie analizować lub wizualizować. Jaki język, nawet niszowy, najprościej na to pozwoli? Edycja: Myślałem, że to pytanie jest bardzo jasne, ale najwyraźniej muszę podać przykład: var x = [] var y = x var z = 1 x.extend(z) krawędzie wynikowe: x -> [1] y - > xz -> 1


title: Czy naprawdę powinieneś oddzielać js, html i css?

text: Cały czas słyszę/czytam, że czystsze jest oddzielanie _js_ , _html_ i _css_. Podobno ułatwia to utrzymanie, debugowanie. Podobno jest bardziej wydajny, ponieważ pozwala na cachowanie/minifikację plików _css_ i _js_. Jeśli o mnie chodzi, używając frameworków internetowych (Django, Rails, ...), bibliotek szablonów javascript, ... Mam tendencję do dzielenia dość dużo pojedynczej strony html na wiele szablonów wielokrotnego użytku - niektóre widżety, jeśli chcesz . Na przykład mogę mieć widget _news feed_, widget _select multiple_ itp. ... każdy z nich ma spójny układ na różnych stronach i każdy jest kontrolowany przez swój fragment kodu javascript. Przy tej organizacji - która wydaje mi się tak czysta, jak to tylko możliwe, maksymalizująca możliwość ponownego wykorzystania - mam problem ze zrozumieniem, dlaczego prościej byłoby przechowywać wszystkie _js_ i _css_ w osobnych plikach. Myślę, że byłoby to o wiele prostsze _na przykład_ : w pliku _select multiple_ widget * html * podstawowy układ css * kontrola bezpośrednich interakcji i ulepszenia UX z odrobiną JS. Myślę, że w ten sposób jest bardziej wielokrotnego użytku, o wiele łatwiejszy w utrzymaniu, ponieważ nie musisz przewijać grubego pliku _js_, potem przełączać się i przewijać grubego pliku _css_, przełączać się ponownie do swojego pliku _html_ ... tam i z powrotem . Więc chciałbym wiedzieć, jak organizujecie swój kod, jeśli trzymacie się separacji, która jest zwykle zalecana. * Czy są naprawdę dobre powody, aby to zrobić? * czy nie jest tak, że przewodniki w sieci zwykle zakładają, że nie będziesz używać żadnego wymyślnego narzędzia (w takim przypadku chciałbym uzyskać bardziej aktualne odczyty online dotyczące najlepszych praktyk)? * Czy to tylko kwestia preferencji?


title: Pamięć transakcyjna a mutex i blokady

text: Właśnie dowiedziałem się, że procesory Intela obsługują teraz pamięć transakcyjną !!!! Dowiedziałem się o operacjach transakcyjnych w mojej klasie dB/OS, jest to bardzo prosta koncepcja: cała operacja jest wykonywana lub nic nie jest wykonywane. Jak wygląda programowanie w ramach nowej pamięci transakcyjnej. model różni się od modelu wielowątkowego, który używa blokad i muteksów ? Czy to oznacza, że pozbędziemy się blokad i muteksów?


title: Standardy i zasady programowania, aby stać się lepszym programistą

text: Jestem programistą C#. Zawsze byłem zainteresowany podnoszeniem swoich umiejętności i wiedzy oraz próbowaniem poznawania nowych technologii. Jednak teraz chcę poszerzyć swoją wiedzę w zakresie standardów i zasad programowania. Na przykład chcę wiedzieć, jak ustrukturyzować kod, kod refaktoryzacji, standardy kodowania i dobre praktyki itp. Czy ktoś ma jakieś zalecenia dotyczące jakichkolwiek książek lub linków do stron internetowych?