title: Kto może nauczyć się programować?

text: Zawsze waham się, kiedy rozmawiam z profesorami o próbie zwiększenia odsetka osób, które kończą studia z dyplomem typu CS, w porównaniu z liczbą, która zaczyna myśleć, że tego chcą. Z jednej strony naprawdę uważam, że zaangażowanie profesjonalistów i przekazywanie informacji zwrotnych jest ważne, z drugiej strony byłoby lepiej, gdyby mniej uczniów z niższymi klasami kończyło studia CS. Nie sądzę, że każdy umysł jest stworzony dla tej dziedziny i musisz być dobrym uczniem przez całe życie. Musisz mieć wysoki poziom cierpliwości i umiejętności rozwiązywania problemów, aby tylko szukać. Jeśli masz „właściwy” rodzaj mózgu, te trudne problemy są tym, co skłania Cię do kontynuacji. Jeśli masz długą listę łatwych problemów, nudzisz się, więc ci ludzie nie są dobrzy w bardziej powtarzalnych pracach. Nie muszę wchodzić w szczegóły... jeśli to czytasz, prawdopodobnie wiesz, do czego zmierzam. Więc pytanie brzmi: Jak znaleźć równowagę między programem studiów, który jest dostępny dla wystarczającej liczby osób, aby otrzymać finansowanie i być uznanym za odnoszący sukces, ale jednocześnie nie trafia do ludzi, którzy tak naprawdę nie są przygotowani do pracy? Może lepszym pytaniem jest: jakiego wskaźnika używasz, aby wiedzieć, czy zmiany, które wprowadzasz w programie studiów, czynią go lepszym? Nie wiem, czy wyższy wskaźnik ukończenia szkoły to dobry wskaźnik. I wydaje się, że informacje zwrotne, które można by uchwycić wiele lat później na temat stanowisk, które mają absolwenci, byłyby zbyt opóźnione. Od dawna zmagam się z tym pytaniem, głównie dlatego, że chyba nie ma odpowiedzi. Ale pomyślałem, że zapytam, czy ktoś wie o jakichkolwiek badaniach, które faktycznie zostały na nim przeprowadzone. Dodatek: Niedawno miałem bardzo mądrego profesora, który przypomniał mi, że nie każdy, kto kończy studia z dyplomem CS, chce być nawet pełnoetatowym programistą, kiedy już odkryje, co to znaczy. Ale z wykształceniem, które otrzymali, mogliby być świetnymi Project Managerami, Managerami, administratorami systemu itp. Myślę, że to była bardzo dobra kwestia, o której nie pomyślałem tutaj. Jest bardzo wysoki odsetek ludzi, którzy nie pracują w dziedzinie, w której się kształcili, CS nie jest wyjątkiem. Posiadanie dodatkowych ludzi pomaga nie tylko w budżecie na studia, ale także w zwiększeniu odsetka nie-programistów, którzy wciąż wiedzą o nim wystarczająco dużo, aby pracować z programistami.


title: Visual C++, obiekt CMap zapisz w kolumnie blob

text: Mam obiekt MFC CMap, każdy obiekt przechowuje 160K~ wpisów długich danych. Muszę go przechowywać w Oracle SQL. Zdecydowaliśmy się zapisać to jako kropelkę. Ponieważ nie chcemy tworzyć dodatkowej tabeli, pomyśleliśmy również o zapisaniu jej jako pliku lokalnego, z kolumną SQL wskazującą na ten plik. Wolelibyśmy po prostu trzymać go jako bloba na serwerze i czyścić stół co kilka tygodni. Tabela ma sekwencyjny klucz jako identyfikator i 2 kolumny czasu. Muszę dodać kolumnę blob, aby przechowywać w każdym wierszu tego CMap. Czy możesz polecić przewodnik, jak zrobić to podejście (odczyt/zapis Map do bloba lub może do kloba)? Dziękuję.


title: Jak zapobiec zduplikowanym metodom dostępu do danych, które pobierają podobne dane?

text: W prawie każdym projekcie, nad którym pracuję z zespołem, pojawia się ten sam problem. Ktoś pisze kod interfejsu użytkownika, który potrzebuje danych i pisze metodę dostępu do danych: AssetDto GetAssetById(int assetId) Tydzień później ktoś inny pracuje nad inną częścią aplikacji i również potrzebuje `AssetDto`, ale teraz zawiera 'approvers' i zapisuje co następuje: AssetDto GetAssetWithApproversById(int assetId) Miesiąc później ktoś potrzebuje zasobu, ale teraz zawiera 'pytania' (lub 'właściciele' lub 'uruchomione' żądania', itp.): AssetDto GetAssetWithQuestionsById(int assetId) AssetDto GetAssetWithOwnersById(int assetId) AssetDto GetAssetWithRunningRequestsById(int assetId) A jest jeszcze gorzej, gdy metody takie jak `GetAssetWithOwner.Id`Ques zaczynają się Widzisz wzór, który się wyłania: obiekt jest dołączony do dużego grafu obiektu i potrzebujesz różnych części tego grafu w różnych lokalizacjach. Oczywiście chciałbym zapobiec dużej liczbie metod, które robią prawie to samo. Czy jest to po prostu kwestia dyscypliny zespołowej, czy może istnieje jakiś wzór, którego mogę użyć, aby temu zapobiec? W niektórych przypadkach sensowne może być posiadanie oddzielnych metod, np. pobieranie zasobu z uruchomionymi żądaniami może być kosztowne, więc nie chcę ich włączać cały czas. Jak radzić sobie z takimi sprawami?


title: Jaki byłby najlepszy sposób obsługi błędów w programach równoległych?

text: Przy równoległych algorytmach pukających do drzwi, może to być dobry moment, aby pomyśleć o obsłudze błędów. Więc na początku były kody błędów. Te były do bani. Można było je zignorować, więc można było zawieść późno i stworzyć trudny do debugowania kod. Potem pojawiły się wyjątki. Stało się to niemożliwe do zignorowania, gdy się pojawią, a większość ludzi (z wyjątkiem Joela) lubi je bardziej. A teraz mamy biblioteki, które pomagają w kodzie równoległym. Problem polega na tym, że nie możesz obsługiwać wyjątków w kodzie równoległym tak łatwo, jak w przypadku kodu nierównoległego. Jeśli asynchronicznie uruchomisz zadanie i zgłosi on wyjątek, nie ma śladu stosu, który mógłby zostać rozwinięty; najlepsze co możesz zrobić, to przechwycić go i zarejestrować w obiekcie zadania, jeśli taki obiekt istnieje. Pokonuje to jednak podstawową siłę wyjątków: musisz je sprawdzić i _możesz je zignorować bez dodatkowego wysiłku_ , podczas gdy w kodzie jednowątkowym wyjątek z konieczności wywoła odpowiednie działania (nawet jeśli oznacza to zakończenie programu). W jaki sposób implementacje języka lub biblioteki powinny obsługiwać błędy w kodzie równoległym?


title: W PHP, jakie są różne wzorce projektowe do implementacji kontrolerów OO w przeciwieństwie do kontrolerów proceduralnych?

text: Na przykład bardzo proste jest, aby kontroler index.php był skryptem proceduralnym, takim jak: <?php //dołącz klasy i funkcje //pobierz trochę danych z bazy danych //i/lub przetwórz przesyłanie formularza //renderuj HTML używając twojego systemu szablonów ?> Następnie mogę po prostu przejść do http://example.com/index.php i powyższy skrypt proceduralny zasadniczo działa jako prosty kontroler. Tutaj mechanizm kontrolera jest podstawowym skryptem proceduralnym. Jak więc tworzyć klasy kontrolerów zamiast skryptów proceduralnych? Czy klasa kontrolera musi być zawsze powiązana z mechanizmem routingu?


title: Jakie kodowanie jest używane przez javax.xml.transform.Transformer?

text: Czy możesz odpowiedzieć na kilka pytań w oparciu o poniższy kod (z wyłączeniem bloków try/catch), który przekształca wejściowe pliki XML i XSL w wyjściowy plik XSL-FO: File xslFile = new File("inXslFile.xsl"); Plik xmlFile = new File("sourceXmlFile.xml"); Fabryka Transformatorów tFactory = Fabryka Transformatorów.nowaInstancja(); Transformator transformator = tFactory.newTransformer(new StreamSource(xslFile)); FileOutputStream fos = new FileOutputStream(new File("outFoFile.fo"); transformer.transform(new StreamSource(xmlFile), new StreamResult(fos)); inXslFile jest zakodowany przy użyciu UTF-8 - jednak w pliku nie ma tagów, które określają Ten plik sourceXmlFile jest zakodowany w formacie UTF-8 i na początku pliku może znajdować się metatag wskazujący na to. Obecnie używam Javy 6 z zamiarem aktualizacji w przyszłości. 1. Jakie kodowanie jest używane podczas odczytu pliku xsl? 2. Jakie jest kodowanie używane podczas czytania pliku xml?3.Jakie kodowanie zostanie zastosowane do pliku wyjściowego FO?4.Jak mogę uzyskać informacje (właściwości) dla 1 - 3?Czy istnieje wywołanie metody?5.Jak można zmienić właściwości w 4 - za pomocą konfiguracji i dynamicznie 6. jeśli znane - Gdzie są informacje (strona internetowa) na ten temat, które mogę przeczytać - Szukałem bez większego sukcesu.


title: Różnica między wolnym a otwartym oprogramowaniem?

text: > **Możliwy duplikat:** > Open Source, ale nie Wolne Oprogramowanie (lub vice versa) Niedawno rozmawiałem, w którym głównym mówcą był Stallman, który stwierdził, że nienawidzi terminu otwarte oprogramowanie, ponieważ ma na celu zmylić ludzi. Teraz czytam dalej, aby zrozumieć jego stanowisko, ale nie jestem w stanie nakreślić granicy, w której wolne oprogramowanie staje się oprogramowaniem typu open source i jakie licencje mogą być brane pod uwagę w każdej grupie. Na przykład wiem, że GPL, LGPL to licencje wolnego oprogramowania, ale są to również licencje open source. Czy istnieje czysta licencja open source? jak licencja MIT? czy to wszystkie odcienie szarości. Czy można narysować linię? Dziękuję!


title: „Zalecana” długość pliku i szerokość linii

text: Byłem ciekaw, czy ktoś znał rekomendację z renomowanego źródła dotyczącą maksymalnej liczby linii kodu dla danego pliku. Na przykład Closure Linter firmy Google zaleca, aby każda linia nie przekraczała 80 znaków.


title: Dlaczego czarna skrzynka nazywana jest testowaniem funkcjonalnym, skoro testuje również niefunkcjonalność?

text: Od jakiegoś czasu mi to przeszkadza. Testy bezpieczeństwa, wydajności itp. są wykonywane zazwyczaj przy użyciu podejścia czarnej skrzynki. Ale są one niefunkcjonalne, podczas gdy czarna skrzynka nazywana jest testowaniem funkcjonalnym. Czy to dlatego, że ocenia funkcję i jest to tylko nazewnictwo, czy jest niespójność? Referencje: Software Engineering by Salleh Software Engineering and Testing by Gupta, Tayal Software Engineering by A.A.Puntambekar Software Testing: a Practical Approach by Sandeep Desai,Abhishek Srivastava mówiąc "Nigdy wcześniej tego nie widziałem".


title: Jak ważna jest dla programisty umiejętność optymalizacji kodu, rozwiązywania skomplikowanych zagadek, szybkiego odpowiadania na pytania techniczne?

text: Więc jestem w trakcie szukania pracy. A ja miałem mnóstwo testów i niedawno ktoś przysłał mi puzzle. To problem bez pęknięć ścian i nie mam pojęcia, jak się do tego zabrać. Mógłbym oszukać i wygooglować odpowiedź, ale jestem uczciwym facetem i zajęło mi to 2 dni i nadal nie ma rozwiązania. Kluczową kwestią jest również wydajność. Czy powinienem poświęcić trochę czasu na opanowanie rozwiązywania zagadek programistycznych? A może powinienem najpierw skupić się na nauce języka, a dopiero potem opanować techniki optymalizacji? Mam problem z wyborem najlepszego podejścia. Właśnie dzisiaj dowiedziałem się z poprzedniej rozmowy, że wybrali kogoś innego zamiast mnie, ponieważ ten kandydat wydawał się bardziej kompetentny niż ja, ponieważ podczas rozmowy technicznej ten kandydat był nieco bardziej zgryźliwy w swoich odpowiedziach. Znałem wszystkie odpowiedzi, ale nie byłem z nimi wystarczająco szybki. Czy to ma znaczenie dla wszystkich ankieterów? Czy powinienem zainwestować czas w opanowanie podstawowych pojęć w javie, aby mieć równie szybkie przywoływanie? (Aby rzucić nieco światła na moje pochodzenie: jestem świeżo upieczonym absolwentem z nieco ponad rocznym doświadczeniem w programowaniu Java. Mam tylko licencjat. Wiem, że to nieistotne, ale mam też 23 lata.)


title: Dekorowanie klasy, która wywołuje własne metody publiczne

text: Napisałem system, który oblicza rabaty dla koszyka na podstawie zestawu reguł. Każda reguła jest zaimplementowana za pomocą następującego interfejsu (C#): interface IRule { bool IsActive(); bool IsApplicableTo (koszyk IZakupy); dziesiętny CalculateDiscount (koszyk IZakupy); } Konkretna implementacja może wyglądać mniej więcej tak: class Rule : IRule { bool IsActive() { return true; } bool IsApplicableTo(IShoppingCart koszyk) { if (!IsActive()) return false; zwróć TestIfApplicable(koszyk); } dziesiętny CalculateDiscount(IShoppingCart koszyk) { if (!IsApplicableTo(cart)) return 0m; return CalculateStuff(koszyk); } } Teraz próbuję wprowadzić logowanie do systemu. Aby utrzymać porządek, nie chcę wpychać tego w zajęcia z regułami. Pomyślałem więc, że zrobię Dekorator dla IRule, który obsługuje rejestrowanie: class LoggingRule : IRule { IRule decorativeRule; bool IsActive() { LogImportantThings(); return decorRule.IsActive(); }              //I tak dalej. } Problem, z którym się tutaj spotykam, polega na tym, że klasa Rule faktycznie wywołuje metody IsActive i IsApplicableTo. Kiedy tak się dzieje, dekorator jest po prostu pomijany i nic nie jest rejestrowane. Przypuszczam, że mógłbym uczynić LoggingRule podklasą Rule. Oznaczałoby to, że musiałbym stworzyć wariant LoggingRule dla każdej implementacji IRule. To może potencjalnie spowodować wiele powielania. Mógłbym również umieścić logowanie w klasie bazowej i użyć wzorca obiektu Null, gdy nie chcę niczego rejestrować. Ale znowu, 99 na 100 razy nie chcę niczego rejestrować. A kiedy te metody są wywoływane wiele razy, czy jest to warte potencjalnego narzutu? Żadne rozwiązanie nie wydaje się więc szczególnie eleganckie, a ja nie mogę znaleźć lepszej alternatywy... Jakieś sugestie?


title: Jak pokazać atrybuty, które pojawiają się w skojarzeniu „wiele do wielu”?

text: Jak wiemy, skojarzenia wiele do wielu są oznaczone dwiema gwiazdkami na obu końcach skojarzeń. Teraz mam skojarzenie między dwiema jednostkami „Dobra” i „Faktura”, więc Towar i Faktura mają skojarzenie wiele do wielu, ale chcę pokazać „liczbę każdego towaru” na każdej fakturze na diagramie klas. Jak mogę to pokazać?


title: Jak zapobiec ponownemu sprawdzaniu już sprawdzonych danych?

text: Mam klasę z metodą `validId($id)`, która jest wywoływana przez konstruktor i `load funkcji publicznej($id)`. Metoda wysyła zapytanie do bazy danych, aby sprawdzić, czy identyfikator istnieje i zwraca prawdę/fałsz. Konstruktor opcjonalnie przyjmuje `$id` (jeśli nie ma $id, obiekt będzie pusty). Konstruktor sprawdza $id za pomocą `validId($id)`, a jeśli przejdzie, wywołuje `load($id)`. Nie powinienem brać `validId()` z `load()`, ponieważ `load()` jest publiczne, a dane wejściowe muszą być sprawdzone! To samo dotyczy konstruktora. Jak uniknąć dwukrotnego wywołania `validId()`? Myślałem, że mógłbym dodać parametr do `load($id,$check_id)`, ale to byłoby śmieszne. Nie możesz dać klientom opcji, aby nie weryfikować danych! Mógłbym dodać chronioną właściwość, taką jak `$id_is_valid`, która zostaje ustawiona na true przez `validId($id)`. Ale skąd mam wiedzieć, że wartość, która była prawidłowa, jest tą samą, którą otrzymała moja metoda `load()`? Używam PHP. Mam nadzieję, że to nie jest głupie pytanie.


title: Jak najlepiej wykorzystać szansę spotkania jeden na jednego z guru programowania?

text: Nie jestem więc programistą, chociaż piszę kod przez całe życie. Jak mam w zwyczaju, staram się kontaktować ze znanymi ekspertami z niemal każdej interesującej mnie dziedziny i co ciekawe, spotykam się z wieloma spotkaniami, które bardzo sobie cenię. A więc oto umowa - umówione zostało dla mnie spotkanie z bardzo znanym programistą i chciałbym zasięgnąć porady, jak to najlepiej wykorzystać. Napisali wiele książek, niektóre z nich przeczytałem, ale nic nie uderza mnie jako punkt nawrócenia; co oznacza, że wiedzą, że nie jestem prawdziwym programistą, chociaż bardzo interesuje mnie rozmowa z nimi o ich radach dotyczących zostania programistą. Czy powinienem spróbować mieć potencjalny temat kodowania, zestaw kodu do przejrzenia itp. - czy po prostu pojawić się i uzyskać ogólne porady?


title: Jak należy czysto ograniczać typy i wartości właściwości obiektów w Pythonie?

text: Uczę się Pythona od niedawna. Ale prawie na początku natknąłem się na proste pytanie: jak ustawić ograniczenie (ograniczenie) na wartość obiektu lub właściwości obiektu bez robienia trudnego opisu klasy. Nie ma problemu z nieścisłą typizacją Pythona. Poszukuję metod kontroli nie tylko typów zmiennych, ale także diapazonów wartości zmiennych. Na przykład stwórzmy klasyczną klasę edukacyjną - "Koło". Okrąg - obiekt powinien mieć trzy właściwości: dwie współrzędne początkowe (niektóre x, y) i promień, w tym (w naszym ludzkim widzialnym świecie) x i y powinny być rzeczywiste, a promień powinien być rzeczywiście dodatnią liczbą. Jakoś rozwiązałem to zadanie, odpowiadająca metoda klasy "Circle" poniżej: def __setattr__(self,name,value): def setting_atr(name,value): if isinstance(value,(float,int)): if name==' promień' i wartość<0: podnieś ValueError("Atrybut 'promień' nie powinien być ujemny") self.__dict__[nazwa]=wartość else: podnieś TypeError("Atrybut powinien być liczbowy") if len(self.__dict__)<3 : #liczba atrybutu obiektu return setting_atr(nazwa,wartość) elif name not in self.__dict__: raise AttributeError("Obiekt 'Okrąg' nie ma takiego atrybutu") else: return setting_atr(nazwa,wartość) Niemniej jednak jestem całkowicie niezadowolony ze sposobu Zrobiłem to. Kod jest ogromny jak na tak małą koncepcję i prawie nie nadaje się do ponownego użycia (wiem o deskryptorach - da prawie taki sam wynik). Wolałbym jakiś styl deklaratywny. Kiedy zaczynałem szukać alternatywy, moją pierwszą myślą było dodanie własnego operatora. Ale po ciężkim googlowaniu zdałem sobie sprawę, że nie da się tego zrobić w samym pythonie (jeśli nadal się mylę - proszę mnie złagodzić). Taki jak ja tylko nowicjusz, a wejście do zespołu programistów pythona lub fork python ( :)) nie jest dla mnie sposobem, zrezygnowałem z tych myśli. Inną możliwą ścieżką w stile deklaratywnym jest zapisanie czegoś takiego: radial=radius if isinstance(radius,(float,int)) else raise TypeError("Atrybut powinien być liczbowy") radius=radius if radius>=0 else podnieś ValueError(" Atrybut „promień” nie powinien być ujemny”) oczywiście to nie działa, ponieważ nie mamy przy tym możliwości użycia „podbicia”. Powinienem być w stanie nazwać obiekt błędów jako funkcją, aby urzeczywistnić go. Najprostszy sposób, aby to zrobić, napisał funkcję zgłaszającą błąd w następujący sposób: def SomeError(exception=Exception, message="Coś nie jest dobrze"): if isinstance(exception.args,tuple): podnieś wyjątek else: podnieś wyjątek (komunikat) Pozwala więc na napisanie: radius=promień jeśli promień>=0 else SomeError(ValueError("Atrybut 'promień' nie powinien być ujemny")) Myślałem też o następującym formularzu: @dfValueError(['isinstance(radius, (float,int))'],"Atrybut powinien być liczbowy") @dfTypeError(['promień>=0'],"Atrybut 'promień' nie powinien być ujemny") def fun_radius(x) return x Mały problem z to podejście jest w bardziej złożonym i mniej czytelnym informacyjnie drukowaniu błędów. Na początku komunikat o błędzie prowadził do fałszywej funkcji zgłaszania błędu, czyli miejsca, w którym „ups” faktycznie wystąpiło tylko w drugiej linii. Moim celem jest umożliwienie podniesienia wyjątków od funkcji lambda i linii kodu, jak pokazano powyżej, aby kod był bardziej czytelny. W tym celu powinienem stworzyć własną klasę wyjątków z zaimplementowaną metodą call. Problem: dziedziczona klasa nie widziała się we własnej spase nazw, więc metoda __call__(self): raise self #tak ha-ha daje wynik: TypeError: __call__() brak 1 wymaganego argumentu pozycyjnego: 'self' Więc moje pytanie jest proste: czy można wywołać obiekt błędu? Jeśli tak, to co powinienem przeczytać, żeby to zrobić. A także, gdyby ktoś rozwiązał ten mały problem, byłbym szczęśliwy. PS Wiem, że próbki (o deklaracji zmiennej promienia) pokazane powyżej nie mogą być zaimplementowane w tej klasie "koła" w takiej postaci, w jakiej jest. Podaję to tylko jako przykład, aby pokazać ścieżkę moich myśli. Proszę, nie czepiaj się tego. **Posłowie (przez Marata)** Bardzo dziękuję, kto napisał i głosował w tym temacie. Po przeczytanych odpowiedziach bardzo długo się zastanawiałem, aż w końcu podniosłem się, aby dodać jakiś dodatek do tego tematu (nawet jeśli wiąże się to z pewnym ryzykiem naruszenia zasad). Po pierwsze. Niektórzy pisali, że nie musimy przejmować się błędami w stanie tworzenia obiektu, a nawet nie musimy w ogóle kontrolować typów zmiennych (ponieważ nie jest to domyślnie zaimplementowane w pythonie). Chociaż programowaniem obiektowym zajmowałem się od niedawna, wcześniej zajmowałem się (i nadal) obliczeniami procesów i urządzeń technicznych. Dlatego jestem bardzo pewny tych słów: "Ewentualny błąd powinien zostać jak najszybciej zlokalizowany (nie powiedziałem poprawiony)". Wiele algorytmów do obliczania rzeczywistych procesów fizycznych wykorzystuje iteracje i rekurencje, więc jeśli wyślizgniesz się (do późniejszej obsługi) jakiś błąd, może to spowodować trudny do wykrycia błąd w końcowym wyniku. Z tego punktu widzenia istnieje pyton. Python's "Duck Typing" doskonale nadaje się do szybkiego tworzenia prototypów i upraszczania programowania stosowanego. Ale „Pisanie kaczki” nie jest wymogiem religijnym. Niemniej jednak nieścisła typizacja Pythona nie jest dziwną rzeczą, aby dodać kontrolę typu, jeśli uważasz, że tego potrzebujesz. Ale styl, który Python narzuca, aby go wykonać, różni się od stylu w językach statycznych typizacji, takich jak C++, Java itp. W Pythonie możemy kontrolować obiekt tylko w niektórych "punktach kontrolnych". To prowadzi nas do zasad „Programowania zorientowanego na system” (Therm jest moja, ale nie sprawdzałem, czy istnieje w prasie, więc może mieć inne znaczenie niż to samo innych autorów, a to, co mam na myśli, może mieć też inną nazwę ). Powinniśmy (jeśli będzie) ustawić "punkty kontrolne" na wlocie i wylocie elementów ( **głównego** ) układu. Co dotyczy elementów systemu? Powinien to być dowolny obiekt, który ma własną przestrzeń nazw i może współdziałać z otoczeniem jako funkcją (również metodami). Najprostszą wersją sterowania wlotem dla elementu funkcji jest: def func(a,b,c): #tak jak to a=int(a) b=str(b) c=list(c) Więcej złożoności i ciekawe podejście pokazane tutaj : Dekorator sprawdzający typ dla Pythona 2 Osobno, o metodzie sugerowanej przez mojego współautora. Dekorator "Właściwości" używa tych samych metod co deskryptor, więc emuluje atrybuty **obiektu** za pomocą metod **klasy**. Ten tryb powinien być używany ostrożnie, ponieważ w pythonie obiekty tej samej klasy są współdzielone z przestrzenią nazw klas. Pozwoliłem sobie przepisać ten sam program, który napisał @Izkata z `__setattr__` (ponownie): filter_function_for_radius=lambda value: value if value>0 else SomeError(ValueError, 'Promień nie może być ujemny') class Circle(object): def __init__(self, x=0, y=0, promień=1): self.x = x self.y = y self.radius =promień def __setattr__(self,nazwa,wartość): if name=='promień': value=funkcja_filtra_for_radius(wartość) self.__dict__[name]=value ... a jeśli potrzebujesz innego (może złożonego lub ujemnego) promienia dla jakiegoś hipotetycznego okręgu, nie musisz dziedziczyć ani redefiniować klasy, po prostu "zmień filtr ”. Ale tę zaletę stylu funkcji można uzyskać tylko za pomocą `__setattr__` lub tworząc własną metaklasę. I jeszcze raz dziękuję za odpowiedź.


title: Czy przy opracowywaniu algorytmów pomijanie fazy pióra i papieru to zły nawyk?

text: Słyszałem, jak wiele osób mówiło, że przy opracowywaniu algorytmów należy najpierw używać długopisu i kartki, schematów blokowych i tak dalej, aby móc skupić się na samym algorytmie, nie martwiąc się o implementację wspomnianego algorytmu (tzn. załatwić jeden problem na raz czas). Jednak przez większość czasu łatwiej jest mi opracować swój algorytm w locie. To znaczy, zastanawiam się trochę nad problemem, dopóki nie poznam ogólnego kierunku, w którym należy podążać, a następnie zaczynam pisać kod i wprowadzać zmiany, aż algorytm pojawi się i zadziała. Czy to zły nawyk, który powinienem spróbować zmienić?


title: Jak przejść z programisty stron internetowych na programistę osadzonego?

text: Od około 5 lat zajmuję się tworzeniem stron internetowych oraz backendem w języku Java. Moja pasja zawsze była jednak bliższa metalowi. Aplikowanie na stanowiska osadzone nie zakończyło się sukcesem i sądzę, że dzieje się tak z powodu braku doświadczenia. Może są projekty open source, które powinienem podjąć, aby pokazać, że mówię poważnie? Jak przejść od bycia programistą stron internetowych do programisty wbudowanego?


title: Co oznacza „wysoka spójność”?

text: Jestem studentem, który niedawno dołączył do firmy programistycznej jako stażysta. Na uniwersytecie jeden z moich profesorów zwykł mawiać, że musimy dążyć do osiągnięcia „niskiego sprzężenia i wysokiej spójności”. Rozumiem znaczenie niskiego sprzężenia. Oznacza to trzymanie kodu oddzielnych komponentów osobno, tak aby zmiana w jednym miejscu nie złamała kodu w innym. Ale co to znaczy wysoka spójność. Jeśli oznacza to dobre zintegrowanie ze sobą różnych części tego samego komponentu, nie rozumiem, jak to jest korzystne. Co oznacza wysoka spójność? Czy można wyjaśnić przykład, aby zrozumieć jego zalety?


title: Czy jest powód do początkowej nadmiernej pewności siebie naukowców i inżynierów pracujących nad sztuczną inteligencją w latach 60.?

text: Właśnie rozpocząłem zajęcia z AI i eksploracji danych oraz książkę. Programowanie aplikacji AI, zaczyna się od przeglądu historii AI. Pierwszy rozdział dotyczy historii sztucznej inteligencji od lat czterdziestych do współczesności. Jedno konkretne stwierdzenie utkwiło mi w pamięci: > [W latach 60.] Inżynierowie AI obiecywali zbyt wiele i nie dostarczali… Jaki był powód zbytniej pewności siebie? Czy było to spowodowane matematycznymi modelami predykcji pokazującymi, że przełom jest tuż za rogiem, czy też z powodu stale rosnącej możliwości sprzętu, z której można skorzystać?


title: W przypadku dziedziczenia z klasy w języku C#, która konwencja nazewnictwa jest preferowana?

text: Jeśli na przykład dziedziczysz z Tile, czy podklasa powinna nazywać się CollisionTile, czy po prostu Collision? A co z narzędziami do malowania w aplikacji takiej jak Paint? PenTool czy tylko Pen? Czy są jakieś opublikowane wytyczne na ten temat?


title: Kiedy wymaganie uważa się za kompletne?

text: Jakie elementy musi zawierać wymaganie, aby można je było uznać za kompletne? Lub jeśli to działa lepiej - jakie pytania powinienem zadać o wymagania, aby dowiedzieć się, czy jest kompletny. Nie mówię o realizacji wymagania, ale o samym wymaganiu. Pytam o to z perspektywy analityka, który chce się upewnić, że jego wymagania są kompletne przed przekazaniem ich zespołowi projektowemu.


title: Jaki jest najlepszy sposób na cofnięcie scalenia Git, które usuwa pliki z repozytorium?

text: Więc wyobraź sobie, że dzieje się co następuje (i że wszyscy używamy SourceTree): 1. Wszyscy pracujemy na początku/rozwijaniu. 2. Wyjeżdżam na tydzień na wakacje. 3. Mój współpracownik pracował lokalnie przez ostatnie kilka dni bez łączenia pochodzenia/rozwijania z powrotem w swoim lokalnym oddziale deweloperskim. 4. Próbuje pchnąć, dowiaduje się, że najpierw musi się połączyć, a potem ciągnie. 5. Dochodzi do konfliktu, wstrzymując automatyczne zatwierdzenie po scaleniu przed kontynuowaniem. 6. Zakładając, że Git jest podobny do SVN, mój współpracownik odrzuca „nowe” pliki w swojej kopii roboczej, a następnie zatwierdza scalenie – wymazując te „nowe” pliki z nagłówka źródła/rozwoju. 7. Oprócz tej wersji trwa tygodniowa praca programistyczna. 8. Wracam z wakacji i dowiaduję się, że brakuje mi kilku dni mojej pracy. Wszyscy jesteśmy nowi w Git (to nasz pierwszy projekt, który go używa), ale naprawiłem to: 1. Zmień nazwę "develop" na "develop_old". 2. Połącz development_old w nową gałąź "develop_new". 3. Zresetuj gałąź development_new do ostatniego zatwierdzenia przed nieprawidłowym scaleniem. 4. Cherry wybierz każdy commit od tego czasu, jeden po drugim, ręcznie rozwiązując konflikty. 5. Przesuń development_old i development_new do początku. W tym momencie development_new jest, mam nadzieję, „dobrą” kopią wszystkich naszych zmian z ponownym zastosowaniem pracy w kolejnych tygodniach. Zakładam również, że "reverse commit" zrobi dziwne rzeczy na scaleniu, zwłaszcza że jest to oparte na kilku następnych tygodniach pracy - a ponieważ to scalenie zawiera wiele rzeczy, których _do_ chcemy wraz z tym, co robimy' t. Mam nadzieję, że to się nigdy więcej nie powtórzy, ale jeśli to się powtórzy, chciałbym poznać łatwiejszy / lepszy sposób na naprawienie rzeczy. Czy istnieje lepszy sposób na cofnięcie „złego” scalenia, gdy w repozytorium wykonano dużo pracy w oparciu o to scalenie?


title: Czy są jakieś dowody na to, że seplenienie rzeczywiście jest lepsze niż inne języki w sztucznej inteligencji?

text: Wydaje się, że od dawna panuje przekonanie (głównie przez niesepleniących), że seplenienie jest lepsze niż większość języków w AI. Skąd pochodzi ta wiara? I czy jest do tego jakaś podstawa?


title: Czy zleca się na zewnątrz jakieś najlepsze oprogramowanie? (na morzu lub w inny sposób)

text: Czy istnieje oprogramowanie, które jednocześnie wyprzedza konkurencję i jest zlecane na zewnątrz? Mam tu na myśli produkty oprogramowania, które są dużymi sprzedawcami i które są wysoko oceniane i opracowane przez podmiot spoza podmiotu, który jest właścicielem samego produktu. „Podmiotem zewnętrznym” może być firma krajowa lub zagraniczna, wykonująca prace rozwojowe na podstawie umowy. Wykluczam tutaj open source, ponieważ proces jest bardziej zdemokratyzowany niż typowy produkt (gdzie właściciel produktu bezpośrednio dyktuje projekt i wymagania). Mam na myśli oprogramowanie komputerowe takie jak: * Adobe Creative Suite * MS Office * Aperture * Visual Studio * ReSharper Lub aplikacje/strony internetowe takie jak: * Yelp * Pandora * 37 Signals apps * Zendesk * Salesforce * Amazon Szukam punktów danych , a nie subiektywne wyobrażenia o tym, co jest popularne. Popularność możemy mierzyć sprzedażą, pozycją w Google lub innymi wskaźnikami.


title: Porównanie języków według typu użycia?

text: Czy ktoś zna dobre miejsce, w którym można znaleźć porównania języków programowania według zamierzonej platformy/użytkowania? Zasadniczo to, co chcę wiedzieć, dotyczy bardziej popularnych języków, które są przeznaczone do tworzenia aplikacji wysokiego poziomu, tworzenia systemów niskiego poziomu, tworzenia aplikacji mobilnych, stron internetowych itp. Jeśli istnieje już dobra lista, nie jestem znaleźć to do tej pory. Czy ktoś zna miejsce, które by to miało? Dziękuję.


title: Dostęp do usługi sieciowej: potrzebne materiały szkoleniowe

text: Szukam zasobów do nauki (Java) Web Services. Chociaż znalazłem wiele zasobów i samouczków dotyczących JWS, mylą mnie numery wersji, skróty i Metro. Plus ostatnia aktualizacja Metro miała miejsce w 2008 roku. Czy warto się uczyć? Chciałem dowiedzieć się, jak uzyskać dostęp do usług internetowych, ponieważ nadchodzący projekt dotyczy dostępu do nich. Mam pewne doświadczenie z OAuth na Twitterze (używam dostępnego kodu). Co wiem o projekcie: Mam dostęp do usługi sieciowej. Java jest preferowaną platformą do użycia (chociaż wiem, że mogę użyć dowolnej). Axis może być używany do uzyskiwania dostępu do usługi sieciowej (nigdy nie korzystałem z usługi Axis) Mam zaplanowane spotkanie, aby dowiedzieć się więcej, ale na pewno nie chcę wyglądać głupio, ponieważ nie jestem ekspertem od Java, nigdy nie tworzyłem ani nie korzystałem z usług sieci Web za pomocą Jawa. Moje pytania: 1. Czy ktoś może wskazać mi samouczek, który pomoże mi dowiedzieć się, jak uzyskać dostęp do już działającej usługi sieciowej (najlepiej SOAP (?), a nie REST. Jest oparty na XML) 2\. Czy polecisz korzystanie z PHP lub Pythona do wykonania pracy związanej z dostępem do usługi sieciowej? Spodziewam się wielu nie, ale mam nadzieję, że dostanę też kilka odpowiedzi. W razie potrzeby wyjaśnię rzeczy.


title: Czy muszę dołączyć informację o prawach autorskich od pierwotnego autora?

text: Używam kilku kodów, które zmodyfikowałem, z Paradigms of Artificial Intelligence Programming do stworzenia kolejnego projektu, projekt jest wydany na licencji GPL V2. Umowa licencyjna jest napisana tutaj, mówi: Copyright © 1998-2002 by Peter Norvig. Moje pytanie brzmi: czy to już prawie 2014 rok, czy nadal muszę dołączyć tę licencję, czy wygasła i dlatego mogę używać kodów, które mi się podobają?


title: Obsługa zmian schematu bazy danych podczas wypychania nowych wersji

text: W czasach intensywnego rozwoju schemat bazy danych zmienia się zarówno szybko, jak i w sposób ciągły, a gdy nadejdzie cotygodniowe przejście na wersję beta, schemat zmienił się tak bardzo, że jedyną rozsądną opcją jest zniszczenie wszystkich tabel, które mogę i skopiuj nowe wersje z mojej bazy danych deweloperów. Oczywiście to nie zadziała po uruchomieniu, ponieważ nukowanie danych produkcyjnych to recepta na katastrofę, więc zastanawiałem się, jakie istnieją strategie zarządzania zmianami schematu bazy danych z jednej wersji/wersji do innej? Niektóre znalazłem lub doświadczyłem: 1. Proste nuke-and-dump z jednej bazy danych do drugiej (co robię teraz) 2. Utrzymywanie pliku UPDATE.sql z instrukcjami SQL, które są uruchamiane za pomocą skryptu lub ręcznie. 3. Utrzymywanie pliku update.php z odpowiednią wartością „db-schema-version” w aktywnej bazie danych Trzecia opcja wydaje się najbardziej sensowna, ale nadal istnieje możliwość, że źle skonstruowane zapytanie SQL zawiedzie mid-script, pozostawienie bazy danych w stanie w połowie zaktualizowanej, z koniecznością przywrócenia kopii zapasowej. Wydaje się, że to nie problem, ale zdarza się, ponieważ jako zespół używamy phpMyAdmin i nie mogę nawet polegać na sobie, pamiętam skopiowanie wykonanej instrukcji SQL, aby wkleić ją do pliku update.php. Po przejściu do innej strony muszę ręcznie przepisać instrukcję SQL lub cofnąć moją zmianę i zrobić to ponownie. Myślę, że mam nadzieję na rozwiązanie, które nie wpłynie na nasz ustalony przepływ pracy?


title: Praktyczne wskazówki do nauki redukcji wykresów

text: Czy są jakieś praktyczne odniesienia (z rzeczywistymi przykładami) do rozpoczęcia implementacji małego, leniwego funkcjonalnego języka programowania z redukcją grafów? Szczególnie pomocne byłoby odniesienie, które zawierało kroki leksykania i analizowania. Do tej pory przeczytałem większość _Implementation of Functional Programming Languages_ Simona Peytona Jonesa i książkę Wizard (SICP).


title: Przedrostki tabeli bazy danych

text: Prowadzimy kilka dyskusji na temat nazewnictwa naszych tabel bazy danych. Pracujemy nad dużą aplikacją z około 100 tabelami bazy danych (ok, więc nie jest tak duża), z których większość można podzielić na różne obszary funkcjonalne i staramy się wypracować najlepszy sposób nazewnictwa /organizując je w bazie danych Oracle. Trzy obecne opcje to: * Tworzenie różnych obszarów funkcjonalnych w oddzielnych schematach. * Twórz wszystko w tym samym schemacie, ale poprzedź tabele obszarem funkcjonalnym * Twórz wszystko w tym samym schemacie bez prefiksów Wokół każdego z nich mamy różne za i przeciw, ale chciałbym poznać opinie wszystkich na temat najlepszego rozwiązania . Edycja: Dzięki za wszystkie odpowiedzi. Trudno wybrać właściwą odpowiedź, wydaje się, że jest bardzo subiektywna, więc wybiorę tę z największą liczbą głosów (pomaga, że pasuje do tego, o czym myślałem! ;-)


title: Czy istnieje księga kanoniczna na temat montażu x86?

text: Jest wiele książek na temat montażu. Jednak zwykle zajmują się ISA, na których mi nie zależy, takimi jak MIPS czy ARM. Nie zajmuję się tymi architekturami; nie ma powodu, żebym próbował się ich nauczyć. Ale książki montażowe x86 wydają się... nie istnieją. Powiedzmy na przykład, że próbuję zbudować kompilator zabawek generujący pliki Windows Portable Executable. Czy istnieje książka, która jest de facto standardem opisującym najlepsze praktyki, metodologie projektowania i inne przydatne informacje na temat montażu x86? Co w tej książce czyni ją wyjątkową?


title: Jak zapobiec wyciekowi kodu poza pracę?

text: > **Możliwy duplikat:** > Jak zarządzać projektem o wysokim ryzyku w zamkniętym kodzie źródłowym? Pracuję nad instytucją, która ma naprawdę silne poczucie „posiadania” – każda linia oprogramowania, którą napiszemy, powinna być tylko nasza. Jak na ironię, jestem jedynym programistą (ATM), ale planujemy zatrudnić innych. Ponieważ moi szefowie nie uznaliby nowych programistów za ludzi, którym mogą ufać, mają problem z kopiami kodu źródłowego. Używamy Gita, więc mieliby **całą** kopię _każdego_ projektów, nad którymi pracują, kiedy klonują repozytorium. Możemy ograniczyć dostęp do nich do jednego klucza za pomocą Gitolite i powiązać go z ich komputerami, ale mogą skopiować te klucze na inny komputer i będą mieli dostęp do repozytorium na innym komputerze. Ponadto (i najbardziej oczywista metoda) mogli po prostu przesłać pliki w inne miejsce, dodać kolejnego pilota lub po prostu skopiować pliki na dysk USB. Czy jest jakiś (być może sprytny) sposób na zapobieganie takim wydarzeniom? **EDYTUJ:** Chciałbym podziękować wszystkim za spostrzeżenia w tym pytaniu, ponieważ było to nie tylko _więcej_ otwarcia oczu, ale także mocne wsparcie moich argumentów (ponieważ w zasadzie myślisz tak jak ja, a ja byłem starając się, aby to zrozumieli) przeciwko moim szefom w najbliższej przyszłości. Jestem w trudnej sytuacji pod względem pracy, a moi współpracownicy i szefowie (ponieważ zasadniczo jestem w środku) są jak dwa gangi, więc cały ten wkład jest bardzo, bardzo doceniany. Co prawda szukałem _technicznego_ rozwiązania problemu _ludzi_ - problemem jest zarówno kierownictwo, jak i pracownicy, więc nie da się tego w ten sposób rozwiązać (myślałem o jakimś _zaciemnianiu kodu_, być może pracy z osobnymi modułami, itp., ale to nie zadziałałoby w przypadku mojego programisty POV). Głównym problemem jest kultura wewnątrz i na zewnątrz firmy - rozwój nie jest traktowany poważnie w moim kraju (Wenezuela), więc naiwność i paranoja są tutaj tak naprawdę problemem. Prawdziwą odpowiedzią jest NDA (coś, co tutaj w Wenezueli nie działa całkowicie), ponieważ jest to rozwiązanie _ludzie_, ponieważ żaden rozsądny programista nie działałby w takich warunkach. Będzie brzydko, ale myślę, że dzięki twojej pomocy dam sobie z tym radę. Bardzo dziękuję! <3


title: Jak chronić kod źródłowy przed zdalnymi programistami?

text: Moja firma zamierza zatrudnić zewnętrznego programistę, który stworzy kilka nowych modułów i naprawi kilka błędów w naszym oprogramowaniu PHP. Nigdy wcześniej nie zatrudnialiśmy zewnętrznego programisty na godzinę wcześniej. Jak możemy chronić kod źródłowy? Nie czujemy się komfortowo, rozdając kod źródłowy i myśleliśmy, że wszystko pozostaje pod nadzorem VPN, do którego logowałby się zewnętrzny programista. Czy ktoś wcześniej rozwiązał ten problem? Jeśli tak to jak? Edycja: Chcemy, aby programista widział/modyfikował kod, ale pod nadzorem i zdalnie na naszej maszynie. Czy ktoś ma podobną konfigurację? Edycja 2: NDA to tylko formalność. IMO, nawet ludzie, którzy popierają umowy NDA, wiedzą, że nic nie zrobi, aby chronić ich własność. Edycja 3: Pozwolę sobie wyjaśnić, że nie martwimy się, że programista skopiuje algorytm lub rozwiązanie z kodu. Kod wychodzi z jego mózgu, więc naturalnie on jest twórcą i może to ponownie stworzyć. Ale nasz kod jest budowany przez kilka lat, przy czym pracuje nad nim dziesiątki programistów. Powiedzmy, że przez pomyłkę zatrudniam niekompetentnego programistę, który kradnie nam lata pracy, a następnie sprzedaje je konkurencji. To może sprawić, że stracimy przewagę. Wiem, że to rzadkość, ale takie zagrożenie trzeba brać pod uwagę, jeśli prowadzisz biznes. Zwrócę uwagę na moje komentarze, aby każdy mógł się łatwo porozumieć: 1. Dlaczego NDA jest do bani? Weźmy ten scenariusz, jeśli ktoś jest w stanie zaproponować rozwiązanie tego scenariusza, uznam NDA za skuteczną. Ok, oto idzie: Zatrudniamy 2 zewnętrznych programistów, jeden z nich po roku sprzedaje nasz kod tak jak komuś innemu. Nie masz już kontaktu z żadnym z twórców, jak masz się dowiedzieć, kto cię oszukał? Umowa NDA zapewnia cel, ale nie można na tym całkowicie polegać. Przynajmniej nie możemy. 2. Nie chciałem nikogo urazić, publikując to pytanie, mimo że zrobiłem to nieumyślnie. Ale znowu dla ludzi odpowiadających/komentujących w stylu „Nigdy nigdy nie będę z tobą pracował” lub tego gadżetu z facetami w czerni: nie chodzi o ciebie, to wątek o tym, jak wykonalne byłoby dane rozwiązanie techniczne. A jeśli ktoś w tej społeczności pracował w takim środowisku. 3. Jeśli chodzi o 'Trust', oczywiście nie zatrudnimy nikogo, komu nie ufamy. Ale czy o to chodzi? Czy na początku ktoś nie może być podstępny? Wszyscy zaufaliśmy wielu politykom, którzy rządzą naszym krajem, czy oni nas nigdy nie zawiedli? Mówię więc, że „zaufanie” to zupełnie inna warstwa ochrony, taka jak NDA, i moje pytanie nie było do niej skierowane. Moje pytanie dotyczy raczej środków technicznych, które możemy podjąć, aby uniknąć takiego zdarzenia.


title: Jak chronić naruszenia własności intelektualnej przed własnym zespołem?

text: Mam pomysł na aplikację na Androida, chcę stworzyć aplikację wraz z kilkoma partiami w moim kolażu. (1) Jak mogę się upewnić, że ci faceci nie narażą na szwank związanych z tym własności intelektualnych? W tym sensie, że nie ujawnią poufnych informacji, nowych teorii, nowych pomysłów, opisów nowych funkcji ani swobodnie na jakimkolwiek nośniku, ani do innej firmy rozwijającej podobne oprogramowanie. Poza tym osoby te najprawdopodobniej będą miały dostęp do całego kodu źródłowego (z komentarzami) projektu, jak mam się upewnić, że w przyszłości będą ze mną współpracować, (2) nie wydadzą żadnej części kodu , (3) Nie będzie swobodnie udostępniać wersji alfa zawierających funkcje przeznaczone wyłącznie dla użytkowników premium. Ponadto (4) czy istnieje sposób na efektywną pracę bez udostępniania im całego kodu źródłowego? Jestem otwarta na wszelkiego rodzaju odpowiedzi: zaufanie, techniczne, menedżerskie - przywództwo, dobra przyjaźń - relacje z kolegami. AKTUALIZACJA: Wszyscy mieszkamy w Indiach.


title: Jak zarządzać projektem zamkniętego źródła wysokiego ryzyka?

text: Obecnie planuję stworzyć stronę internetową J2EE i chcę zatrudnić 1 programistę i 1 projektanta stron internetowych do pomocy. Projekt jest aplikacją finansową na rynku niszowym. Planuję zamknąć źródło. Obawiam się jednak, że moi przyszli pracownicy mogliby łatwo skopiować bazę kodów i wykorzystać ją lub sprzedać stronie trzeciej. Rozwój aplikacji potrwa 4-6 miesięcy, być może więcej, a po uruchomieniu aplikacji mogę zatrudnić dodatkowych pracowników. Ale jak zachować źródło dla siebie. Czy istnieją techniki stosowane przez firmy do ochrony swojego źródła? Przewiduję wyłączenie napędów USB i nagrywarek DVD na moich komputerach programistycznych, ale przesyłanie danych lub dołączanie kodu w wiadomości e-mail nadal będzie możliwe. Moje pytanie jest niekompletne. Ale programistów, którzy byli w mojej sytuacji, proszę o radę. Jak mam się do tego zabrać? Budowanie zespołu, zachowanie tajemnicy kodu itp. Z niecierpliwością czekam na podpisanie umowy o zachowaniu tajemnicy z pracownikami, jeśli zajdzie taka potrzeba. (Proszę dodać odpowiednie tagi) **Aktualizacja** Dziękujemy za wszystkie odpowiedzi. Na pewno nie będę teraz wyłączał wszystkich portów USB i nagrywarek DVD. Ale myślę, że powinienem rejestrować aktywność (Jak dokładnie mam to zrobić?) Nieufnie podchodzę do skalperów, którzy dołączyliby, a następnie uciekli z istniejącym kodem. Nie spotkałem żadnego, ale doradzono mi, żebym się na nich uważał. Dodałbym klauzulę tajności, ale biorąc pod uwagę, że jest to startup prawie bez finansowania i w wysoce konkurencyjnej niszy biznesowej z większymi graczami w tej dziedzinie, wątpię, czy byłbym w stanie wykryć lub ścigać jakichkolwiek skalperów. Jak zatrudnić ludzi, którym ufam, kiedy nie znam ich osobiście. Ich życiorys będzie pomocny, ale w przeciwnym razie zaufanie rozwinie się dopiero z czasem. Ale w końcu, nawet jeśli uciekną z kodem, to usługa ma znaczenie po dokonaniu sprzedaży. Więc nie martwię się na dłuższą metę.


title: Iteratory a „kursory” w Javie

text: W Javie większość ludzi oczekuje, że każde wywołanie `Iterator.next()` zwróci odrębny obiekt. To doprowadziło niektórych z nas do zdefiniowania alternatywnego modelu, który nazwaliśmy „kursorem”. (Zauważ, że inni używają terminu 'kursor' do narysowania innego rozróżnienia.) Wzorzec kursora to: class SomeCursor { boolean hasNext(); nieważne następny(); type1 getItem1(); type2 getItem2(); } Innymi słowy, jest zupełnie jasne, że ten sam obiekt ewoluuje na każdym etapie iteracji. Problemem w tej chwili jest również wspieranie sytuacji, takich jak usługi sieciowe, w których absolutnie chcemy odrębnych obiektów, abyśmy mogli rozesłać ich kolekcję. Boli mnie wyobrażenie sobie par klas (kursor i fasolka), które muszą być utrzymywane równolegle, i szukam alternatyw. Oto jeden pomysł i zastanawiam się, czy ktoś inny widział lepszy. 1. Tworzysz interfejs składający się z metod 'get' dla obiektu ze wszystkimi zawartymi w nim elementami. 2. Definiujesz kursor jako implementujący ten interfejs, a także hasNext & next. 3. Dynamicznie tworzysz obiekty fasoli za pomocą jednej z głównych dynamicznych bibliotek generowania kodu w locie, aby stworzyć klasę z oczywistymi polami i uzyskać metody, a także w razie potrzeby ustawić metody, aby coś takiego jak JAX-B było szczęśliwe. edit: dla tych, którzy nie śledzą, polecam lekturę http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/analysis/TokenStream.html. Porównaj także z http://download.oracle.com/javase/6/docs/api/java/sql/ResultSet.html, który jest przykładem tego podejścia „kursorowego”. Zauważ, że w Lucene API, które iteruje po sekwencji obiektów, pozwala wywołującemu określić, czy za każdym razem dostarczać nowe dane do nowego obiektu, czy do tego samego starego obiektu. Tak, można zdefiniować `Iterator<T>`, który za każdym razem zwraca to samo, ale obawiamy się, że ludzie będą używać go jako pistoletu do odstrzeliwania palców u nóg. Stąd preferencja dla wzorca JDBC.


title: JSP a szablony

text: Zrobiłem kilka badań na temat używania szablonów po stronie serwera w porównaniu z JSP, nie mogłem znaleźć informacji na ten temat. Czy ktoś może podać informacje na temat zalet i wad przy użyciu szablonów po stronie serwera w porównaniu z JSP i odwrotnie.


title: Jak szukać testera?

text: Jako niezależny programista kilka razy próbowałem znaleźć testerów, aby mogli przetestować moje oprogramowanie/aplikacje internetowe. Jeśli próbuję je znaleźć, dzieje się tak dlatego, że większość klientów nie jest przeznaczona do zatrudniania zewnętrznych testerów i nie rozumie, dlaczego może to im przynieść korzyści, więc produkty nie są testowane w interfejsie użytkownika i zawierają błędy. Próbowałem wielu rzeczy. Fora dyskusyjne dla informatyków, konkretne strony internetowe dla osób poszukujących pracy. Za każdym razem wyraźnie precyzuję, że szukam testerów produktów. Kompletnie nie udało mi się znaleźć nikogo do tej pracy. Zamiast tego znalazłem dwa rodzaje ludzi: * Osoby nie będące informatykami, które próbują zakwalifikować się na testerów, ale nie mają wystarczających umiejętności, aby to zrobić i tak naprawdę nie wiedzą, czym jest testowanie i jak to zrobić, * Programiści, którzy są wykwalifikowani _jako programiści_ , ale nie jako testerzy i którzy w większości nie rozumieją, na czym polega testowanie (albo uważają, że jest to to samo, co _przegląd kodu_ , albo polega na _pisaniu testów jednostkowych_ ). Oczywiście przesyłają ogólne CV programistów, w których opisują swoje duże doświadczenie w Assemblerze i C++, ale nie mówią nic o niczym związanym z pracą testera. Co robię źle? Czy nie nazywa się to „testerem”? Czy istnieje przynajmniej praca testera, inna niż praca ogólnego programowania? Czy jest jakiś konkretny wymóg, który można wymagać od każdego kandydata, który może wyeliminować osoby spoza IT i ogólnych programistów?


Czy istnieje sposób, aby zapobiec edycji zawartości HTML i CSS na stronie za pomocą narzędzi podobnych do Firebug? Odkryłem, że niektórzy użytkownicy edytują niektóre wartości w ukrytych polach i niektóre treści, które są wpisane między tagami div lub span, aby uzyskać pewne zyski. Robią to głównie poprzez edycję za pomocą narzędzi takich jak firebug. Czy istnieje sposób na zidentyfikowanie takich modyfikacji? Problem polega na tym, że edytowane przez nich wartości są generowane podczas kompilacji strony. Strona jest napisana w PHP. Edycja odbywa się głównie pomiędzy tagami.


title: Jaka praktyka nawlekania jest dobra w 90% przypadków?

text: Ponieważ mój wątek SO został zamknięty, myślę, że mogę o to zapytać tutaj. Jakie praktyki lub praktyki są dobre w 90% przypadków podczas pracy z wątkami z wieloma rdzeniami? Osobiście wszystko, co zrobiłem, to udostępnienie niezmiennych klas i przekazanie (skopiowanie) danych do kolejki do wątku docelowego. Uwaga: To jest do badań i kiedy mówię 90% czasu, nie mam na myśli, że może się nie udać 10% czasu (to śmieszne!) Mam na myśli 90%, to jest dobre rozwiązanie, podczas gdy pozostałe 10% nie jest tak pożądane ze względu na implementację lub ze względów wydajnych (lub po prostu inna technika znacznie lepiej pasuje do problematycznej dziedziny).


title: Rekruterzy celowo prezentują jednego dobrego kandydata na dostępną pracę

text: Może robią to nie zdając sobie sprawy. Celem rekrutera jest jak najszybsze wypełnienie stanowiska. Myślę nawet, że uważają, że w ich najlepszym interesie jest, aby kandydat był wykwalifikowany, więc nie staram się powalić rekruterów. Czy nie lepiej prezentują 3 kandydatów, ale jeden wyraźnie się wyróżnia? Ostatnią rzeczą, jakiej oczekują od swojego klienta, jest konieczność wydłużenia procesu rozmowy kwalifikacyjnej, ponieważ nie mogą się zdecydować. Jeśli klient nie lubi żadnego z nich, po prostu sprowadzasz kolejnego dobrego kandydata. W ten sposób trochę zabezpieczają swój zakład. Jakieś doświadczenie, wgląd lub słyszane kiedykolwiek o łowców głów to przyznają? Czy ma sens? Musi być jakiś powód, dla którego wybierają tak niewykwalifikowanych ludzi. Widziałem opublikowane oferty pracy, które wyraźnie stwierdzają, że chcą kogoś z dyplomem CS, a rekruter nie bierze tego dosłownie. Nie mam dyplomu CS ani doświadczenia w Javie, a mimo to uważają, że jestem odpowiedni. Edycja: Zadaję to pytanie, ponieważ jest wiele postów, które zakładają, że rekruterzy nie mogą rozpoznać talentów, ale może nie jest w ich interesie rozpoznawanie zbyt wielu utalentowanych kandydatów i utrudnianie klientom decyzji. Wyeliminuj zamieszanie. Jest jeden kandydat. Złóż tej osobie ofertę. To wygrana, wygrana, wygrana. Może to podpada pod teorię zbyt wielu wyborów?


title: Łączenie bibliotek JavaScript innych firm z moim kodem, a następnie używanie kompilatora Closure

text: W swojej witrynie używam wielu bibliotek JavaScript innych firm, a teraz przechowuję każdą bibliotekę innych firm jako osobny plik .js z własnym znacznikiem `<script>`. Ale chciałbym użyć kompilatora zamknięć z zaawansowanymi optymalizacjami. Wymaga to albo połączenia wszystkich skryptów java w mojej witrynie, albo dokonania wielu modyfikacji w moim kodzie. Oczywiście wolałbym po prostu połączyć wszystkie javascript razem, a następnie uruchomić go za pomocą kompilatora zamknięć, ale gdzie umieściłbym licencje i atrybucje dla tego kodu? Nie tylko to, ale rzeczywisty kod innej firmy zostanie zmodyfikowany, gdy będzie działał przez kompilator. Wszystkie biblioteki innych firm używają MIT, BSD lub CC0 1.0 Universal.


title: Wymuszanie aktualizacji aplikacji ExtJS po wdrożeniu

text: Pracuję nad aplikacją ExtJS z backendem Django i ciągle napotykamy problemy, gdy wysyłamy nowy kod. Nasi użytkownicy rzadko odświeżają swoje przeglądarki, więc po wypchnięciu kodu otrzymujemy przez kilka dni tę samą (już nieaktualną) wersję naszej aplikacji ExtJS zamiast nowej, zaktualizowanej wersji. Jak inni ludzie radzą sobie z tym problemem? (Nie znalazłem nic na ten temat w Internecie, więc prawdopodobnie nie znalazłem jeszcze właściwych słów kluczowych).


title: Jeśli instrukcje w zestawie „ogólnym”?

text: Czytam stosunkowo „przyjazną” i prostą książkę o kompilatorach zatytułowaną „Zbudujmy kompilator” (pierwotnie seria artykułów). Kompilator napisany w tej książce generuje instrukcje w jakimś języku asemblerowym (asembler 68000). Ponieważ nie znam tego języka asemblerowego, zdecydowałem, że mój kompilator wygeneruje również instrukcje 'asembler' (np. `MOVE #4,D0` ma to samo znaczenie: "wstaw cyfrę 4 do rejestru `D0`"), tylko będą wykonywane przez program, który napiszę, a nie przez fizyczny komputer. Rodzaj „wirtualnej maszyny”. Jak dotąd myślę, że nie powinno to stanowić problemu, ale mam pytanie dotyczące tego: Jaki jest „ogólny” sposób obsługi instrukcji `if` w asemblerze? Na przykład, jakie byłoby najprostsze tłumaczenie tego kodu w asemblerze: if(a>b){ // do rzeczy }


title: Jakie są dobre strategie ewidencjonowania kontroli źródła w przypadku dużych zadań?

text: Ogólną zasadą jest, aby odprawy były małe, a odprawy często. Ale czasami zadanie wymaga dużych zmian w podstawowej strukturze. Następnie zaewidencjonowanie przed zakończeniem zadania spowoduje przerwanie projektu, dopóki nie zaewidencjonujesz ukończonej pracy. Więc jakich strategii używają ludzie, aby zmniejszyć ryzyko utraty pracy lub decyzji, że robisz coś złego, a następnie zmienić zdanie po usunięciu kodu i wypróbowaniu innego podejścia? Kiedy mogę, zaewidencjonuję w połowie wykonaną pracę, skomentowaną, lub jeśli skompiluje się i nic nie używa nowych plików, zaewidencjonuję je. Im większa zmiana, tym bardziej prawdopodobne jest, że rozgałęzię projekt, a następnie scalę z powrotem kiedy wszystko znowu działa. Inną opcją, jeśli pozwala na to system kontroli źródeł, są zestawy półek, które w zasadzie są małymi oddziałami. Więc kiedy skończę dzień lub dojdę do punktu decyzyjnego, odłożę zmiany, a jeśli wydarzy się coś katastrofalnego lub zechcę wrócić do tego punktu, mogę to zrobić.


title: Jaka jest najgorsza decyzja technologiczna, jaką kiedykolwiek widziałeś?

text: Obejmuje to decyzje dotyczące architektury, wybór platformy lub każdą sytuację, w której tak zły wybór prowadził do negatywnych konsekwencji.


title: Projekt: mieszany XML / relacyjny czy czysto relacyjny?

text: Czy dopuszczalne jest modelowanie bardzo złożonego grafu obiektów przy użyciu XML w bazie danych, ale pozostawienie reszty systemu w tabelach relacyjnych? Chciałbym ocenić opinię na ten temat, ponieważ trafiłem na małą zagadkę. Wielkie dzięki ## \-------------------- **Tło** Buduję aplikację finansową, która choć wcale nie jest duża pod względem przechowywania danych ( <= początkowo kilkadziesiąt megabajtów), będzie miał bardzo złożony model danych. W szczególności użytkownicy będą pracować w kontekście encji „Projekt”, która będzie zawierać różne podelementy i listy. Użytkownicy będą mogli dodawać formuły do różnych części tego wykresu obiektu i będą one stale przeliczane w czasie rzeczywistym. Złożoność składa się z dwóch części: 1. Bez względu na to, gdzie w hierarchii klas znajduje się formuła, będzie ona w stanie dotrzeć do dowolnej innej części tej samej nadrzędnej encji projektu przy użyciu składni podobnej do ścieżki. Obejmuje to wyniki innych formuł, a ja będę implementować to wszystko za pomocą drzewa zależności w pamięci na warstwie środkowej. 2. Chciałbym, aby wszystkie formuły miały tę samą podstawową strukturę, metadane itp. Aby to osiągnąć, wszystkie formuły będą reprezentowane w kodzie przez tę samą strukturę klas, niezależnie od tego, do której części grafu danych są dołączone. Wolałbym mieć całość w dokumencie — oznaczałoby to znacznie mniej czasu spędzonego na projektowaniu bazy danych i byłbym w stanie mieć znacznie bogatszy model obiektowy przy takim samym nakładzie pracy. Martwię się jednak o integralność relacyjną - nadal chciałbym przechowywać moje dane statyczne w tabelach relacyjnych. **Technologie** * SQL Server 2012. * .Net 4,5 (przez C#) * Entity Framework (najpierw baza danych) w warstwie środkowej * Proste automatycznie generowane DTO przez WCF dla usług * WPF z Prism na kliencie. Nie brałem pod uwagę pomysłów na pamięć masową NoSQL, głównie dlatego, że nie mam wystarczającego doświadczenia z nimi do projektu o napiętych ramach czasowych. Z tego samego powodu nie brałem również pod uwagę kodu Entity Framework.


title: Usuwanie elementów „co najmniej jednego” powiązania

text: załóżmy - niezależnie od technologii i języków programowania - masz typ i typ ma skojarzenie z innym typem. To skojarzenie ma złożoność „co najmniej jednego” (1..n). Jak określiłbyś zachowanie podczas usuwania elementów z tej asocjacji na podstawie predykatu? Powiedzmy, że predykat pasuje do wszystkich elementów, więc usunięcie naruszyłoby ograniczenie 1..n, czy usuniesz wszystkie elementy oprócz jednego, czy raczej nie usuniesz żadnego elementu w tym przypadku (i zachowanie transakcyjne)?


title: Czy powinienem używać struktury z podstawowego zestawu narzędzi graficznych w mojej domenie?

text: W javie (i wielu innych językach programowania) często istnieją struktury do radzenia sobie z elementami graficznymi: kolor, kształt itp. Są one najczęściej w zestawie narzędzi UI, a zatem mają stosunkowo silne sprzężenie z elementem UI. Teraz w domenie mojej aplikacji często zajmujemy się kolorem, kształtem itp., aby wyświetlić informacje statystyczne o elemencie. W tej chwili wszystko, co z tym robimy, to wyświetlanie/zapisywanie tych elementów z niewielkim lub żadnym zachowaniem. Czy byłoby sensowne unikanie „wynajdywania koła na nowo” i bezpośrednie używanie struktur w `java.awt.*`, czy też powinienem stworzyć własny element i unikać łączenia z tym zestawem narzędzi? To nie jest tak, że te elementy znikną w najbliższym czasie (w końcu są częścią podstawowej biblioteki java), ale jednocześnie dziwnie jest importować `java.awt.*` po stronie serwera. Nie mam problemu z używaniem `java.util.List` wszędzie. Czy powinienem czuć się inaczej w stosunku do tych zajęć? Jaka byłaby w takim przypadku „zalecana” praktyka?


title: Przeciążone rozwiązania baz danych SQL Server o dużej liczbie transakcji

text: Bieżąca baza danych serwera sql jest przeciążona i wiele transakcji kończy się niepowodzeniem. Uprawnienia, które mają zaproponowane rozwiązanie to zbudowanie oddzielnej bazy danych do obsługi/przechowywania transakcji, a następnie asynchronicznego wstawiania ich do obecnego systemu. W szczególności utrwal nowe transakcje w nowej bazie danych, a następnie zbuduj procedury wstawiania danych z nowej bazy danych do bieżącej/starej bazy danych. Szukam najlepszej metody na zaimplementowanie tego rozwiązania... czy powinienem użyć nieindeksowanej tabeli w proponowanej nowej bazie danych do szybkiego wstawiania, a następnie użyć wstawiania zbiorczego z newdb -> olddb, aby przenieść dane z powrotem do głównej bazy danych? Czy najlepiej to zrobić w ustalonych odstępach czasu czy w czasie rzeczywistym? Zastanawiałem się również, czy skalowanie w górę/w dół pomogłoby tutaj (na ile pozwala budżet)? Moją pierwszą myślą było zalecenie zakupu drugiego serwera i skonfigurowanie klastra w celu zmniejszenia obciążenia. Szczerze mówiąc, myślałem, że transakcje internetowe po prostu przekroczą limit czasu i nie zakończą się niepowodzeniem (ale myślę, że to ostatecznie to samo)?


title: Jak mam zająć się deduplikacją danych na dużą skalę?

text: Muszę opracować lub przynajmniej skonceptualizować moduł, który wykonuje _wydajną_ deduplikację danych. Załóżmy, że mamy już miliony rekordów danych. Wstawienie kolejnych 100 mln rekordów, upewnienie się, że w wynikowym zbiorze danych nie ma zduplikowanych rekordów, jest tym, co moduł musi zrobić na najwyższym poziomie. Teraz może to oznaczać porównywanie w polu (polach), które decyduje o tym, czy rekordy są zduplikowane, czy nie. Ale takie podejście, podejmowane seryjnie, jest naprawdę naiwne, gdy mówimy o milionach płyt. Jak myślisz, jakie może być opłacalne podejście? Haszuje? za pomocą algorytmów typu dziel i rządź, aby wykorzystać równoległość? Mam to w głowie, ale na taką skalę robi się naprawdę zawrotny. Proszę również zamieszczać wszelkie wskazówki do zasobów w sieci, z których mogę skorzystać — mogłem znaleźć tylko dyskusje i dostawców, którzy mówią coś o „najwyższych funkcjach deduplikacji danych” ich bazy danych. Dzięki, Yati Sagade


title: Czy możesz polecić dobry szablon planu testów?

text: Czy możesz polecić dobry szablon planu testów dla zwinnego zespołu testowego? Wiem, że istnieją szablony do testowania w Internecie i już sprawdziłem niektóre znalezione przez wyszukiwarki, ale naprawdę mógłbym użyć czegoś lekkiego i czegoś, co zostało już wypróbowane przez wykwalifikowanych testerów i wiadomo, że działa dobrze. Wiele szablonów, które widziałem, daje mi wrażenie, że pisanie dokumentów testowych ma stanowić jedną trzecią pracy wykonywanej przez tych testerów, ale mój zespół naprawdę woli używać mniej dokumentacji, a bardziej rzeczywistego pisania testów. Używamy wiki do dokumentacji, więc podejście, które nadaje się do żywych dokumentów, byłoby świetne. Mam nadzieję, że zastosowanie bardziej ustrukturyzowanego podejścia do planowania testów zwiększy użyteczność mojego planu testów, jednocześnie zmniejszając wysiłek związany z jego tworzeniem, pozwalając mi myśleć o testach, a nie o formacie i strukturze planu. W moim miejscu pracy nie ma już czegoś pod ręką, więc wszystko, co zacznę, może zostać zaadoptowane przez firmę.


title: Wybór między dwoma programistami: doświadczenie kontra pasja

text: Jestem na stanowisku, że muszę zatrudnić programistę i mam do wyboru 2 kandydatów, pierwszy ma doświadczenie, ale nie ma pasji do kodowania i tak mówi, podczas gdy drugi nie ma doświadczenia, ale ma pasję, dobrze poradził sobie w rozmowie kwalifikacyjnej i uzyskał certyfikat. Mamy środki, aby kogoś wyszkolić, ale naprawdę nie chcę zaprzepaścić tego procesu i zatrudnić kogoś, kto będzie rozczarowujący. Czy ktoś może mi pomóc, jak podejść do tej sytuacji?


title: Czym jest algorytm O(n) do rozwiązania tej zagadki?

text: Zorganizujemy spotkanie, na którym wszyscy będą mówić przy stole zgodnie z ruchem wskazówek zegara. Jest n osób z n plamami. Każda osoba ma preferencje dotyczące pozycji (np. niektórzy chcą iść pierwszy, niektórzy ostatni, itp.). Każdy siedzi losowo i nie może ruszyć się ze swojej pozycji. Jak obliczyć najlepszą pozycję startową na stole, aby zadowolić większość ludzi? Mam rozwiązanie O(n^2): Zobacz, ile osób byłoby zadowolonych, przyjmując każdą z pozycji 1..n jako pozycje startowe; następnie zwróć pozycję, która dała maksymalną wartość.


title: Migracja danych do jednej współdzielonej tabeli SQL

text: W mojej firmie używamy trzech wewnętrznych aplikacji internetowych. Niestety żaden z moich poprzedników nie przewidywał dzielenia się tabelami między tymi aplikacjami. Konieczne stało się udostępnianie niektórych danych firmy między trzema wewnętrznymi aplikacjami internetowymi. Na przykład każda z trzech stron internetowych ma w swoich bazach danych tabelę „firmy”. _Witryna A firmy Tabela_ id | nazwa --------- 1 | Sprockleys Zębatki 2 | Gadżety Goobers 3 | Nancys Naszyjniki _Strona internetowa B Firmy Tabela_ id | nazwa --------- 3 | Sprockleys Zębatki DENVER 22 | Gadżety Gooburrs 30 | Nancyies Necklaces Chcę jakoś połączyć wszystkie te dane w jedną wspólną tabelę bazy danych. Niestety identyfikatory firm w ogóle się nie zgadzają, a inne tabele mają klucze obce, które przypisują produkty i użytkowników do tych firm. Jakie są pomysły na takie łączenie danych?


title: Jaka jest różnica między interfejsami API, bibliotekami, systemami wykonawczymi i frameworkami?

text: > **Możliwy duplikat:** > Biblioteka a framework a API? Trudno mi zrozumieć, co naprawdę oznaczają te pojęcia. Ten stos oprogramowania jest bardzo mylący. Czy możesz mi pomóc z tym pytaniem lub jeśli możesz odesłać mnie do jakiegoś artykułu/książki, w którym mogę dowiedzieć się szczegółów na temat tego stosu oprogramowania i ich interakcji. Próbowałem wikipedii, ale nie ma tam wystarczających wyjaśnień, a zamieszanie nadal istnieje.


title: Jak mam sobie radzić ze zmiennymi globalnymi w istniejącym starszym kodzie (lub, co lepsze, globalnym piekłem lub piekłem wzorców)?

text: Więc... Mamy ten dość złożony projekt (~10k LOC, ale jest zduplikowany kod, więc trudno powiedzieć) z setkami zmiennych globalnych. Projekt ma więcej zależności od innych projektów i wiele innych projektów również od niego zależy. W większości odziedziczyłem odpowiedzialność za refaktoryzację tylko części tego projektu, "zamkniętej sekcji" modułów. Żaden z oryginalnych programistów nie pozostał. Opracowałem sposób na uporządkowanie procedur w klasach (rozbijanie megamotów, tworzenie hierarchii klas, odrobina Strategii tu i tam, nic nadzwyczajnego (mam nadzieję); celem jest ułatwienie innym programistom dodawania funkcjonalności i umożliwiają dodanie odpowiednich testów jednostkowych). Moje nowe klasy zapewniają obliczenia stosowane do aktualnie aktualizowanych globalnych tablic danych, a same obliczenia muszą utrzymywać stan (suma, ostatnia wartość ostatniego przetworzonego wektora itp.). Można je postrzegać jako funktory. Nie jestem jednak pewien, jak radzić sobie z globalami. Nie sądzę, że będę w stanie zmienić wszystkie globalne na nieglobalne ze względu na zależności od innych modułów, których nie zamierzam teraz refaktoryzować. Ponadto wiele moich nowych zajęć będzie musiało udostępniać dane. Więc mogę... * Dla globalnych, które _nie są współdzielone_ przez moje nowe klasy, zostaw je tak, jak są. Myślałem o użyciu rejestru lub przynajmniej użyć niektórych zmiennych #define lub innych, aby ograniczyć zakres i zapewnić kontekst wszędzie tam, gdzie są używane. * Dla globalnych, które _będą współdzielone_ pomiędzy moimi nowymi klasami, stwórz klasę bazową z referencjami lub użyj Singletona do ich przekazania, albo kombinacji obu. Nie jestem pewien, czy używanie tych wzorów przyniesie więcej szkody niż pożytku. Więc moje pytanie brzmi: **co jest lepsze, żyj z istniejącymi zmiennymi globalnymi lub agresywnie dostosuj je za pomocą wzorców takich jak Singleton lub Registry? Masz jakieś sugestie dotyczące tych schematów lub masz lepszy schemat?**


title: Dlaczego program Visual Studio nie zwiększa automatycznie numeru wersji?

text: To pytanie dotyczyło automatycznego aktualizowania numeru wersji w VS 2010: http://stackoverflow.com/questions/4025704/publishing-in-net-produces-application-files-myapp-someversionnumber-how-to-ge Odpowiedź brzmiała: Musisz ręcznie zaktualizować zarówno wersję zespołu, jak i wersję pliku. Czy numer wersji nie powinien się zwiększać za każdym razem, gdy publikuję? Dlaczego mam to robić ręcznie? Czy jest to świadoma decyzja SM, aby zrobić to w ten sposób? Co myśli o ręcznej aktualizacji własnego numeru wersji przez ludzi?


title: Projekt do tworzenia menu na podstawie typu użytkownika

text: **Problem** Buduję aplikację PHP, która ma menu główne, które z kolei zawiera różne "sekcje" lub "podtytuły" z różnymi linkami. Istnieje kilka typów użytkowników, takich jak superadmin, administrator, nauczyciel, uczeń itp., a każdy typ powinien mieć potencjalnie inną strukturę menu. Wygląda na to, że mój klient chciałby dodać więcej typów w dalszej kolejności. Obecnie mam ogromny blok if/elseif/..., który sprawdza jakiego typu użytkownika jesteś i tworzy tablicę z tablicami dla wszystkich sekcji, zawierającą jeszcze więcej tablic dla każdego linku (te tablice zawierają adres URL, klasę i podpis adres URL). W tej chwili ma około 700 linii. Jak widać, rozpoczęcie pracy staje się dość skomplikowane i męczące. Próbowałem więc użyć pewnych wzorców projektowych (o których moja wiedza nie jest aż tak niesamowita). **Nieudane próby** Najpierw spróbowałem stworzyć kilka implementacji _Builder_: jedną dla samego linku, jedną dla "sekcji", a na koniec jedną dla samego menu. Następnie spróbowałem zaimplementować wzorzec _Strategy_, aby sprawdzić aktualny typ użytkownika i dodać linki do sekcji oraz te sekcje do menu. Ostatnią próbą było serializowanie tego obiektu menu do bazy danych i po prostu odczytywanie go stamtąd (ponieważ niektóre typy użytkowników mogą mieć dynamicznie konfigurowane sekcje/łącza) **Prawdziwe pytanie** Nie mam pojęcia, czy moje uzasadnienie jest w ogóle poprawne w w związku z tym, ponieważ stworzyłem i całkowicie usunąłem cały mój kod około 4 razy, ponieważ zrozumienie tego, co musi i gdzie musi iść, staje się skomplikowane. Myślę więc, że moje rzeczywiste pytanie brzmi: **Gdybyś musiał zbudować tego rodzaju implementację dla menu (lub czegokolwiek, w którym wiele obiektów jest wbudowanych w inny obiekt, a wiele obiektów tego typu jest wbudowanych w kolejny obiekt), w jaki sposób się za to zabierasz?** Jakie wzorce byłyby przydatne i jak można je ustrukturyzować, aby działały razem bez zabijania mózgu? Dziękuję!


title: Kontroler a model: gdzie umieścić przetwarzanie danych wejściowych użytkownika?

text: Jestem nowy w MVC i nie używam frameworka (i nie zamierzam). Projektuję moją nową aplikację sieci web przy użyciu MVC. Mam dane wejściowe otrzymane przez użytkownika w kontrolerze. Załóżmy, że mam formularz `dane` i `działanie`, które mogą być "wstaw", "usuń" lub "aktualizuj". Czy muszę przetworzyć tę akcję w Kontrolerze czy w Modelu? Czyli: muszę zrobić: # Kontroler if (action == "insert") Model.insert(data) or # Controller Model.process(data, action) # Model.process if (action == "insert") self. insert(data) (przykład niezależny od języka). Jaka jest „sposób MVC”, aby to zrobić?


title: w jaki sposób ORM jest przykładem łączenia wiadomości?

text: W tym pokazie slajdów na slajdzie 26 wspomina on ORM jako przykład łączenia wiadomości. Jak to jest? W przypadku ORM pewien kod wywoła ORM za pośrednictwem interfejsu API, ale brzmi to jak „sprzężenie kontrolne”. Również interfejs API ORM przyjmuje parametry, aby określić, co chcesz, ale brzmi to jak sprzęganie danych. W jaki sposób ORM jest przykładem łączenia wiadomości? może inne przykłady łączenia wiadomości pomogą mi zrozumieć.


title: Jak znaleźć wąskie gardła w aplikacji?

text: Tworzę aplikację z wieloma komponentami, z których wiele pochodzi od osób trzecich, więc wiem tylko, co mogę uzyskać z ich dokumentacji. Od czasu do czasu, przez czysty przypadek, dowiaduję się, że jeden z tych komponentów był dość ciężki i miał opcję buforowania rzeczy. Nie mogę przestać myśleć, że gdybym nie miał szczęścia, jeden z tych komponentów zakończyłby się spadkiem wydajności mojej aplikacji i nie miałbym pojęcia, co robić. Dodałbym więcej sprzętu jak idiota. Jak więc znaleźć tego rodzaju wąskie gardła? Chodzi mi o to, że nie miałbym ładnego raportu mówiącego „ta część jest powolna”, jak to się dzieje z bazą danych. Na przykład dzisiaj odkryłem, że serializator, którego używałem, był ciężki i nie był buforowany. Czy istnieją powtarzalne kroki, które mogłem wykonać, aby odkryć, że serializator spowalnia działanie?


title: Łączenie aplikacji mobilnych z usługą internetową; Jak się nazywa i od czego zacząć?

text: Mam podstawową wiedzę na temat rozwoju iOS i chcę teraz zacząć łączyć moje aplikacje z bazami danych hostowanymi w Internecie, aby użytkownicy mieli dostęp do zdalnych / publicznych danych dotyczących mojej aplikacji. Mój problem polega na tym, że po przeszukaniu internetu w poszukiwaniu rad, zdałem sobie sprawę, że nawet nie wiem, jak nazywa się ten rodzaj programowania? Z mojego przyjrzenia się, że nawet nie wydaje się mieć wspólnego pseudonimu, a to bardzo utrudnia mi znalezienie jakiejkolwiek porady, jak zacząć uczyć się łączenia moich aplikacji z internetową bazą danych. Więc moje pytania brzmią, jak nazywa się ta dyscyplina? Jak mogę zacząć się tego uczyć?


title: Sekcja Asp MVC i częściowe widoki

text: Mam pytanie dotyczące przekrojów ASP i widoków częściowych. Jaka jest korzyść z używania jednego nad drugim? Bo jeśli mam menu, to jestem pewien, że może to być zarówno sekcja, jak i widok częściowy. Więc jaka jest różnica?


title: Tworzenie okna do rysowania pikseli

text: Tworzę fikcyjną architekturę i inne fikcyjne komponenty dla tego komputera/emulatora. Mam problem z wirtualnym wyświetlaczem. Muszę być w stanie utworzyć okno, w którym mój program ma dostęp do wszystkich zawartych w nim pikseli, ma to na celu emulację pamięci wideo / dostępu. Aby uzyskać najlepszą szybkość, myślałem, że najlepszym sposobem na to jest użycie natywnego systemowego API i warunkowej kompilacji do obsługi wielu platform, ale nie wiem, czy jest to najlepsza opcja. Zasadniczo potrzebuję tylko jakiegoś sposobu na stworzenie okna międzyplatformowego, w którym mogę rysować piksele. Piszę w języku D, ale prawie każde rozwiązanie w C można przetłumaczyć na D z połączeniem C. Dzięki za wszelką pomoc.


title: Wcięcie: czy istnieją dowody na to, że 2 czy 4 spacje są bardziej czytelne?

text: W firmie, w której pracuję, staramy się ujednolicić nasze praktyki programistyczne i chcemy wykonać właściwe połączenie dotyczące wcięć. **Czy istnieją jakieś dowody empiryczne (najlepiej artykuły badawcze w HCI lub coś takiego), które pokazują wpływ, jaki białe znaki mogą mieć na czytelność kodu?** Alternatywnie, byłbym zainteresowany badaniem, które ocenia różne style wcięć w kodzie do użytku w środowisku zespołowym, w edytorach, rozdzielczościach ekranu i systemach operacyjnych.


title: Jakie są zalety i wady Node.js?

text: Projektuję aplikację internetową, która jest lokalnie skoncentrowana na obiektach JSON, aby wykonać wszystkie dane (a potem przekażę ją na serwer do synchronizacji w chmurze). Jednak ktoś w odpowiedzi na inne pytanie zasugerował mi użycie Node.js do przesyłania/pobierania danych bezpośrednio sformatowanych jako JSON. Czytałem kilka rzeczy na stronie dewelopera, a oni twierdzą, że to serwer WWW. Jednak nie jestem pewien, czy to tylko serwer danych (co ma dla mnie sens), czy może być zamiennikiem dla Apache (ja bym na nie). Zdaję sobie sprawę, że Twoje odpowiedzi zależą od potrzeb mojej aplikacji, więc podsumowując: _powinna być w stanie wysyłać dane z bazy danych ([No]SQL, zależnie od tego) i synchronizować je z powrotem, kiedy zechcę (albo w w tle lub przez bezpośrednie działanie). Po stronie klienta dane powinny być przechowywane w połowie kroku (przed synchronizacją i po pobraniu materiałów) w formacie JSON. Docelowo w przyszłości powinno być konieczne synchronizowanie wielu kont w tym samym czasie (wiesz, modyfikacje zespołowe, podobnie jak Dokumenty Google itd.)._ A teraz wracając do pytania: **Które są zawodowcami i minusy Node.js?** Jestem prawie pewien, że bezpośrednie użycie obiektów JSON z serwera do klienta i wywołania _pushing_ to całkiem dobre powody, aby wybrać Node.js. Jednak nie jestem pewien, czy bezpieczeństwo (mój kod lub same dane) lub współbieżne połączenia są wystarczająco dojrzałe, czy powinienem wybrać typowego Apache z plikami PHP wysyłającymi zapytania do MySQL, a we wczesnej przyszłości sondować zamiast push ( lub znajdź serwer wypychający). Wiem, że odpowiedź na pytanie może wydawać się łatwa, jeśli jesteś już po jednej stronie (tylko węzeł, węzeł + Apache, tylko Apache), ale obecnie jestem znikąd. Dzięki za odpowiedzi, koledzy.


title: Studia przypadków dla udanych firm zajmujących się tworzeniem oprogramowania opartych na usługach (projektach) bez ciągłych nadgodzin ze strony pracowników

text: Pracuję dla firmy IT, która opiera się głównie na usługach (projektach), a nie na produktach. Wszyscy inżynierowie oprogramowania otrzymują wynagrodzenie. Firma postawiła sobie nowe oczekiwania, że każdy powinien pracować 48 godzin tygodniowo zamiast 40. Pamiętaj, że nie są to sporadyczne nadgodziny z powodu kryzysów. To jest nowe 40. Rozumowanie jest takie, że umożliwia to firmie zapewnianie pracownikom korzyści, takich jak zachęty pieniężne i szkolenia, ponieważ firma jest bardziej dochodowa. więcej przepracowanych godzin = więcej rozliczanych godzin = większy zysk Rozumiem potrzebę opłacalności i okazjonalnego czasu kryzysu i poświęciłem dodatkowe godziny, gdy było to potrzebne i korzystne dla projektu. Jednak jestem również bardzo wrażliwy na równowagę między życiem zawodowym i prywatnym i zgłosiłem swoje obawy dotyczące nowych oczekiwań. Mój pracodawca jest otwarty na inne metody zwiększania rentowności, więc mam nadzieję, że uda nam się odwrócić sytuację, zanim stanie się to okropnym miejscem pracy. W jaki sposób firma usługowa może stać się bardziej dochodowa bez zwiększania liczby godzin oczekiwanych od pracowników etatowych? Czy są jakieś studia przypadków pokazujące wady i zalety konsekwentnej pracy w godzinach nadliczbowych? Czy istnieją jakieś studia przypadków dotyczące udanego modelu biznesowego opartego na usługach (dla firm zajmujących się tworzeniem oprogramowania), który nie wymaga stałych nadgodzin od swoich pracowników?


title: Kontroler kaczek w Pythonie: czy istnieje?

text: Python używa kaczego pisania, zamiast statycznego sprawdzania typu. Ale ostatecznie ma zastosowanie wiele z tych samych obaw: czy obiekt ma pożądane metody i atrybuty? Czy te atrybuty mają prawidłowe wartości mieszczące się w zakresie? Niezależnie od tego, czy piszesz ograniczenia w kodzie, piszesz przypadki testowe, weryfikujesz dane wprowadzone przez użytkownika, czy po prostu debugujesz, nieuchronnie _gdzieś_ będziesz musiał sprawdzić, czy obiekt jest nadal w odpowiednim stanie – czy nadal „wygląda jak kaczka”. " i "kwakacze jak kaczka". W statycznie typowanych językach możesz po prostu zadeklarować „`int x`”, a za każdym razem, gdy tworzysz lub mutujesz `x`, zawsze będzie to prawidłowy `int`. **Wydaje się wykonalne, aby udekorować obiekt Pythona, aby upewnić się, że jest on poprawny pod pewnymi ograniczeniami i że za każdym razem, gdy ten obiekt jest mutowany, jest _nadal_ ważny zgodnie z tymi ograniczeniami.** Idealnie byłaby prosta deklaratywna składnia do wyrażenia „hasattr długość i długość nie są ujemne” (nie tymi słowami. Nie inaczej niż w przypadku walidatorów Rails, ale mniej ludzkiego języka, a więcej języka programowania). Możesz myśleć o tym jako o systemie interfejsu/typów ad-hoc, lub jako o wszechobecnym teście jednostkowym na poziomie obiektu. **Czy istnieje taka biblioteka do deklarowania i walidacji ograniczeń/sprawdzania kaczek na obiektach Pythona?** Czy jest to nierozsądne narzędzie? :) (Dzięki!) * * * Wymyślony przykład: prostokąt = {'długość': 5, 'szerokość': 10} # Żyjemy w fikcyjnym wszechświecie, w którym mnożenie jest bardzo drogie. # Dlatego za każdym razem, gdy mnożymy, musimy buforować wyniki. def area(rect): if 'area' in rect: return rect['area'] rect['area'] = rect['length'] * rect['szerokość'] return rect['obszar'] drukuj obszar( prostokąt) prostokąt['długość'] = 15 obszar wydruku(prostokąt) # porównaj oczekiwany z rzeczywistym wyjściem! # wyobraź sobie to samo z atrybutami obiektów, a nie kluczami słownika.


title: Pomyłka w nazewnictwie weryfikacji

text: Według klasycznego artykułu Martina Fowlera, istnieją dwa rodzaje weryfikacji: weryfikacja stanu i weryfikacja zachowania. Jednocześnie często widuję ludzi mówiących o implementacji vs. weryfikacji zachowań. Myślę więc, że mówimy tutaj o całkiem takich samych rzeczach, a „stan” w pierwszej klasyfikacji to „zachowanie” w drugiej; „zachowanie” w pierwszym równa się „wdrożeniu” w drugim. Nie podoba mi się to, że słowo "zachowanie" pojawia się w obu nazwach, ale po przeciwnych stronach, co powoduje wiele zamieszania. Jakie nazewnictwo wolisz?


title: Ekran telefonu JavaScript

text: W przypadku prostych pytań dotyczących ekranu telefonu zazwyczaj zawsze pytamy o zasady ustalania zakresu. Jest to wyraźnie jeden z największych błędów JavaScript. Spośród wszystkich, których pytamy, prawie wszyscy nalegają, aby w pętli if lub for zmienna obejmowała ten blok, a nie funkcję. Czy to nierozsądne pytanie?


title: układ systemu plików kodu źródłowego dla 2 bardzo podobnych projektów (z git)

text: pracujemy nad „dwiema” aplikacjami na Androida, które są bardzo podobne; w rzeczywistości są to te same aplikacje z inną grafiką i schematami kolorystycznymi, nieco inną konfiguracją i jedną lub dwiema unikalnymi czynnościami, których nie ma w innym projekcie - ale funkcjonalność jest w 95% taka sama. plan polegał na pracy nad jedną aplikacją, aż będzie jak najbardziej kompletna, a następnie na zmianie obrazów i innych plików /res(ource). oczywiście nie jest to takie proste; wciąż pracujemy nad wspólnym kodem, a łatanie tego samego kodu w różnych projektach (lub repozytoriach) jest - moim zdaniem - wykluczone. wszyscy używamy git i eclipse. czy istnieje „ostateczny przewodnik” dotyczący postępowania w takiej sytuacji? moje przemyślenia na ten temat: ### trzy repozytoria rep1 dla unikalnych plików application1, rep2 dla unikalnych plików application2 i rep3 dla plików współdzielonych. jeśli istnieje sposób, aby przesłać pliki z jednego folderu (folder projektu) do różnych repozytoriów ... mam na myśli, że klonowanie rep1 automatycznie pobiera pliki z rep1 ORAZ rep3, a pchanie automatycznie wypycha pliki z powrotem do odpowiedniego rep? moi koledzy z drużyny są podejrzliwi; nikt z nas nie zna dobrze git i boimy się spędzać zbyt dużo czasu na naprawie błędów dcvs. ### 2 repozytoria, jeśli pierwsza opcja nie jest możliwa, planowaliśmy mieć 2 repozytoria. rep1 dla kompletnego app1 i rep2 tylko dla plików specyficznych dla rep2. skrypt kompilacji zastąpiłby pliki z app1 plikami z app2. imo jest to pole minowe "przypadkowe nadpisanie" i nie podoba mi się to. ale tak długo, jak nie mamy lepszego rozwiązania, jest to droga do zrobienia. ### zaćmienie może istnieje jakiś hack specyficzny dla zaćmienia, który sprawi, że będzie to bezbolesne? ### (edytuj) rozgałęzienie!? nie mam doświadczenia z rozgałęzieniem. ale czy to możliwe rozwiązanie? uwaga: są to projekty na Androida; Android wymaga określonego układu plików. np. nazwa i struktura folderu „res” jest prawie ustalona. oznacza to, że istnieją katalogi zawierające pliki zarówno zależne od aplikacji, jak i współdzielone. nie wiem, czy git sobie z tym poradzi.


title: Przechowywanie punktów start/stop w bazie danych

text: Załóżmy, że przechowuję punkty początkowe i końcowe na użytkownika w tabeli bazy danych. Na przykład... powiedzmy, że w systemie czatu użytkownik musi zobaczyć tylko wiersze 24-293 i 500-512. (Powiedzmy, że wylogował się na noc i nie był obecny między liniami 294-499). Zapisanie każdego punktu początkowego i końcowego jako dyskretnego rzędu doprowadziłoby do ogromnego stołu balonowego, co nie jest idealne. Nie szukałbym w tych punktach, więc indeksowanie nie jest konieczne. Jak zapisałbym tego rodzaju informacje w bazie danych? Myślałem o zapisaniu go w JSON: accountID | wiersze 1 | [24 293 500 512] Gdzie każda nieparzysta wartość oznacza początek, a każda parzysta wartość oznacza koniec. Moim jedynym zmartwieniem jest to, że bardzo aktywni użytkownicy będą dołączać do czatu i opuszczać go, i szybko zapełnią wiersz, jeśli `linie` byłyby typu VARCHAR. Może więc „TEKST”, a nawet „DŁUGI TEKST”. Czy podążam ścieżką bólu, czy jest to realna metoda? Z góry dziękuję!


title: Jak osiągnąć poziom zaawansowany w SQL?

text: Myślę, że dobrze rozumiem SQL i większość jego funkcji, ale czasami, gdy robię bardziej zaawansowane Reporting Services, kolega programista pomógł mi w kilku rzeczach i kiedy otwieram niektóre istniejące procedury w T-SQL, rozumiem że muszę się trochę nauczyć. Myślę, że w późniejszych latach bardziej skupiłem się na kodzie aplikacji (głównie C# i javascript) i jakoś moje umiejętności SQL nie są tam, gdzie powinny być. Ponieważ w pracy większość rzeczy jest bardzo skoncentrowana na bazie danych z procedurami, więc myślę, że muszę być lepszy w SQL. Ale kiedy szukam w Google funkcji i przeglądam książki o SQL, wiem najwięcej, ale jakoś stawanie się lepszym w SQL nie jest już takie łatwe. Czy ktoś ma jakieś rady jak zostać zaawansowanym programistą SQL? Jakie książki odebrać? Swoją drogą pracuję wyłącznie z SQL Serverem. Zrobiłem mnóstwo podstawowych procedur z wstawkami, aktualizacjami, zaznaczeniami z łączeniami i grupowaniem według i tak dalej. Ale robiąc większe problemy, zawsze stosowałem bardziej skoncentrowane na aplikacjach podejście z tablicami i kolekcjami, ale czasami (Raportowanie) nie ma wyboru, niż zrobić to w SQL i pracować z tabelami tymczasowymi i tak dalej. Kusi mnie, aby zrobić kursory, ponieważ wtedy mogę przejść przez wszystko, ale to zabija wydajność bazy danych (co powiesz na pętlę przez pół miliona wierszy za pomocą kursora?).


title: Cicha awaria aplikacji opartej na WPF/VB.net 2010

text: Mam aplikację zbudowaną w WPF i VB.net. Działa na kilku komputerach z systemem Windows XP, na których go testowałem, jednak komputer mojego animatora nie wydaje się go lubić. Początkowo program działał do pewnego momentu, w którym program odtwarzał wideo. Ponieważ jednak brakowało jej kodeka do odtwarzania wideo, rzucił wyjątek. Zainstalowaliśmy kodek, a teraz program po cichu zawodzi, bez komunikatu o błędzie lub powiadomienia o awarii. To są wymagania wstępne, które są wymagane. Wszystko to jest zainstalowane na jej komputerze. Załóżmy, że wymagania wstępne dla tych elementów są również zainstalowane. * .NET 4 Framework * SQL Server Compact Edition 2006 * Windows Media Player v. 11 * Kodek Theora DirectShow Na jej komputerze działa system Windows XP Home Edition SP3. Co się dzieje? Jak możemy uruchomić ten program w jej systemie?


title: Czy dzisiejsze języki ogólnego przeznaczenia są na odpowiednim poziomie abstrakcji?

text: Dzisiaj wujek Bob Martin, prawdziwy bohater, pokazał ten film W tym filmie Bob Martin twierdzi, że nasze języki programowania są obecnie na odpowiednim poziomie dla naszych problemów. Jednym z powodów, które czerpię z tego filmu, jest to, że Bob Martin widzi nas jako menedżerów szczegółów, a nasze problemy są na poziomie szczegółowości. Po raz pierwszy nie zgadzam się z Bobem Martinem i zastanawiałem się, co myślą o tym ludzie z programistów. Po pierwsze, jest różnica między MDA i MDE MDA samo w sobie nie zadziałało i winię za dużo formalizacji na poziomie, na którym nie da się sformalizować tego rodzaju problemów. MDE i MDD wciąż próbują się sprawdzić i moim zdaniem są bardzo obiecujące. np. spójrz na MetaEdit W mojej głowie nadal trzeba zarządzać szczegółami, ale robisz to w jednym miejscu (framework lub generatory), a nie w wielu miejscach. Odpowiednie dla naszych problemów ? Myślę, że zależy od tego, na jakie problemy patrzysz. Czy obecne języki programowania nadążają za aktualnymi wymaganiami na czas na rynku? Czy są dobre w wypełnianiu biznesowej luki komunikacyjnej IT? Więc co o tym myślisz ?


title: Po „ukończeniu” wniosku zleconego na zewnątrz/offshoringu, kto zajmie się utrzymaniem?

text: Jaki jest typowy układ konserwacji aplikacji, które nie są opracowywane we własnym zakresie? Uwaga: przez utrzymanie mam na myśli poprawki błędów, optymalizacje, drobne modyfikacje i przyszłe rozszerzenia.


title: Metody bezparametrowe i Empty-Paren w Scala

text: W tej chwili uczę się Scali poprzez programowanie Scali Odersky'ego (2.). Dotarłem do rozdziału 10, w którym zaczyna wprowadzać metody bez parametrów i metody empty-paren. Po prostu nie mogę tego ogarnąć. Jak dotąd rozumiem tylko to, że powinienem używać pustych parenów, jeśli metoda ma efekty uboczne, a w przeciwnym razie metody bez parametrów. Nie wiem jaka jest zaleta tej konwencji. Czytałem posty na Stack Exchange, ale szczerze mówiąc, kiedy posty zaczynają dogłębnie omawiać ten temat, zgubiłem się. Szukam prostego wyjaśnienia, jakie są typowe przypadki użycia tej funkcji języka i jakie są jej zalety, które pomogą mi lepiej ją zrozumieć.


title: Jakie jest Twoje zdanie na temat korzystania z kodu innych osób?

text: Zgodnie z tym pytaniem: postanowiłem zaimplementować specyfikację BitTorrent, aby stworzyć własnego klienta/tracker. Teraz, gdy przeglądałem specyfikację, byłem w 70% gotowy do implementacji BEncoding, kiedy znalazłem link do implementacji BEncoding w C# napisanej przez kogoś innego. Normalnie, gdybym pracował nad kodem produkcyjnym, użyłbym go jako odniesienia do sprawdzenia własnej pracy i podstawy do napisania kilku testów, na których miałbym uruchomić mój kod, ale pomyślałem: „Robię to, to fajny projekt bez terminów; powinienem sam go wdrożyć - mógłbym się wiele nauczyć", ale jakiś głos w mojej głowie mówił: "Po co zawracać sobie głowę wymyślaniem koła od nowa? Weź kod, pracuj tak, aby to był ty jesteś stylem/konwencją nazewnictwa i gotowe." Więc jestem trochę skonfliktowany. Skończyło się na tym, że zrobiłem to drugie i niektóre części uznałem za lepsze niż to, co napisałem, ale prawie czuję się, jakbym „oszukiwał”. Jakie jest twoje zdanie? Czy to oszukuje siebie? Całkowicie normalne? Stracona okazja do samodzielnej nauki? Dobra okazja, by uczyć się na czyimś przykładzie?


title: Czy projekty wykorzystujące frameworki nie są tak dobre jak projekty wykorzystujące czyste programowanie?

text: Jestem programistą Rails od roku (początkowo samoukiem) i jestem w punkcie, w którym chcę się rozwijać. Czytałem książki o tym, jak poprawić jakość mojego kodu w Ruby (czytam Wzorce projektowe i Praktyczne projektowanie zorientowane na obiekt w Ruby). Próbuję poprawić jakość mojego kodu i dodać go do mojego portfolio, ale mam problem z myśleniem o czymś motywującym do zrobienia tylko z Ruby, ponieważ w mojej głowie wydaje mi się, że posiadanie aplikacji Sinatra jest fajniejsze lub bardziej użyteczne (ja myślę o nauce Sinatry) i przeglądarki do interakcji z aplikacją, niż uruchamianie czystej aplikacji ruby przez konsolę z `$ ruby my_app.rb` i każenie jej wypluć trochę informacji. Wiem, że wyniki są bardzo podobne, ale jednak. Moje pytanie brzmi, czy pracodawcy gorzej myślą o projektach wykorzystujących frameworki niż o projektach (Rails, Sinatra itp.), które są budowane od podstaw (tylko sam język programowania)?


title: Czy ponowne używanie bibliotek kodu innych programistów, które mogą wykonywać ogólne zadania, jest złe?

text: Ponowne wykorzystanie dużej ilości pomocnych kodów innych programistów jest dla mnie bardzo kuszące. W szczególności mam na myśli kody, które mogą wykonywać ogólne zadania, takie jak kody warstwy dostępu do danych (DAL). Dopiero zaczynam projekt w nowym, dobrze znanym języku i nie wydaje mi się, żeby było możliwe programowanie od zera. Rozumiem semantykę i wiele innych koncepcji tego języka, po prostu może jestem zbyt leniwy, aby zacząć od nowa i chciałem zagłębić się w zadanie kodowania określonej logiki biznesowej. Więc biorąc pod uwagę, że korzystanie z biblioteki kodów innych osób jest całkowicie legalne, czy złym jest nabycie dużej części czyjejś pracy i wykorzystanie jej jako mojego fundamentu?


title: Włączenie bibliotek do wzorca modułu

text: Niedawno zacząłem używać require.js (wraz z Backbone.js, jQuery i kilkoma innymi bibliotekami JavaScript) i uwielbiam wzorzec modułu (oto ładne streszczenie, jeśli nie znasz: http://www.adequatelygood. com/2010/3/JavaScript-Moduł-Wzór-Dogłębny). Coś, z czym się spotykam, to najlepsze praktyki dotyczące włączania bibliotek, które (po wyjęciu z pudełka) nie obsługują wzorca modułu. Na przykład jQuery bez modyfikacji załaduje się do globalnej zmiennej jQuery i to wszystko. Require.js rozpoznaje to i udostępnia przykładowy projekt do pobrania z (nieco) zmodyfikowaną wersją jQuery do włączenia do projektu require.js. Jest to sprzeczne ze wszystkim, czego kiedykolwiek nauczyłem się o korzystaniu z zewnętrznych bibliotek — nigdy nie modyfikuj źródła. Mogę wymienić mnóstwo powodów. Niezależnie od tego, nie jest to podejście, z którym czuję się komfortowo. Używam podejścia mieszanego — w którym kompiluję/ładuję „tradycyjne” biblioteki JS w „tradycyjny” sposób (dostępne w globalnej przestrzeni nazw), a następnie używam wzorca modułu dla całego kodu mojej aplikacji. Wydaje mi się to w porządku, ale denerwuje mnie, ponieważ jedna z prawdziwych piękności wzorca modułów (bez globalnych) zostaje wypaczona. Czy ktoś jeszcze znalazł lepsze rozwiązanie tego problemu?


title: Clearcase: Znajdź pliki zaewidencjonowane w bieżącym widoku migawki

text: Jeśli korzystałeś już wcześniej z clearcase, to pytanie jest dla Ciebie. Jak określić wszystkie pliki i odpowiadające im zameldowania?, biorąc pod uwagę widok migawki.


title: Jaką architekturę wybrać do tego projektu?

text: Mam projekt. Serwer, który w oparciu o kartę telefoniczną PCI odpowiada za odebrane połączenia telefoniczne od klienta, a następnie przekierowuje połączenia telefoniczne do operatorów. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/bQEMN.png) Zdecydowałem się zakodować serwer przy użyciu języka programowania c++ i frameworka qt, ponieważ interfejs SDK karty PCI pochodzi z c/c++ oraz ze względu na przenośność. Serwer musi wysyłać informacje o kliencie do operatora podczas dzwonienia do operatora, a interfejs użytkownika klienta operatora powinien być oparty na przeglądarce. Teraz kluczowym problemem jest to, w jaki sposób serwer mógłby powiadomić operatora, że jest do niego telefon. Jedną z architektur, którą rozważałem, jest następująca: ![tutaj wprowadź opis obrazu](http://i.stack.imgur.com/9PdY5.png) Klient przeglądarki operatora używa ajax, łącząc serwer sieciowy, aby sprawdzić, czy istnieje wywołanie do Klient; serwer sieciowy łączy serwer bazy danych w celu sprawdzenia, czy jest połączenie; serwer desktop (c++) czeka na połączenia telefoniczne i ustawia informacje w bazie danych. Inne operacje, takie jak rozłączenie rozmowy telefonicznej od klienta, przekierowanie rozmowy telefonicznej do innego operatora, również wykorzystują tę architekturę. W takim razie, czy istnieje inny sposób niż połączenie serwera (kod js `setInterval('getDail', 1000)`) w celu decydowania o wywołaniu operatora? Czy ta architektura jest wykonalna, czy powinienem użyć wspaniałych technik, które znam, takich jak usługi sieciowe, xml-rpc, mydło? * * * Caller center jest dla 8~300 operatorów i operatorzy nie są rozdzieleni geograficznie. Co więcej, doszedłem do wniosku, że potrzebujemy interfejsu dla programisty klienta, więc to jest tzw. middleware? Następnie kilka nowych pytań, jak możemy udostępnić interfejs klientowi, COM? Z góry dziękuję.


title: Analiza wydajności programów C++

text: Jak mogę zmierzyć wydajność moich programów C++ przy użyciu C++? Konkretne dane, które chcę zmierzyć, to: * Używana pamięć ( **spacja** ) * Czas trwania ( **czas** )


title: Jakiego przepływu pracy używasz podczas tworzenia formularzy internetowych asp.net i działu projektowego?

text: Pracuję w miejscu, w którym wyraźnie oddzielono projektantów od programistów. Jesteśmy dość nowym start-upem i staramy się ustalić, jaki byłby najlepszy przepływ pracy dla naszego zespołu. Jesteśmy małą firmą zatrudniającą w sumie około 11 pracowników, z których trzech to projektanci (zajmują się HTML, CSS, niektóre jQuery) i trzech programistów pracujących głównie z formularzami sieci Web ASP.NET. Jestem jednym z programistów i nie mam talentu do projektowania, ale jestem wystarczająco wygodny w CSS i jquery/Javascript, aby zrozumieć mechanikę i tak dalej. Tak więc obecnie czekamy, aż projektanci dostarczą nam strukturę HTML pomieszaną wraz z dołączeniami po stronie serwera, js, jquery, css itp. Zazwyczaj staramy się obejść ich rzeczy i niechętnie staramy się zachować mniej więcej taką samą strukturę z konsekwencją zmuszania nas do posiadania wielu hacków do pracy z nim. Tak, oznacza to używanie ich dołączeń po stronie serwera w połączeniu z naszymi stronami .aspx, między innymi, które wydają się być sprzeczne z ogólnym przepływem formularzy internetowych asp.net. Zdarzało się, że zmieniałem dołączenia w kontrolkę użytkownika i umieszczałem ich wspólny kod HTML na stronach wzorcowych itp. Po wszystkim za tym nastąpiło wiele szczekania ze strony zespołu projektowego. Ich głównym zarzutem jest to, że strony wzorcowe i kontrolki użytkownika utrudniają im utrzymanie witryny. Widzę ich punkt widzenia i nie podobałoby mi się to, gdyby ludzie mieszali się z moim przepływem pracy, co chyba robię z nimi. Kilka razy próbowałem podejść do nich w sprawie przeniesienia struktury witryny, która uzupełnia środowisko formularzy internetowych asp.net, z którym pracują programiści, ale za każdym razem, gdy pojawia się temat pracy ze stronami wzorcowymi, zespół projektowy wpada w złość. Nasze obecne podejście po prostu zmusza nas do zebrania wielu hacków i obejścia tak, aby pasowały do ich projektu i szczerze mówiąc, staje się to frustrujące i po prostu dodaje więcej niepotrzebnego zaangażowania technicznego do naszych projektów. Moje pytanie brzmi po prostu: jaki przepływ pracy działa najlepiej dla Ciebie i Twojego zespołu projektowego? Czy projektanci wiedzą, jak korzystać ze stron wzorcowych itp. Czy nierozsądne jest, aby projektanci rozumieli mechanikę działania stron wzorcowych i kontrolek użytkownika oraz ogólnie, w jaki sposób ASP.NET składa stronę? (Nie wydaje mi się, żeby to było nierozsądne oczekiwanie od nich...) Więc, co myślicie?


title: Przykład aplikacji JavaScript używającej niezmiennych struktur danych?

text: JavaScript jest funkcjonalny, ale nie w ścisłym tego słowa znaczeniu. Nie opiera się na niezmiennych danych i funkcjach wolnych od efektów ubocznych. Istnieje kilka bibliotek, które zapewniają niezmienne struktury danych, więc uważam, że powinno być możliwe napisanie bardziej ściśle funkcjonalnego programu przy użyciu JavaScript. Wiem, że ClojureScript istnieje, ale nie interesuje mnie transkompilacja. Czy są jakieś projekty open source, które używają JavaScript w bardziej ściśle funkcjonalnym sensie, z wyłącznie niezmiennymi danymi? Interesuje mnie, czy jest to praktyczne w języku, który nie jest zbudowany z myślą o tym.


title: W jakim stopniu klasa Automata miałaby zastosowanie do rozwoju zawodowego?

text: Czy warto byłoby przejąć Automatę zamiast baz danych lub sieci, zakładając brak natychmiastowych planów na studia magisterskie z informatyki? Zakładałbym, że nauczyłbym się tam rzeczy, które w jakiś sposób byłyby prawdziwe w zastosowaniu, jak teoria złożoności, ale czy bardziej przydatne jest zaraz po szkole, czy lepiej zrobić kurs gdzieś po maturze i zająć coś bardziej oczywistego, co można zastosować w jego miejsce? Zostały mi ograniczone sloty, w przeciwnym razie wziąłbym je wszystkie.


title: Jak zaplanować i rozpocząć projekt?

text: Za każdym razem, gdy zaczynam projekt, w kluczowych momentach decyduję się na całkowitą zmianę podstawowych klas i wpadam w niejasne błędy. Staram się planować z wyprzedzeniem i zwykle zaczynam na dobrej stopie, ale potem idę do tego następnego dnia i postanawiam, że chciałbym to zrobić „w inny sposób”. Czy istnieje swego rodzaju standard podczas rozpoczynania projektu, taki jak mapowanie klas i rozpoczynanie testów jednostkowych? Jaka jest dobra konwencja przy planowaniu i rozpoczynaniu średniego projektu. Ostatnim projektem i rozpoczętym był symulator ruchu pocisku - wiem, przewidywalny.


title: Czy przycinanie kodu jest związane z zaciemnianiem kodu?

text: Z moich badań wynika, że wiele pakietów zaciemniających/optymalizujących zawiera funkcję o nazwie **przycinanie**, w której oprogramowanie usuwa martwy kod podczas przetwarzania. Następujące pakiety zawierają zarówno funkcję zaciemniania, jak i przycinania kodu (by wymienić tylko kilka): * RedGate SmartAssembly (.NET) * Preemtive Dotfuscator (.NET) * Inquartos Obfuscator (.NET) * ProGuard (Java) Widzę wspólny wątek że obie operacje wymagają skanowania i analizy złożenia, ale jestem ciekaw, czy te dwie funkcje są, a nawet mogą być fundamentalnie powiązane. Powodem, dla którego pytam, jest to, że rozważamy wyłączenie przycinania kodu w naszym środowisku (niezwiązany problem), ale obawiamy się, że może to potencjalnie zmniejszyć skuteczność procesu zaciemniania, a tym samym mniej chronić naszą Własność Intelektualną. Czy i jak przycinanie kodu może wpływać na zaciemnianie kodu?