title: Odczytywanie określonego typu danych wejściowych z pliku

text: Mam oprogramowanie, które odczytuje z pliku. Każdy obiekt w oprogramowaniu zajmuje 7 wejść, mianowicie. `string string string float string float int` Mam plik wejściowy. Zawiera szereg wartości wejściowych. Jeśli dane wejściowe dla jednego obiektu są takie: `hss cscf "serving cscf" 32.5 ims 112.134 124` (Uwaga: gdy zmienna obiektu wymaga ciągu wielowyrazowego, użyłem "....", dla ciągu jednowyrazowego, jest to bez cudzysłowów ) Jak mogę to przeczytać za pomocą ifstream? (Przeszukałem google, ale nie znalazłem.) Próbowałem przeczytać całą linię za pomocą getline, ale znowu utknąłem, gdy przyszło dowiedzieć się, czy jest to jedno słowo, czy wiele słów! Pomyślałem, że przeczytam linię, a następnie wyszukam znak po znaku. Jeśli to '"', wiem, że to słowo multi. Ale utknąłem, jeśli chodzi o liczbę całkowitą lub zmiennoprzecinkową. W przypadku `char` możesz użyć `if(line[i]>='a'&&line[i]< = „z”)”, ale jak postępować, gdy następną wartością jest liczba całkowita lub liczba zmiennoprzecinkowa? Proszę podać kilka sugestii na ten temat.


title: Jaki język programowania generuje najmniej trudnych do znalezienia błędów?

text: Jaki język, Twoim zdaniem, pozwala przeciętnemu programiście na generowanie funkcji z najmniejszą ilością trudnych do znalezienia błędów? To oczywiście bardzo szerokie pytanie, a mnie interesują bardzo szerokie i ogólne odpowiedzi i mądrości. Osobiście uważam, że spędzam bardzo mało czasu na szukaniu dziwnych błędów w programach Java i C#, podczas gdy kod C++ ma swój odrębny zestaw powtarzających się błędów, a Python/podobny ma swój własny zestaw typowych i głupich błędów, które zostałyby wykryte przez kompilator w innych językach. Trudno mi też rozważać języki funkcjonalne pod tym względem, ponieważ nigdy nie widziałem dużego i złożonego programu napisanego w całkowicie funkcjonalnym kodzie. Twój wkład proszę. Edycja: _Całkowicie arbitralne wyjaśnienie trudnego do znalezienia błędu: Odtworzenie zajmuje więcej niż 15 minut lub ponad 1 godzinę, aby znaleźć przyczynę i naprawić._ Wybaczcie, jeśli jest to duplikat, ale nie znalazłem niczego w ten konkretny temat.


title: Wyjaśnij Babci przetwarzanie w chmurze

text: Technicznie rozumiem, czym jest cloud computing, ale mam trudności z wyjaśnieniem tego laikowi. Zastanawiam się, czy są jakieś dobre przykłady, które mogłyby to łatwo wyjaśnić.


title: Czy istnieją jakieś odpowiedniki FizzBuzz w rozmowie telefonicznej?

text: Myślę, że FizzBuzz to dobre pytanie, które można zadać podczas osobistej rozmowy kwalifikacyjnej z tablicą lub podręcznym długopisem i papierem, aby ustalić, czy dany kandydat ma minimalne kompetencje. Jednak nie działa to tak dobrze na rozmowach telefonicznych, ponieważ każde pisanie, które słyszysz, może równie dobrze być wyszukiwaniem odpowiedzi przez kandydata (nie wspominając o tym, że odczytywanie kodu przez telefon jest mniej niż pikantne). **Czy są jakieś pytania _phone-interview_, które są równoważne z FizzBuzz w tym sensie, że niekompetentny programista nie będzie w stanie poprawnie na nie odpowiedzieć, a programista o przynajmniej minimalnych kompetencjach to zrobi?** Mając wybór, w moim konkretnym przypadku Jestem ciekawy rozwiązań .NET-centric, ale ponieważ nie udało mi się znaleźć duplikatu tego pytania na podstawie pobieżnego wyszukiwania, nie miałbym nic przeciwko, gdyby to pytanie stało się kanonicznym źródłem pytań fizzbuzz dotyczących telefonów niezależnych od platformy.


title: Dobry problem z kodowaniem do wykorzystania podczas rozmowy kwalifikacyjnej

text: Czytałem wiele różnych artykułów o tym, jak znaleźć dobrych programistów, w tym rzeczy Joela Spolsky'ego i Steve'a Yegge'a. Ogólnie uważam, że mamy całkiem niezły proces rozmowy kwalifikacyjnej. Zadajemy dobre pytania i mamy problem z testem kodowania, który dajemy kandydatom, aby pomóc w selekcji osób, które nie potrafią kodować; ten problem zajmuje trochę czasu i jest „zabraniem do domu”, w którym kandydat ma kilka dni na zwrot rozwiązania. Ogólnie rzecz biorąc, ten proces działał u nas całkiem dobrze, ale wciąż od czasu do czasu trafiamy na niewypał na froncie programistycznym. Co najmniej w jednym przypadku podejrzewam teraz, że zaproponowane rozwiązanie nie było własnym kandydatem, ale nie byłoby sposobu, aby to udowodnić; ani nie miałoby to znaczenia jako takie. Żyjemy w środowisku, w którym gdy ktoś zostaje zatrudniony, niezwykle trudno jest mu odejść, więc tym bardziej krytyczne jest, że otrzymujemy dobrego kandydata. Chciałbym więc dodać **ćwiczenie z kodowania** do rzeczywistej rozmowy kwalifikacyjnej i poprosić kandydata o wypracowanie rozwiązania w **środowisku w stylu parowania** z istniejącym członkiem zespołu. Szukam czegoś, co nie jest strasznie skomplikowane; coś, co każdy **kompetentny programista może rozwiązać w około godzinę** , ale także coś nieco trudniejszego niż problem fizz-buzz. * * * Przyjrzałem się następującym pytaniom oraz innym podobnym pytaniom, ale większość z nich jest nieco inna, ponieważ nie dotyczą konkretnych problemów, które mogłyby zmieścić się w ramach ograniczeń czasowych i dobrze pasują do parowania, lub nie mam Naprawdę widziałem dobre odpowiedzi. Kod podczas rozmowy kwalifikacyjnej Ulubione pytanie do rozmowy kwalifikacyjnej Namiętny programista? Fizz Buzz, naprawdę? I wiele innych...


title: Jak uchronić się przed pozwami patentowymi?

text: Miałem już kilka pomysłów na oprogramowanie, które prawdopodobnie mogłyby zostać opatentowane (postanowiłem jednak nie realizować żadnego z nich). Zasadniczo nie chcę jednak, aby te pomysły zostały opatentowane. Nie obchodzi mnie, czy ktoś inny je zaimplementuje, po prostu nie chcę być później pozwany przez jakiegoś patentowego trolla, który opatentował pomysł, który miałem i wdrożył 5 lat temu. Czy opublikowanie swojego pomysłu na publicznych stronach internetowych i użycie techniki patentowej biednego człowieka zapewniłoby, że nawet jeśli ktoś inny opatentuje Twój pomysł, będziesz miał ochronę przed pozwem i ewentualnie możliwość unieważnienia jego patentu? (zakładając, że ustawa o reformie nie przejdzie )


title: Projektowanie komponentów: uzyskanie właściwej spójności

text: Obecnie mam zestaw komponentów o nazwie DataValues, ValueParsers, ValueFormatters i ValueValidators. Pierwsza definiuje abstrakcyjną klasę bazową DataValue i zawiera cały ładunek implementacji. Każdy z trzech pozostałych komponentów definiuje interfejs podobny do swojej nazwy (bez „s”), a także zawiera kilka ich implementacji. Te 3 zależą od DataValues. Nie ma dalszych zależności. Innymi słowy, każdy składnik zawiera obecnie całą hierarchię dziedziczenia. Niedawno obejrzałem EP16 Roberta C. Martina „Clean Coders”, gdzie wskazuje, że jest to jeden z najczęstszych błędów popełnianych przy projektowaniu opakowań. To uświadomiło mi, że dokładnie tak dzieje się w przypadku opisanych tutaj pakietów. Powstaje zatem pytanie, jak najlepiej ulepszyć obecny projekt komponentów. Na szczęście żaden z tych komponentów nie doczekał się jeszcze swojego pierwszego wydania, więc nadal można wszystko przesuwać, a granice wciąż można zdefiniować na nowo. Wydania dla nich są jednak na horyzoncie, więc lepiej to teraz. To, o czym myślę teraz, to utworzenie nowego składnika, który będzie zawierał wspomnianą klasę abstrakcyjną i interfejsy dla wszystkich tych składników. Zawierałby również wyjątki tych komponentów i być może kilka trywialnych implementacji interfejsów. Ten nowy składnik byłby wtedy potrzebny wszystkim obecnym i wszystkim, którzy potrzebują obecnych. Z drugiej strony, w tej późniejszej kategorii będzie wiele komponentów, które mogą po prostu zależeć od nowych i pozbyć się ich obecnej zależności od znacznie bardziej konkretnych i niestabilnych elementów zawierających wszystkie implementacje interfejsu. Jest to świetne dla zasady stabilnych zależności i równie dobre dla zasady równoważności wydania ponownego użycia. Radzi sobie jednak raczej źle, jeśli chodzi o wspólne zasady zamykania i ponownego wykorzystywania. Konkretnie oznacza to, że komponenty, które potrzebują interfejsu ValueParsers, ale nie dbają o ValueValidators, nadal będą od niego zależne, ponieważ znajdują się w tym samym pakiecie. Mogą w ten sposób zostać dotknięte tym bez ważnego powodu. Z drugiej strony, biorąc pod uwagę, jak abstrakcyjny/stabilny jest ten nowy komponent, tak naprawdę nie widzę, aby powodowało to wiele problemów. Szukam pomysłów, jak lepiej narysować granice komponentów i wątpliwości lub sugestii dotyczących opisanej przeze mnie alternatywy.


title: Jak radzić sobie z ludźmi, którzy nie chcą dzielić się wiedzą?

text: > **Możliwy duplikat:** > Jak radzisz sobie ze zbieraczem informacji? Często w zespołach IT wiedza to potęga. Jest to w porządku, o ile wiedza (informatyczna) jest jednakowo dostępna dla wszystkich członków zespołu, a wiedza specjalistyczna firmy jest dobrze udokumentowana. Czasami pracownicy działu IT gromadzą ogromną ilość know-how, _bez__ udokumentowania tego. W ten sposób uważają, że zapewniają sobie pozycję. Często ci ludzie lubią, gdy ludzie muszą ich zapytać, jak wykonywać pracę. Jak skłonić tych programistów, administratorów baz danych lub innych pracowników IT do **_DOCUMENT_** ich pracy i udostępnienia jej firmie, w której pracują? EDIT: To ulga, że tak wielu z was _zna_ tego typu osoby. Że to nie ja wpadam na nie wszędzie, gdzie realizuję projekty. Z drugiej strony jest mi smutno, tacy utalentowani ludzie, ale pod wieloma względami zachowujący się jak dziecko. Widziałem zachowanie u mężczyzn i kobiet przy okazji. Trudno wybrać jedną odpowiedź jako najlepszą i zaakceptować. Zrobi po więcej ponownej lekturze.


title: Wzory architektoniczne do gry

text: Mam więc rozwiązanie, które zawiera kilka dużych projektów, które próbuję podzielić na mniejsze projekty z bardziej odizolowanymi obowiązkami. To jest gra, przy której majstruję - jestem głównie programistą LOB i myślę, że zasady są uniwersalne, więc mam nadzieję, że czegoś się tutaj nauczę. Zależności w niektórych obiektach są trochę zbyt ciasno ze sobą powiązane i mam nadzieję na pomoc, jak je rozplątać. A może jakiś wzór lub abstrakcja, które sprawią, że będą łatwiejsze w zarządzaniu. **Ares.Core.World** zawiera klasy takie jak Creatures, Items itp. Wszystkie dziedziczą po Entity, która jest świadoma, w której komórce na mapie istnieje. Osiąga to, przechowując odwołanie do Ares.Core.UI.MapControls.MapCell... I widać, że przewody już się przecinają. **Ares.Core.UI.MapControls** zawiera Map i MapCell, z których każda zawiera listy stworzeń i przedmiotów, które zawierają. MapCell dziedziczy również po Ares.Core.World.Entity, ponieważ to bardzo elegancko rozwiązało kilka wczesnych problemów - na przykład wszystkie Entities mają ekwipunek. Chciałbym znaleźć sposób na podzielenie interfejsu użytkownika i świata na osobne projekty ( **Ares.World** i **Ares.UI** ), ponieważ interfejs użytkownika i nadrzędny świat powinny być prawdopodobnie osobnymi problemami. Ale jak widać, teraz te dwa projekty musiałyby odwoływać się do siebie nawzajem, a odwołania cykliczne nie są dozwolone. Zastanawiam się, czy istnieją jakieś wzorce architektoniczne, które mogłyby pomóc w tej sytuacji. Dziękuję!


title: Zaległych zadań o niewielkich rozmiarach równolegle z zaległościami funkcji „głównych”?

text: Po ponad dwóch latach pracy w silnie zintensyfikowanej strukturze działu rozwoju „samotnego wilka”, wdrażamy Agile SCRUM. Świetny. Lubię Agile; jako programista utrzymuje cię w skupieniu, zajęciu i produktywności bez konieczności wpychania ci projektu po projekcie do gardła z oczekiwaniem, że wszystkie zostaną zrobione wczoraj. Jest jednak jeden aspekt przejścia na SCRUM w porównaniu z naszym obecnym „modelem”, który moim zdaniem nie spodoba się ludziom spoza Developmentu w najmniejszym stopniu. To jest ich obecna zdolność do zmuszania nas do wprowadzania drobnych zmian „na czas oczekiwania”. Duża część naszego rozwoju jest przeznaczona wyłącznie do użytku wewnętrznego, a większość z nas znajduje się w tym samym budynku. Tak więc od lat powszechną praktyką jest, że kierownik działu lub menedżer w innym miejscu przychodzi do „właściciela bazy kodu” konkretnej aplikacji i prosi o drobne rzeczy (czasami nie tak małe, ale jesteśmy całkiem nieźli, jeśli chodzi o nie podejmowanie trzech… tygodniowe projekty oparte na tych „drive-bys”). Nawet nasz szef czasami przekazuje w ten sposób rzeczy, które mu się przywodzą. Bardzo często, jeśli pracujemy w danym momencie w bazie kodu, możemy po prostu wyświetlić plik źródłowy, wprowadzić zmianę i uruchomić ją, patrząc przez ramię, aby sprawdzić, czy zmiana jest tym, czego chcą, przed sprawdzeniem go do Subversion w celu włączenia do następnej kompilacji. Dzięki podstawowej metodologii Agile SCRUM te poprawki byłyby rejestrowane jako defekty (nie spełniliśmy wymagań określonych w poprzednio używanej historii) lub nowe małe historie (spełniliśmy wszystkie podane wymagania, ale te wymagania były niekompletne, niejasne lub nieprawidłowe lub zmieniły się po dostarczeniu, gdy użytkownicy zobaczyli nowe funkcje). Tak czy inaczej, zdecydowana większość byłaby co najwyżej jednopunktowa, jeśli nie zerami, i miałaby stosunkowo niski priorytet (system nadaje się do użytku w jego obecnym stanie, ale byłby _o wiele fajniejszy, gdyby...), co sprawia, że jest mało prawdopodobne wprowadzony do sprintu podczas pracy z zaległościami z góry na dół. Ta możliwość została podniesiona na spotkaniu deweloperów jako źródło aktywnego sprzeciwu wobec naszego procesu Agile przez inne działy, które postrzegałyby go jako mniej „zwinny” niż nasza obecna zdolność do wprowadzania drobnych poprawek na żądanie. To ważna sprawa IMO; interesariusze stojący za PO nie zawsze są zgodni co do tego, co jest najważniejsze, ponieważ nie wszyscy mają ten sam punkt widzenia, ale zazwyczaj to tylko menedżerowie podejmują ostateczną decyzję, a zatem ich nastawienie jest tym, które pokazuje w backlogu produktu. Zaproponowano wówczas rozwiązanie, które zostało wstępnie nazwane „słoikiem z cukierkami” (innym wyrzuconym terminem był „sosownica”). Drobne poprawki, o które proszą „mali faceci” z różnych działów, które nie są defektami w istniejącej historii, które są szacowane na podstawie konsensusu lub aklamacji w zespole na mniej niż pół dnia programisty, a to zajęłoby natychmiastowy, znaczący, pozytywny wpływ na doświadczenie użytkownika w opinii użytkownika końcowego, są umieszczane na liście równolegle do pierwotnego backlogu. Zostaną one zidentyfikowane jako „historie”, ale będą trzymane oddzielnie od głównych zaległości „dużych” historii podlegających priorytetyzacji. Jeśli w dowolnym momencie normalnego postępu sprintu zdarzy się, że pracujemy w obszarze systemu, w którym można wprowadzić jedną z tych poprawek, co sprawia, że zmiana jest trywialna, możemy wprowadzić tę poprawkę do sprintu i ją zakodować obok większej historii. Robienie tego _nie może_ narażać na szwank ukończenia większej historii lub jakiejkolwiek innej zaangażowanej pracy. Operatorzy zamówień również mieliby dostęp do tej listy, a gdyby pracowali nad nadchodzącą historyjką użytkownika dotykającą podstawowej funkcji związanej z ulepszeniem, mogliby złożyć ją do historii jako wymaganie, a następnie spełnilibyśmy to wymaganie, tak jakbyśmy zrobili to. inny. To, jak sądzono, sprawiłoby, że poprawki będą bardziej prawdopodobne, że zostaną wprowadzone wcześniej niż później. To wywołało reakcję wśród tych z nas, którzy trenowali ScrumMastera „uh-uh”. Zaległości są _jeden_. Dwa zaległości wprowadzają pytanie, która pozycja #1 jest _naprawdę_ najważniejsza, które pozycje na liście determinują _rzeczywistą_ prędkość i do którego z dwóch zaległości faktycznie należy historia (każda granica rozmiaru/złożoności będzie miała kilka przypadków, które wypadną względnie dowolnie po jednej lub drugiej stronie). „Niech proces działa”, powiedzieliśmy; jeśli zmiana naprawdę jest znacząca dla użytkowników końcowych, zrobią wystarczająco dużo hałasu, aby szefowie działów podjęli decyzje dotyczące czasu / pieniędzy na pokładzie, a to wpadnie w świadomość zespołu programistów na szczyt zaległości. Pomyślałem, że zadam pytanie na podłodze: **Czy twoim zdaniem równoległa lista „wielkości kęsa” ma wartość w uzyskiwaniu małych, użytecznych, ale ostatecznie o niskim priorytecie zmian dokonywanych szybciej, czy też ogólnie jest to lepszą decyzję o złożeniu ich do głównego backlogu i pozwolić, aby podstawowy proces regulował ich włączenie do sprintu?**


title: Wykonywanie lokalizacji każdego sprintu

text: Nasz produkt musi obsługiwać 5 języków. Oznacza to, że aby mieć produkt, który potencjalnie można wysłać, musimy przetłumaczyć cały nowy tekst w Sprincie na wszystkie te języki. Dla mnie nie ma to sensu, ponieważ tekst może się zmienić po kilku Sprintach, podczas których użytkownicy będą korzystać z aplikacji i udzielać informacji zwrotnej. Tak więc płacenie firmie tłumaczeniowej za tłumaczenie tekstu, który najprawdopodobniej ulegnie zmianie, nie wydaje się mądrą decyzją. Co więc robisz z lokalizacją w Scrumie?


title: Czy jednorazowi współtwórcy powinni być wymienieni jako autorzy?

text: Czy podczas pracy nad projektami open source jednorazowy współtwórca (mam na myśli pojedynczy lub pomniejszy zestaw poprawek, nic, co można by uznać za znaczący wkład) powinien być wymieniony jako autor? czy po prostu powinny zostać wymienione w, powiedzmy, sekcji z podziękowaniami? Jeśli wniesiesz małą łatkę do projektu, gdzie chcesz się znaleźć?


title: Dlaczego implementacja listy połączonej jest uważana za liniową?

text: Zazwyczaj pamięć komputera jest zawsze liniowa. Czy zatem termin nieliniowy jest używany dla struktury danych w sensie logicznym? Jeśli tak, aby logicznie osiągnąć nieliniowość w liniowej pamięci komputera, używamy wskaźników. Czy to prawda? W takim przypadku, jeśli wskaźniki są wirtualnymi implementacjami do osiągnięcia nieliniowości, dlaczego struktura danych, taka jak lista połączona, miałaby być uważana za liniową, jeśli w rzeczywistości węzły nigdy fizycznie nie sąsiadują?


title: Czy często używasz kodu, którego nie rozumiesz?

text: Ostatnio pracuję nad projektem, który wykorzystuje dość rozbudowany framework zbudowany przez kogoś innego. Ramy można swobodnie wykorzystywać komercyjnie i prywatnie, tak jak ktokolwiek uzna to za stosowne, więc nie ma prawnych powodów, aby z nich nie korzystać. Czuję się jednak nieswojo z powodu tego, że tworzę projekty i przesyłam je bez pełnego zrozumienia wszystkiego, co składa się na projekt. Cały szkielet projektu jest budowany przez kogoś innego i nie miałem czasu, aby przez to wszystko przejść, a to, przez co przeszedłem, jest nieco mylące. Jestem z natury osobą (ugruntowaną), więc budowanie czegoś z innego projektu denerwuje mnie, ale czy jest to powszechna praktyka, nawet jeśli nie do końca rozumiesz, jak i dlaczego działa kod, którego używasz? ? Zastanawiam się głównie, czy używanie kodu innych ludzi jest powszechną praktyką, gdy: * Nie masz czasu, aby przejść przez ten kod, aby w pełni zrozumieć, co robi, ale wiesz, że to działa (poprzez testy i inne recenzje) * Ty przesyłasz projekt oparty na wspomnianym kodzie, ale miałeś kontakt tylko z górną warstwą, którą sam napisałeś.


title: Co oznacza ten czas trwania zgłaszany przez ffmpeg?

text: Kiedy uruchamiam ffmpeg na pliku mp4, wyświetlany jest czas trwania: 00:03:57.54 Jaką jednostkę reprezentuje `54`? Interpretuję to jako 0,0054 sekundy (54 milisekundy).


title: Czy moje umiejętności komunikacyjne zostaną zmarnowane w karierze inżyniera oprogramowania?

text: Jestem na arenie inżynierii finansowej (po BA Math i BA Computer Science) od około 5 lat (20% analiza/programowanie, 80% komunikacja) i jestem dumny z mojej umiejętności komunikowania się z ludźmi i omawiania problemów technicznych (tj. interakcji z zespołem). Uwielbiam tę część mojej pracy. Przejście do tablicy, aby narysować abstrakcyjne pomysły i przeprowadzić burzę mózgów. Jednak z wielu powodów chcę przenieść swoją karierę do firmy technologicznej (inżynieria oprogramowania), ale bardzo się boję, że wpadnę w stereotypową pracę programistyczną, w której programiści kodują z dużymi słuchawkami. Na pewno wiem, że to tylko stereotyp, ale widziałem już wcześniej podobne środowiska (w startupach) i przeraża mnie myśl, że migruję do kariery w izolacji. Uwielbiam kodować i myśleć algorytmicznie, ale nie chcę rezygnować z interakcji z ludźmi. Rozumiem, że posiadanie umiejętności komunikacyjnych jest tylko pozytywem, ale czy narażam się na niepowodzenie w karierze poprzez przejście do inżynierii oprogramowania. Chętnie wysłucham wyjaśnień i/lub porad.


title: Język programowania, który nie pozwala na IO. Haskell nie jest czystym językiem

text: Czy istnieją już jakieś w 100% czyste języki (jak opisuję w poście Stack Overflow), a jeśli tak, to czy można ich użyć do robienia rzeczy? czyli czy mają implementację? Nie szukam surowej matematyki na papierze / czystego rachunku lambda. Jednak czysty rachunek lambda z dołączonym kompilatorem lub systemem wykonawczym jest czymś, o czym chciałbym usłyszeć.


title: Rozwijasz się z myślą o lokalizacji?

text: Czy pracując nad projektem oprogramowania lub stroną internetową tworzysz z myślą o lokalizacji? Mam tu na myśli m.in. * Eksternalizacja wszystkich ciągów, w tym komunikatów o błędach. * Nie używaj obrazów zawierających tekst. * Projektowanie interfejsu użytkownika z myślą o rozszerzaniu tekstu. * Używanie pseudotłumaczenia do testowania interfejsu użytkownika na wczesnym etapie procesu. * itp. Czy projekty, nad którymi pracujesz, należą do kategorii „miło mieć” i pozwól zespołowi lokalizacyjnemu zająć się resztą, czy też masz gotowość lokalizacyjną wbudowaną w proces rozwoju? Interesuje mnie, jak deweloperzy ogólnie postrzegają lokalizację.


title: Jakich języków programowania nauczyłeś swoje dzieci?

text: Z zawodu jestem programistą C#, ale w trakcie mojej edukacji i kariery miałem kontakt z wieloma językami (w tym Java, C++ i wieloma językami skryptowymi). Ponieważ koduję w świecie MS do pracy, najbardziej znam ich stos, więc byłem podekscytowany, gdy ogłoszono Small Basic. Natychmiast zacząłem uczyć mojego najstarszego programowania, ale poczułem, że czegoś brakuje w tym doświadczeniu. Możliwość sprawdzenia każdego polecenia za pomocą intellisense IDE wydawała się brać coś z doświadczenia. Jasne, było to łatwe do zrozumienia, ale pomyślałem, że może być trochę więcej wyzwania. Szukam czegoś lepszego i chciałbym poznać Twoje doświadczenia z uczeniem dzieci programowania w wybranym przez Ciebie języku. Co Ci się podobało, a co nie? Jak szybko go podnieśli? Czy zostali zakwestionowani? Sfrustrowany? Dziękuję Ci bardzo!


title: Uwierzytelnianie użytkowników w aplikacji Single Page?

text: Opracowałem prototyp aplikacji jednostronicowej, która używa Backbone na interfejsie i będzie zużywać z cienkiego interfejsu API RESTful na serwerze dla swoich danych. Pochodząc z ciężkiego tworzenia aplikacji po stronie serwera (php i python), naprawdę podobało mi się nowe podejście do projektowania z grubym MVC po stronie klienta, ale nie wiem, jak najlepiej ograniczyć aplikację do uwierzytelnionych użytkowników, którzy się logują. samej aplikacji za logowaniem i chciałby ewentualnie wprowadzić inne rodzaje logowania (openid, fb connect itp.) oprócz natywnego logowania do witryny. Nie jestem pewien, jak to się robi i szukałem - ale nie udało mi się znaleźć informacji, które wyjaśniły mi to. Ogólnie rzecz biorąc, jaka jest obecnie najlepsza praktyka w zakresie rejestrowania użytkowników i wymagania od nich logowania się w celu korzystania z aplikacji jednostronicowej? W jaki sposób uwierzytelniane są żądania interfejsu API po zalogowaniu użytkownika? Czy mogę przechowywać sesję, ale jak ją wykryć w wywołaniach API? Wszelkie odpowiedzi na to byłyby bardzo mile widziane!


title: Czy jQuery zabił dyskusje o JavaScript?

text: Istnieje ponad 100 000 pytań dotyczących przepełnienia stosu oznaczonych jako pytania dotyczące rozwiązywania problemów/użytkowania JQuery. Porównaj to do 124 000 pytań dotyczących przepełnienia stosu, które są oznaczone jako problemy z JavaScriptem. Jesteśmy bardzo blisko prawie połowy wszystkich pytań związanych z JavaScriptem w Stack Overflow, które są przypisywane do JQuery (plus lub minus dowolny margines dla kilku innych frameworków JS, które otrzymują pytania na SO). Chodzi mi o to, że jQuery nie jest językiem i nie jest wszystkim i nie kończy wszystkich frameworków, które muszą być stosowane w każdym scenariuszu, w którym obecny jest JavaScript, a jednak szybko się łapie (i przewiduję, że wkrótce zaćmi ) JavaScript jako źródło dyskusji/zapytania na stronach takich jak Stack Overflow. Czy jQuery zabija gwiazdę JavaScript? Czy kolejne pokolenie twórców stron internetowych nie ma już silnego zrozumienia mocy, prostoty i wykorzystania JavaScript jako środka do manipulacji DOM? Czy to tylko naturalna ewolucja rzeczy i punkt widzenia, który przedstawiam, typowy dla ego kodera (tj. czy tak programiści asemblerowi widzą tłum .NET/Java/Web?), czy to naprawdę początek końca prawdziwy programista JavaScript?


title: Jakieś pomysły na dobry sposób na zamianę tekstu na mowę w HTML?

text: Prowadzimy e-learning online bez korzystania z narzędzi innych firm, takich jak Adobe Captivate / eLearning suite, i byłoby wspaniale (jakoś) uzyskać trochę zamiany tekstu na mowę. Czy jest jakiś sposób, aby to działało za darmo (lub bardzo tanio, niektóre plany są po prostu śmieszne, takie jak http://www.acapela-group.com/text-to-speech- interactive-demo.html) Najlepiej co musimy, aby użytkownik wybrał swój język, chociaż chętnie zacznie od samego angielskiego, a następnie po prostu zacznij czytać HTML na stronie.. A może po prostu szczekam tutaj niewłaściwe drzewo, jeśli ludzie POTRZEBUJĄ TTS, po prostu byliby używając własnego oprogramowania lub oprogramowania z systemem operacyjnym... prawda? Edycja: wymaganiem jest, aby treść była trochę bardziej angażująca. Ponadto pomaga niektórym osobom, które są wolnymi czytelnikami. Powodem, dla którego myślałem o TTS nad profesjonalnym Voice Over, jest to, że powinno być łatwiejsze do wdrożenia? Posiadanie VO połączonego z każdym „fragmentem” tekstu będzie wymagało wycięcia setek plików MP3, a następnie zaprogramowania w tym celu platformy e-learningowej. Posiadanie zautomatyzowanego systemu TTS powinno być do tego łatwiejsze, zwłaszcza jeśli jest on w wielu językach. Myślę jednak, że musi to być profesjonalny VO. dzięki za twoje przemyślenia/wkłady


title: Silverlight - modułowość. Najlepszy sposób na fizyczne rozdzielenie plików binarnych?

text: Pracujemy nad aplikacją LoB z dużą ilością treści. Pobieranie XAP będzie dość duże, jak sądzę, za jednorazowe pobranie. Planuję rozbić rozwiązanie na osobne projekty. Nie wiem dlaczego - ale NIE lubię wielu projektów w rozwiązaniu. IMO to niezbyt dobry pomysł. Nawet gdy pracowaliśmy jako duży zespół – przy wielu projektach było to bolesne. Nawet teraz, gdy używam MEF/PRISM - nadal będą pewne podstawowe zależności, takie jak: 1. Biblioteki PRISM 2. Interfejsy 3. Nawigacja 4. Powłoka/Bootstrapper 5. Style aplikacji 6. Konwertery/polecenia/walidatory 7. itd. , A potem będę miał moduły, które będą wykorzystywać wszystkie te rzeczy CORE. Moduły będą miały w sobie następujące elementy: 1. Po stronie klienta RIA Services 2. ViewModel's 3. Widoki Te moduły będą ładowane na żądanie za pomocą MEF. Myślę, że pod względem rozmiaru wszystkie te moduły będą większe niż moduł podstawowy z powodu dużej ilości logiki w nich. Spodziewam się mieć około 5-6 modułów i CORE. Myślę, że da mi to rozsądną liczbę projektów po stronie klienta i bibliotek/XAPS oraz będzie to rozwiązanie do zarządzania. Czy widzisz jakiś problem z taką awarią? Niektóre filmy online stworzą 7+ projektów z modułu CORE. Jaki jest sens? Myślę, że to zwiększa złożoność. Następnie pokazują 3-4 DLL z modułu. Jeden dla widoków, jeden dla modeli widoków i tak dalej. Nadal muszą być załadowane razem, więc dlaczego? Szukam nakazów i zakazów od was, którzy przez to przeszliście. Dziękuję!


title: Czy Android to język czy framework/platforma?

text: Wiem, że Android używa języka Java z ograniczonym pakietem Java SDK i że Google twierdzi, że nie jest to Java. Ale czy można powiedzieć, że Android jest językiem programowania? Czy może bardziej słusznie powiedzieć, że Android jest frameworkiem w Javie? Czy oba są prawdziwe?


title: Pracujesz w firmie, która w ogóle nie komentuje swojego kodu?

text: Pracuję dla małej firmy zajmującej się tworzeniem oprogramowania (10~ programistów, kilku menedżerów produktów i kilku pracowników wsparcia), która sprzedaje różne produkty i usługi organizacjom międzynarodowym za pośrednictwem resellerów. Przyjechałem do pracy 7 miesięcy temu w roli otwartej przez programistę, który odszedł po 3 latach. Firma może istnieje od 10 lat. Zasadniczo mają około 30+ oddzielnych produktów (w 30 oddzielnych rozwiązaniach .NET, które mogą składać się z 10+ projektów w ramach każdego z tych rozwiązań). Każdy projekt lub rozwiązanie oceniłbym na średni lub duży rozmiar. **W każdym projekcie nie ma absolutnie żadnych komentarzy do kodu źródłowego**. Nie ma również diagramów architektury ani dokumentacji opisującej, jak zaprojektowano aplikację lub jak kod się zawiesza. Istnieje dokumentacja typu analizy biznesowej (przypadek użycia) dotycząca tego, jak program powinien działać, kiedy został utworzony po raz pierwszy, ale to wszystko. Jako nowa osoba w firmie przez ostatnie 7 miesięcy byłem rzucany w różne projekty i musiałem naprawiać błędy w tych różnych produktach. Z wykształcenia jestem informatykiem i być może jestem na poziomie średnio-senior w programowaniu HTML5/PHP/web, a także junior-intermediate w programowaniu .NET. Zrekrutowali mnie do moich umiejętności tworzenia stron internetowych i chcieli rozwijać moje umiejętności .NET. Zgodziłem się, ponieważ płaciło to więcej niż moja stara praca w PHP i pomyślałem, że przydałoby się dla mojej kariery i większej liczby opcji pracy, aby mieć trochę więcej zaplecza programistycznego .NET. Jednak każdego dnia czuję się tak, jakbym brnął na głębokim końcu i stąpał po wodzie. Na początek, aby cokolwiek zrobić, czytanie kodu jest w większości bezcelowe, ponieważ nie masz punktu odniesienia, od którego zacząć lub znaleźć lub naprawić błąd w tym nowym projekcie, który właśnie zostałeś przydzielony. W końcu rozmawiam z jednym z innych starszych programistów, aby dowiedzieć się, od czego zacząć. Mówiąc o seniorach, mam na myśli, że są tam od 4 lat i mają ogólne pojęcie o tym, jak dany program może działać. Nawet nie napisali większości oprogramowania, wiele z nich zostało napisanych przez kilku starszych facetów, którzy odeszli na emeryturę i opuścili firmę. Sam kod jest moim zdaniem bardzo złożony. Może to tylko dlatego, że nie znam się na .NET, ale wydaje się, że jest wiele niepotrzebnych warstw złożoności. Możesz mieć swoje podstawowe 3 warstwy dla MVC. Następnie ten, kto napisał aplikację, dodał więcej warstw kodu do projektu, być może w celu ustrukturyzowania aplikacji. Na przykład kontroler frontowy wywołuje kilka klas, które ładują aplikację, następnie wywołuje kontroler, następnie metoda może wywołać model, następnie ten model wywołuje warstwę biznesową, następnie wywołuje warstwę logiki biznesowej, a następnie wywołuje dane warstwa danych, a następnie warstwa danych wywołuje usługę, która ma więcej klas do wywoływania procedur składowanych i pobierania danych z bazy danych. Jest to dalekie od mojego doświadczenia w PHP, które nawet w złożonych aplikacjach internetowych nadal byłoby tak proste, jak kontroler frontowy wywołujący kontroler, który wywołuje model, model pobiera dane z bazy danych i renderuje je do widoku/strony internetowej. Chodzi mi o to, jakie korzyści dodają te wszystkie dodatkowe warstwy? Inna sprawa, że może istnieć klasa, wtedy tworzą interfejs tylko dla tej klasy. Żadne inne klasy nie używają tego interfejsu ani nie dziedziczą z niego. Po prostu tworzą interfejs dla każdej klasy. O ile widzę, nie ma też testów jednostkowych z wykorzystaniem interfejsów. Jestem pewien, że dla starszego programisty, który to napisał, musiało to mieć sens, ale straciłem dla mnie znaczenie. Inną rzeczą, którą lubią robić, jest to, że nie mają wielu programistów w domu, piszą specyfikacje/dokumentację dla systemu, który chcą, a następnie zlecają opracowanie projektu innej firmie. Następnie, gdy jest skończony, przynoszą go z powrotem do domu, aby lokalni deweloperzy go konserwowali. Jedną z firm, której zlecili to na zewnątrz, była lokalna firma świadcząca usługi rozwojowe, ale ta z kolei zleciła prace rozwojowe do jakiegoś rozwijającego się kraju. Teraz wracam tutaj, utrzymując ich bazę kodu i nie ma też żadnych komentarzy. Sam program jest prawdopodobnie wielkości, powiedzmy, Photoshopa. Istnieje dosłownie wiele warstw złożoności, a duże części kodu są komentowane fragmentami. Dlaczego jest skomentowany? Czy myślą, że użyją tego kodu w przyszłości? Brak pomysłu. Nikt inny też nie wie. Ludzie, którzy pracowali nad tym w firmie outsourcingowej, odeszli z tej firmy i zniknęli. Na początku, kiedy dołączyłem do firmy, czytałem jakiś zawiły kod projektu i dodałem kilka komentarzy do kodu, aby później móc to zrozumieć, gdybym musiał wrócić do projektu. Kilka dni później przyszedł jeden z starszych programistów i zadał mi kilka pytań dotyczących tego projektu. Odkryłem, że to, co próbował rozgryźć, było w rzeczywistości tym, do czego doszedłem niedawno. Napisałem w kodzie komentarz wyjaśniający, co to zrobił i pokazałem mu. Potem natychmiast usunął komentarz, nie czytając go, przewinął kod i zadał mi kolejne pytanie. Potem powiedziałem, cóż, można to wyjaśnić w komentarzu poniżej, który właśnie usunąłeś. Wraca i cofa usunięcie, a następnie czyta komentarz... i wreszcie rozumie. Zapytałem go, dlaczego żaden kod nie zawiera żadnych komentarzy, a jego uzasadnieniem było to, że komentarze stają się nieaktualne i stają się bezcelowe. No tak, komentarze powinny być utrzymywane wraz z kodem. Aktualizujesz kod, jednocześnie aktualizujesz komentarz. Uzasadnieniem kierownika ds. rozwoju dla braku komentarzy było to, że dobry kod powinien być zrozumiały bez komentarzy. OK, więc mają te niezwykle skomplikowane systemy i jedynymi ludźmi, którzy mają pojęcie o tym, jak one działają, są ludzie, którzy byli tam na początku lub pracowali nad nimi od wielu lat. Zasadniczo, jeśli ci ludzie odejdą, to moim zdaniem praktycznie zrujnuje firmę, ponieważ żaden nowicjusz nie zrozumie podstawy kodu i nie będzie w stanie go utrzymać. Kiedy dostaję prośbę o zrobienie czegoś tam, na przykład dodanie nowej funkcji do systemu, myślę, że prawdopodobnie mógłbym ją wybić w HTML5/jQuery/PHP w ciągu kilku dni bez problemu. W tej firmie muszę najpierw rozgryźć system, potem zrozumieć, jak działa kod bez komentarzy, potem dowiedzieć się, gdzie umieścić mój kod, a potem go zakodować. Dni zamieniają się w tygodnie. To jak szukanie igły w stogu siana. Moją filozofią jest zaprojektowanie i zakodowanie czegoś dobrze za pierwszym razem, w najprostszy możliwy sposób, aby wykonać zadanie, jednocześnie sprawiając, że kod jest łatwy w utrzymaniu i zrozumiały, więc jeśli nowa osoba będzie musiała go podnieść, może po prostu zacząć z tym od razu . Ale wydaje się to bardzo sprzeczne z tym, co robi ta firma. Więc moje pytania: * **Czy komentowanie kodu nie jest powszechną praktyką w branży oprogramowania?** * **Dlaczego jest tak duża niechęć do komentowania kodu?** * **Jak mogę dobrze wykonywać swoją pracę w tym środowisku? ** * **Czy powinienem polecić im rozpoczęcie komentowania swojego kodu, czy zostawić go w tym celu?**


title: Komentowanie aplikacji MVC

text: Niedawno zdałem sobie sprawę, że moje miejsce pracy nie komentuje ich aplikacji ASP.NET MVC. Mówiąc „nie dokumentuje”, mam na myśli prawdopodobnie jedną linię komentarza na model/widok/kontroler. Brak celu pliku, daty utworzenia itp. Wymówką jest to, że MVC powinien być samodokumentujący, z chudymi kontrolerami, samodokumentującym się kodem widoku itp. Jest to dobre wyjaśnienie, ale kilka rzeczy wpływa na to stwierdzenie: * Wdrażane są również technologie Javascript obok kodu widoku bez dokumentacji co do ich integracji (kod javascript również jest nieudokumentowany) * Istnieje wiele baz danych i dostawców obsługujących treści wewnętrzne i zewnętrzne (nieudokumentowane) * Codziennie programiści regularnie się mylą, co dokładnie się dzieje dowolny konkretny moduł. Posprzątanie zajmuje około 3-4 minut czasu współpracownika. Czy ta praktyka komentowania jest leniwa i na pewno przysporzy więcej problemów, niż jest to warte? Czy po prostu nie jestem wystarczająco biegły w czytaniu kodu samodokumentującego? Na marginesie, czy aplikacje MVC powinny być mniej sztywne w swoich standardach komentowania, skoro oddzielenie problemów powinno sprawić, że kod będzie oczywisty?


title: Kod samodokumentujący vs. Skomentowany kod

text: Przeszukałem, ale nie znalazłem tego, czego szukałem. Jeśli to pytanie zostało już zadane, proszę o link. Na początku tego miesiąca powstał ten post: http://net.tutsplus.com/tutorials/php/why-youre-a-bad-php-programmer/ Podsumowując, jesteś złym programistą, jeśli nie t pisać komentarze. Moja osobista opinia jest taka, że kod powinien być opisowy i przeważnie nie wymaga komentarza, chyba że kod nie może być samoopisujący. W podanym przykładzie // Pobierz rozszerzenie z nazwy pliku obrazu $pieces = explode('.', $image_name); $rozszerzenie = array_pop($części); Autor powiedział, że ten kod powinien otrzymać komentarz, moja osobista opinia jest taka, że kod powinien być wywołaniem funkcji, która jest opisowa: $extension = GetFileExtension($image_filename); Jednak w komentarzach ktoś faktycznie podał właśnie taką sugestię: http://net.tutsplus.com/tutorials/php/why-youre-a-bad-php-programmer/comment-page-2/#comment-357130 Autor odpowiedział mówiąc, że komentator był „jedną z tych osób”, czyli złym programistą. Jakie są opinie wszystkich innych na temat kodu samoopisującego a kodu komentującego?


title: /*Komentować lub nie komentować...*/

text: > **Możliwe duplikaty:** > Kod samodokumentujący vs. Kod z komentarzami > > „Komentarze to zapach kodu” > > Najlepsze praktyki w pisaniu komentarzy i dokumentacji Czy komentowanie kodu jest przydatne, czy tylko strata czasu? Wydaje się to takie trywialne, ale brałem udział w kilku dość gorących dyskusjach na ten temat, jak również jest to od dawna punkt sporny między moimi własnymi uczonymi filozofiami a filozofiami naszego lokalnego uniwersytetu. Po przeczytaniu „Clean Code” Boba Martina rzuciłem „samo-komentujący kod” kool-aid, a następnie zmierzyłem się ze wszystkim, czego uczono mnie na studiach w zakresie komentowania mojego kodu. Czy ktoś uważa, że dokładne komentowanie kodu jest dobre do czegokolwiek innego niż obowiązkowe spełnienie standardów kodowania twojej grupy deweloperskiej? Jestem bardzo ciekawa, jak wszyscy zdają się na to z obu stron. :)


title: XML i rejestr

text: Która metoda jest uważana za najlepszą praktykę przy ustawianiu pamięci dla aplikacji: XML czy Rejestr? Jakie są zalety/wady korzystania z któregokolwiek z nich?


title: czy f# wyrażenia obliczeniowe są formą programowania aspektowego?

text: czy monady, a dokładniej wyrażenia obliczeniowe f#, są formą programowania aspektowego? Aktualizacja: konstruktory przepływu pracy f# mają metody inne niż powiązanie i jednostka. Mają haki na wiele słów kluczowych. zobacz Tworzenie nowego typu wyrażenia obliczeniowego.


title: Zablokowane witryny w pracy (które nawet nie są złe)

text: Więc ostatnio używam Google do wyszukiwania informacji o zasadniczo przypadkowych programach (właśnie zostałem zatrudniony mniej więcej miesiąc temu). Więc ostatnio szukałem informacji o RAW_SOCKETS (ale to nie ma sensu) W każdym razie niektóre strony z samouczkami/wyjaśniające, jak z nich korzystać i wyjaśniające strony z protokołami są w rzeczywistości zablokowane. (a nasz menedżer wysłał e-mail z informacją, że jeśli wpadniesz na stronę, po prostu napisz do niej na wszelki wypadek). Teraz oczywiście… administratorzy sys prawdopodobnie widzą te „zablokowane” witryny w swoich raportach. Ale czy powinienem się martwić? Mam na myśli....Dosłownie nie próbuję być przebiegły. Po prostu próbuję się czegoś nauczyć. Wydaje mi się, że strony programistyczne są czasami określane jako „hacking”. czasami blogi są tak oznaczone, ale często blogi zawierają PRZYDATNE informacje. Podobno zdarza się to wielu moim innym współpracownikom i nawet nie zadają sobie trudu, aby wysłać e-mail do naszego kierownika… ale czy powinienem się martwić? A może zdarzyło ci się to już wcześniej?


title: Wysyłanie „prośby o komentarz” podczas ustanawiania nowej wytycznej

text: Czy wysyłasz „prośbę o komentarz” podczas ustanawiania nowej wytycznej lub standardu firmy? Firmy muszą ustanowić spójne wytyczne dotyczące takich rzeczy, jak proces rozwoju, kontrola wersji, procedury wydawania, itp. Czy warto starać się o informację zwrotną przed opublikowaniem ostatecznych wytycznych? Na co musisz uważać? W niektórych przypadkach, na przykład gdy masz doświadczonych inżynierów, którzy mogą sporządzić wytyczne, lub gdy wytyczne mogą być z czasem korygowane, myślę, że odpowiedź może brzmieć „Nie”. Korzyści * Rozwiąż narożne przypadki lub niejasności przed publikacją * Lepsza akceptacja/przyjęcie, ponieważ zaangażowane były osoby, które będą korzystać z wytycznych Wady * Zabiera czas * Może nie uzyskać przydatnych informacji zwrotnych


title: Kto płaci za krzywą uczenia się?

text: Dla tych z nas, którzy konsultują się z ustawieniami sali operacyjnej, gdzie rozliczasz swoje godziny, jaki jest konsensus w tej sprawie? Czy klient powinien zostać obciążony opłatą za określoną część krzywej uczenia się? Czy Twój pracodawca powinien płacić za koszty ogólne? Czy to Ty sam jesteś programistą? A może połączenie wszystkich 3? Jestem skonfliktowany – słyszałem, że mówiono to w obie strony – że klient (lub budżet projektu) nie powinien uwzględniać nieefektywności mniej doświadczonego programisty. I znowu słyszałem, jak mówiono, że ludzie uczą się w pracy, więc projekty powinny obejmować określoną kwotę budżetu szkoleniowego. Zwykle stwierdzam, że ja (i inni deweloperzy, z którymi pracuję) pracuję po godzinach lub w weekendy, czytając o technologii, wzorcach projektowych itp., Czasami zmagam się z małym kawałkiem, który może wykraczać poza budżety awaryjne - więc większość projektów, nad którymi pracujemy, podejmuje trochę więcej naszego nierozliczonego czasu niż zaplanowano. Pomyślałem, że otworzę go na umysł ula wymiany stosów, aby uzyskać więcej informacji od osób z dużo większym doświadczeniem. Zamierzam opublikować to samo pytanie na stosie zarządzania projektami i przyjrzeć się delcie.


title: Jak radzić sobie z Liderem Projektu, który w żaden sposób nie angażuje się w projekt?

text: Nasz oddział jest małą jednostką zajmującą się wyłącznie rozwojem offshore (nie więcej niż 25 członków), ale realizujemy wiele projektów. Naszym głównym celem jest rozwój. Deweloperzy są pogrupowani w ramach Project Leaderów, a oni z kolei podlegają Kierownikowi Projektu. Utknąłem z najbardziej kultowym Liderem Projektu. Nasz zespół ma 4 programistów pod jednym facetem i zajmujemy się 4 projektami. Niektóre z jego cech to: * Nie wnosi niczego podczas projektowania/kodowania * Nie wykonuje żadnych zadań kierowniczych (takich jak dostęp do serwerów w trybie tylko do odczytu, zainstalowanie oprogramowania, wypełnianie formularzy itp.) * Nie wykonuje żadnych prac koordynacyjnych (takich jak udzielanie instrukcji zespołowi QA odnośnie wymagań, koordynacja z zespołem oprogramowania pośredniczącego w celu wdrożenia, itp.) * Nie odpowiada na e-maile klientów, po prostu przesyła je z powrotem do nas. W przypadku, gdy odpowiada, psuje sprawy, ponieważ nie jest zbyt długo zaangażowany w projekty * Nie uczestniczy w połączeniach konferencyjnych. Nawet w rzadkim przypadku, kiedy to robi, nie ma nic do wniesienia * Nie rozwiązuje żadnego problemu (nawet nie dba o to, aby zobaczyć logi) pod nieobecność programisty * PROWADZĄ handel akcjami / badania od rana do wieczora * CZY angażuje się w sukces przyjęcia/zaproszenia do naszych projektów * WYMAGA oceny 1 dla siebie Ogólnie rzecz biorąc, jego tytuł to „Lider Projektu”, ale w ogóle nie jest zaangażowany w projekt. My, programiści, robimy wszystko, łącznie z pełnym przygotowaniem projektu, rozwojem, koordynacją i działaniami pomocniczymi. On też dość głośno o tym mówi. Mówi, że nie jest to jego obowiązkiem, a jego pełną egzystencją jest wykonywanie pracy od innych. Mogę się z tym zgodzić, ale jako programista moja praca polega na rozwijaniu i dostarczaniu (cholera mamy tyle pracy programistycznej), ale nie mogę jednocześnie wspierać i koordynować, siedząc w rozmowach telefonicznych i wewnętrznych czatach oraz wysyłanie/otrzymywanie e-maili. Powiedziałem mu wyraźnie, że „zajmę się kodowaniem, ty wspierasz”, ale on po prostu powiedział, że nie. Właściwie podczas naszego ostatniego spotkania przy podejmowaniu decyzji o nowym projekcie - powiedział wprost "Upewnij się, że nie jest ode mnie zależny". Co mogę powiedzieć? Jest w firmie zbyt długo, prawie wszyscy, którzy do niego dołączyli, są w znacznie wyższych rangach. Niedawno otrzymał tę promocję właśnie z powodu tego jednego faktu. Kierownik Projektu też bardzo dobrze wie, ale jest nową osobą i boi się występować przeciwko „weteranowi”. Próbowałem wielu rzeczy, jak próba rozmowy z nim na ten temat („Ja koduję, ty wspierasz”), rozmawianie z premierem, zachwalanie go w e-mailach itp. Ale on nie szturcha. Nie jestem wystarczająco niski, aby zgłosić to wyższej kadrze zarządzającej w USA - ale i tak nie zrozumieją, co się tutaj dzieje. Ze względu na jego umiejętności „komunikacyjne” robią na nim duże wrażenie. Co ja robię? Jakieś pułapki, które mogę zastawić? Edycja: Więcej informacji: Mój wzrost jest ograniczony do jego. Tylko jeśli zostanie menedżerem i zrobi jakąś drogę, mogę zapełnić jego miejsce i zostać Liderem. Ale cały problem polega na tym, że zadowala go siedzenie bez żadnych aspiracji, podczas gdy my ambitnie wykonujemy całą jego pracę, nie dostając niczego w zamian.


title: Czy jest to implementacja wzorca obietnicy?

text: Piszę bibliotekę w C++ (wykorzystując wiele funkcji C++11), która (o ile wiem) implementuje wzorzec obietnicy. Biblioteka składa się z klasy, która wykonuje asynchroniczne żądania sieciowe. Gdy użytkownik tej klasy wywołuje metodę, która wysyła żądanie sieciowe, zwracana jest instancja innej klasy (nazwiemy ją „klasą obietnicy”), która udostępnia metody anulowania żądania. Ponieważ ta aplikacja korzysta z frameworka Qt, klasa obietnicy emituje również sygnały, gdy zachodzą pewne zdarzenia, z których jednym jest pomyślne zakończenie żądania. Ponieważ wynik żądania sieciowego jest często dołączany, gdy sygnał jest emitowany, uważam, że ta klasa implementuje wzorzec obietnicy. Zgodnie z artykułem w Wikipedii: > „W informatyce terminy przyszłość, obietnica i opóźnienie odnoszą się do konstrukcji używanych > do synchronizacji w niektórych współbieżnych językach programowania. Opisują obiekt >, który **działa jako proxy dla wyniku**, który jest początkowo nieznany, > zwykle dlatego, że obliczenie jego wartości jest jeszcze niekompletne." > > * podkreślenie moje Czy coś przegapiłem? Czy moja klasa rzeczywiście implementuje wzór obietnicy?


title: Interpretowanie formatów dat

text: Załóżmy, że mam kontrolkę „DatePicker” i pozwalam moim klientom z USA wpisać w niej coś w rodzaju „1/1” i nacisnąć kartę, aby przejść do następnej kontrolki. Więc przeanalizuję dla nich tę datę jako „01/01/2014” i kilka innych podobnych wzorców. Ale wszystkie mają siedzibę w USA, więc są to „MM/dd/rrrr”. Teraz moje pytanie dotyczy innych formatów? Co, jeśli chcę obsługiwać format kraju, taki jak `"rrrr/mm/dd"` . Jak te kraje interpretują takie wzorce?


title: Jak mogę sprawdzić własny kod?

text: Pracuję nad projektem solo i muszę utrzymywać własny kod. Zwykle przegląd kodu nie jest wykonywany przez autora kodu, więc recenzent może spojrzeć na kod świeżym okiem — ja jednak nie mam takiego luksusu. Jakie praktyki mogę zastosować, aby skuteczniej przeglądać własny kod?


title: Czy to dobra czy zła praktyka dostarczanie oddzielnych klas dla obiektu: jedna do budowania, a druga do używania?

text: Załóżmy, że piszę kod C++ do wizualizacji obiektów "Foo". Mam dwa sposoby na uzyskanie „Foo”: obliczenie go z danych lub zebranie kawałków wstępnie obliczonego „Foo” i zbudowanie nowego „Foo”. Teraz po obliczeniu „Foo” gwarantuje się, że będzie dobre do wizualizacji, ale zmiana go może złamać to założenie. Dlatego zdecydowałem się reprezentować "Foos" w moim kodzie przez klasę `Foo`, która nie ma metod mutujących: po skonstruowaniu i zainicjowaniu nie zmienia się. Ale jest drugi sposób na zrobienie „Foo”: zbuduj go z wstępnie obliczonych komponentów „Foo”. Wymyśliłem kilka metod budowania `Foo` z wcześniej obliczonych danych: ## Metoda 1: Konstruktor/Metody statyczne Być może najbardziej oczywistą metodą byłoby dodanie nowego konstruktora lub metody statycznej do `Foo`, nazwij to `fromPrecomputed`, który odczytałby komponenty wstępnie obliczonego Foo i utworzył nowy obiekt `Foo`, sprawdzając, czy jest poprawny. Aby wyjaśnić, dlaczego chciałbym się od tego uniknąć, muszę skomplikować mój przykład: powiedzmy, że jednym ze składników „Foo” jest zbiór „Bars”. Teraz, jeśli chodzi o implementację, czasami "Bar" jest reprezentowany jako `std::vector<std::vector<Bar>>`, czasem jako `tablica Bar[][2]`, czasem jako `std ::vector<std::pair<Bar,Bar> >` i tak dalej... Mogę sprawić, by użytkownik przeorganizował swoje dane do standardowej postaci i miał jeden konstruktor dla tego standardu, ale może to wymagać od użytkownika wykonać dodatkową kopię. Nie chcę dostarczać statycznej metody dla każdego formatu: `readPrecomputedFormatA`, `readPrecomputedFormatB` i tak dalej: to zaśmieca API. ## Metoda 2: Zmieniaj `Foo` Jeśli ujawniłem metodę `addBar(Bar)` `Foo`, mógłbym pozwolić użytkownikowi na iterację po zbiorze "Bars" na swój własny sposób. To jednak sprawia, że `Foo` jest zmienny. Mógłbym więc obliczyć `Foo`, które ma sens dla wizualizacji, a następnie użyć `addBar`, aby dodać `Bar`, który sprawi, że `Foo` nie będzie już ''Foo''. Niedobrze. ## Metoda 3: Stwórz klasę „builder” przyjaciela Tworzę klasę o nazwie `FooBuilder`, która ma ujawnioną metodę `addBar(Bar)`. Robię `FooBuilder` przyjaciela `Foo` i dodaję do `Foo` konstruktor, który przyjmuje `FooBuilder`. Po wywołaniu tego konstruktora sprawdza, czy `FooBuilder` zawiera prawidłowy obiekt „Foo”, a następnie zamienia swoją pustą reprezentację Foo na to, co znajduje się w `FooBuilder`. Wszyscy są szczęśliwi. Jedynym „bałaganem” w metodzie nr 3 jest to, że wymaga przyjaźni, ale myślę, że warto zachować hermetyzację. Ale to skłoniło mnie do myślenia: czy to ustalony wzorzec? A może istnieje inny, lepszy sposób na zrobienie tego, o którym nie wiem?


title: Programowanie PHP bez MVC, klas lub frameworka: przepisać lub kontynuować nowe funkcje?

text: Zajmuję się programowaniem od kilku lat i wtedy (ucząc się PHP) nie uczyłem się programować za pomocą klas, MVC-logic ani żadnych frameworków. Bardzo dobrze rozwiązywałem swoje problemy, korzystając z własnych funkcji. Osiem miesięcy temu zostałem zwerbowany do start-upu, by stworzyć ogromną platformę społecznościową. Pracuję tam od kilku miesięcy i zbudowałem ogromną stronę internetową z różnymi skomplikowanymi funkcjami (przypuszczam, że +35 tys. linii kodu) i mogłem zobaczyć, jak kontynuuję w ten sposób. Wszystko jest kodowane bez żadnych frameworków, bez klas czy z MVC-logiką, ponieważ nie miałem czasu się tego nauczyć (musieliśmy działać szybko). Piszę wszystko w funkcjach i wkładam dużo wysiłku w dobre udokumentowanie/opisanie mojego kodu oraz uporządkowanie go w piękny i łatwy do odczytania. Jednak _jest_ na szczycie mojej listy, aby nauczyć się Classes> MVC> Laravel (lub dowolnego innego) frameworka. Ale po prostu nie widzę, żebym się teraz zatrzymywał, uczył powyższej listy, a potem przepisał cały kod. To po prostu cofnęłoby nas w czasie, a na starcie poruszamy się szybko i mamy wiele terminów na nowe funkcje/pomysły/rozwoju. Rozmawiałem na ten temat z wieloma ludźmi i ludzie mówią wiele różnych rzeczy. Niektórzy mówią, że to kwestia gustu, a ty będziesz w stanie to kontynuować. Inni mówią, że to niewiarygodnie głupie, nie da się skalować, nigdy nie dostaniesz poważnych funduszy, jesteś jedyną osobą, która kiedykolwiek może pracować nad projektem, powinieneś przestać i zacząć się uczyć teraz, itp. Czy jestem skazany na zagładę ? Czuję się zagubiony. Moja osobista opinia na ten temat jest taka, że chociaż jest to już ogromny system, nadal jest MVP i myślę, że w pewnym momencie w przyszłości i tak napisalibyśmy kod od nowa. To znaczy, jeśli jesteśmy na tak udanym etapie naszego przedsięwzięcia i bardzo szybko się rozwijamy / zdobywamy finansowanie / itp.


title: Trzymanie zmiennych danych w jednym miejscu

text: Biorąc pod uwagę właściwość **mutable**, zazwyczaj sensowne jest _przechowywanie/przechowywanie tej właściwości tylko w jednym miejscu_. Gdy dane muszą się zmienić, wystarczy zaktualizować tylko jedno pole i można całkowicie uniknąć błędów, w których różne pola nie są zsynchronizowane. Niezwykle prostym przykładem może być: „Właściwe” podejście: class Owner { String name; } klasa Pies { Właściciel Właściciel; String getOwnersName() { return właściciel.nazwa; } } „Niewłaściwe” podejście: class Właściciel { String name; } klasa Pies { Właściciel Właściciel; Nazwa właściciela ciągu; String getOwnersName() { return nazwawłaściciela; } } Doświadczenie nauczyło mnie, że bardzo rzadko dobrym pomysłem jest złamanie tej zasady. Ryzyko wprowadzenia błędów i zwiększony wysiłek wymagany do zrozumienia kodu prawie zawsze przewyższają wszelkie korzyści. Moje pytanie brzmi, czy istnieje nazwa dla tej zasady/zasady? Dodatkowe punkty za linki do artykułów/blogów/itd. które jasno przemawiają za tym argumentem. Podwójne punkty bonusowe za kontrargumenty!


title: Czy innowacyjne języki programowania są zbyt niebezpieczne?

text: To pytanie jest wynikiem pytania Którego języka programowania naprawdę nienawidzisz? gdzie, jak można się spodziewać, wymieniono wszystkie najpopularniejsze języki. Większość z 15 najlepszych to niezwykle popularne języki programowania. Jeden komentarz przedstawia **haXe** jako alternatywę dla ActionScript, języka, który może być skierowany do Flash, PHP, JavaScript lub aplikacji natywnych. Inną podobną alternatywą dla JavaScript jest GWT. Rok temu pracowałem w firmie, która zdecydowała się na zastosowanie GWT w naszym następnym produkcie. To nie poszło tak dobrze, jak się spodziewano, ponieważ GWT tak naprawdę nie wystartowało. Niewiele jest przykładów najlepszych praktyk, ograniczone biblioteki wsparcia, a niektóre funkcje są tak niedojrzałe, że są śmiesznie trudne w użyciu. A co najgorsze w przypadku czegoś takiego jak haXe lub GWT, prawie niemożliwe jest znalezienie programistów, którzy już znają platformę i są gotowi do pracy, nie mówiąc już o wniesieniu własnej wiedzy, gdy tracisz programistę (lub chcą się rozwijać). Z językiem takim jak Java, nie jest strasznie trudno znaleźć programistę-gwiazdę rocka, do którego można wskoczyć i od razu coś zmienić. Tak więc moje pytanie brzmi, mimo że jest wiele skarg na ugruntowane języki i wiele innowacyjnych ulepszeń, odmian lub zupełnie nowych języków, czy alternatywy są po prostu zbyt niebezpieczne lub kosztowne dla środowiska korporacyjnego? Jeśli tak, w jaki sposób te innowacyjne języki zostaną kiedykolwiek przyjęte? Wygląda na to, że technologia porusza się zbyt szybko, aby innowacje, nawet naprawdę dobre, miały czas na zbudowanie wystarczająco dużej grupy fanów, aby pozostać w pobliżu, gdy coś zacznie się zmieniać.


title: W jakiej kolejności należy dokonywać porównań?

text: Jestem zdecydowanym zwolennikiem pisania takich zdań: zmienna == stała Ponieważ dla mnie ma to sens, jest bardziej czytelne niż odwrócone: stała == zmienna Która wydaje się być często używana przez C-programistów. I widzę zastosowanie, a mianowicie, że interpreter lub kompilator wyrzuci błąd i da ci znać, jeśli nie robisz porównania. Ale nadal jest mniej czytelny i tylko z tego powodu nie sądzę, aby porównania pisać tak jak w drugim przykładzie. **Pytanie brzmi:** > **Czy istnieje ogólna najlepsza praktyka w tym zakresie, czy też jest inna > w zależności od języka/religii/wiek/itd..?** Cieszę się, że tak wielu wydaje się rozumiem, dlaczego chciałbyś zrobić tak, jak w drugim przykładzie, ale nie o to pytam.


title: styl kodowania dla warunku If

text: Natknąłem się na poniższy styl pisania instrukcji if w C#, na przykładach kodu msdn. Zwykle, kiedy piszę instrukcje if, warunki napisałbym `(Klient != null) Chcę wiedzieć, czy jest jakaś różnica/zysk w pisaniu oświadczenia, jak poniżej: Klient klient; if (null != klient) { // jakiś kod } Lub if ("" != klient.Nazwa) { // jakiś kod }


title: Warunek logiczny przed zmienną

text: Od czasu do czasu zauważyłem ten styl: if ( 0 == myVar ) Zamiast: if ( myVar == 0 ) Czy to tylko indywidualny idiom programistów? Defensywny styl programowania? Czy ktoś wie, czy pochodzi z jakiegoś tekstu kanonicznego?


title: Prawda/fałsz po lewej czy po prawej stronie?

text: Słyszałem, że generalnie wyrażenie takie jak: `if (true === $zmienna)` jest szybsze niż: `if ($zmienna === prawda)` Moje pytanie dotyczy wydajności, a nie czytelności. Pytania takie jak to nie wspominają wyraźnie w żadnej z odpowiedzi, czy istnieje różnica w wydajności między nimi. Czy to prawda? Czy pierwsza forma jest naprawdę szybsza od drugiej?


title: Pomysły na napisanie sensownego CV, które nie jest kompilacją modnych słów?

text: Zaraz zacznę od nowa projektować moje CV. Utknąłem w tym, gdzie powinienem postawić granicę między pisaniem _wszystko_, a pisaniem za mało. Nie chcę, aby moje CV było zbiorem wytrychów, ani nie chcę sprawiać wrażenia, że nie znam żadnej z rzeczy, które wiem. Pamiętaj o tych myślach i chcąc napisać _znaczące_ CV, jak mam się do tego zabrać. Ktoś czytający moje CV powinien być w stanie stwierdzić, czy jestem osobą z kultury hakerskiej, czy kimś, kto poszedł do szkoły komputerowej tylko po to, żeby to zrobić. **Edycja:** W związku z odpowiedzią skupiającą się głównie na modnych słowach chciałbym zaznaczyć, że szukam również rzeczy, które sprawią, że moje CV będzie bardziej sensowne - chcę, aby czytelnik był w stanie odróżnić osobę hakerską od po prostu kolejny facet, który poszedł do szkoły komputerowej.


title: Kim jest Menedżer konfiguracji?

text: Chciałbym zapytać członków społeczności o rolę Configuration Manager, jak to widzisz. Nie pytam, czym jest Zarządzanie Konfiguracją, skoro wcześniej o to pytano. To, co muszę wiedzieć, to: 1. Jakie zadania Configuration Manager powinien wykonywać (lub wykonywać) w Twoim zespole? 2. Jaka jest główna odpowiedzialność Configuration Manager? 3. Jakie są dodatkowe/pomocnicze obowiązki Configuration Manager? 4. Czy Configuration Manager musi być odpowiedzialny za procesy rozwoju w projekcie/firmie, czy też powinien być poinformowany, co ma robić? 5. Jakie są relacje między rolami Configuration Manager, Build Manager, Release Manager, Deployment Engineer, CI Engineer? Czy nie wszystkie są takie same - Zarządzanie konfiguracją? 6. Może termin Zarządzanie Konfiguracją jest zbędny i zamiast tego kierownik techniczny/zespół powinien wykonać całą związaną z tym pracę? Byłoby naprawdę wspaniale, gdybyś mógł podzielić się swoją wizją i doświadczeniem.


title: Czy powinienem dokonać refaktoryzacji tej aplikacji szynowej?

text: Przejąłem bazę kodu dla aplikacji ruby-on-rails, która w dużym stopniu opiera się na wywołaniach zwrotnych ActiveRecord do wykonywania reguł domeny. Aplikację można porównać do aplikacji bankowej, w której klient posiada Konto. Na każdym koncie możesz zarejestrować Transakcję (kwotę pieniędzy, która jest wpłacana lub usuwana z konta). Konto posiada konto account_balance, które jest aktualizowane za każdym razem, gdy tworzona jest transakcja. Ta aktualizacja odbywa się jako wywołanie zwrotne ActiveRecord. class Konto < ActiveRecord::Base has_many :transactions def update_account_balance account_balance = 0 self.transaction_logs.each do |transaction| account_balance = account_balance + (transaction.amount + transaction.commission) end self.account_balance = account_balance end end class Transakcja < ActiveRecord::Base familiar_to :account after_save :update_account_value def update_account_value self.account.update_account_balance self.account.save! koniec koniec Uważam, że ten sposób kodowania bardzo utrudnia ustalenie, co się stanie (i co pójdzie nie tak, gdy wystąpi błąd). Ponadto, ponieważ konto musi załadować wszystkie transakcje, będzie to cięższe, ponieważ dodawanych jest coraz więcej transakcji. Gdybym tworzył taką aplikację w .NET (w której jestem znacznie bardziej zaznajomiony) stworzyłbym coś takiego: public class Account { public void AddTransaction(decimal kwota) { this.Transactions.Add(new Transaction(amount) )); this.AccountValue += kwota; } } A następnie upewniłem się, że obiekt Transaction jest niezmienny. Bardzo mnie kusi, aby zmienić system w coś takiego. Ale czy powinienem? Czy to byłaby „droga szynowa”? Wadą, o ile wiem, jest to, że mój kontroler musi jawnie obsługiwać transakcje w bazie danych, co zdarzyło się niejawnie w Transaction.save! wywołanie aktualnie wywoływane w aplikacji. Czy są inne czynniki, o których powinienem wiedzieć?


title: Jak mogę zaimplementować gesty wielodotykowe bez zdarzenia startowego?

text: Podczas pracy nad multitouch jednym z problemów, z jakimi się spotkałem, jest fakt, że nikt nie wykonuje rozpoznawania gestów bez jakiegoś zdarzenia init, czy to kliknięcia myszą, czy kontaktu z pojemnościowym ekranem dotykowym. Czy można wykonać obsługę gestów „zawsze słuchających”? Jeśli tak, jak to zrobić bez dublowania danych wejściowych w czasie rzeczywistym, a tym samym narzucania ponurych kosztów procesora? Czy istnieje jakiś rodzaj próbkowania w dół (tzn. pobiera co n-te wejście z kursora)?


title: Czy ktoś ma wgląd w to, czy MonoDroid naprawdę nie żyje?

text: Moja firma niedawno zainwestowała w narzędzia Mono dla Androida dla Visual Studio, ponieważ mamy wielu programistów .NET i byliśmy pod wrażeniem tego, jak potężne wydawały się narzędzia monodroidowe. Po przeczytaniu ZDNet Post ze smutkiem zobaczyłem, że ten projekt może być martwy. Czy jest ktoś, kto mógłby wiedzieć o tym coś więcej niż to, co jest wymienione w tym artykule? Podobno legiony programistów zostały zwolnione z projektu mono, ale zastanawiam się, czy to prawda. Wszelkie informacje byłyby bardzo mile widziane. Właśnie kupiliśmy licencję Enterprise 5, która była dość kosztowna i byłbym wściekły, gdyby umarła po tym, jak właśnie kupiłem tę rzecz i zacząłem się jej uczyć!


title: Dlaczego ludzie w dzisiejszych czasach tak często korzystają z zajęć fabrycznych?

text: Widziałem historię kilku projektów bibliotek klas С#/Java na GitHub i CodePlex i wydaje się, że jest to trend. Dlaczego ludzie w dzisiejszych czasach tak często używają klas fabrycznych do prawie wszystkiego? Tj. Mamy całkiem niezłą bibliotekę, w której obiekty są tworzone w staromodny sposób - poprzez wywoływanie publicznych konstruktorów klas. Teraz w ostatnich commitach autorzy szybko zmienili wszystkie publiczne konstruktory tysięcy klas na wewnętrzne, a także stworzyli jeden ogromna klasa fabryczna z tysiącami metod statycznych CreateXXX, które po prostu zwracają nowe obiekty, wywołując wewnętrzne konstruktory klas. Zewnętrzne API projektu jest zepsute, dobrze zrobione... Dlaczego? Jaki jest sens takiej „refaktoryzacji”? Jakie są wielkie korzyści z zastąpienia wywołań wszystkich publicznych konstruktorów klas wywołaniami statycznych metod fabrycznych? Czy posiadanie publicznych konstruktorów jest teraz czymś w rodzaju „złej praktyki”?


title: Pisanie testów jednostkowych w środku

text: Czy testowanie jednostek jest w 100% czy nie w ogóle? Przeglądałem moje stare projekty i zacząłem dodawać funkcje, tym razem z testami jednostkowymi. Jednak czy jest to ostatecznie bezwartościowe, jeśli zamierzam ponownie wykorzystać wcześniejsze komponenty, które nie mają testów jednostkowych? Czy muszę pisać testy jednostkowe dla wszystkich poprzednich klas i w ogóle się tym nie przejmować, czy też mogę pisać testy jednostkowe tylko dla nowych rzeczy, które dodam?


title: Uogólnione VS Specjalistyczne rozwiązanie techniczne; co wziąć pod uwagę?

text: Niedawno odbyła się dyskusja w biurze z powodu sprzecznych poglądów między programistami. Jedna strona (strona S) argumentowała rozwiązania techniczne - generalnie - muszą być jak najbardziej konkretne, podczas gdy druga strona (strona G) argumentowała rozwiązania uogólnione są preferowane. Postaram się, żeby to było krótkie; zajmujemy się transferami plików i musimy zacząć zapisywać trzy pliki (log.txt, szczegóły.txt, paragon.pdf) dla każdego transferu. Mamy już tabelę plików, z której będziemy korzystać, ale wszyscy zgadzamy się, że potrzebujemy innej tabeli, aby utworzyć relację jeden-do-wielu między transferami i plikami. Strona G zaproponowała utworzenie ogólnej tabeli resource_attachments, która może dołączać pliki do dowolnego typu zasobu, który wygląda mniej więcej tak; resource_attachments \- id : int \- id_obiektu : int \- typ_obiektu : string \- identyfikator_pliku : int \- rodzaj : ciąg Strona S nie zgodziła się i zaproponowała utworzenie specjalnej tabeli transfer_attachments , coś w tym rodzaju; transfer_attachments \- id : int \- transferId : int \- fileId : int \- rodzaj : string Jednym z argumentów strony S jest to, że każdy zasób powinien być jak najbardziej szczegółowy, aby jego rola, atrybuty i możliwe wartości były jasne, więc każdy nowy programista nie będzie miał problemów ze zrozumieniem tego. Argumentem strony G było to, że bardziej uogólnione podejście zapewniłoby szerszy zakres funkcjonalności; możesz dołączać pliki do dowolnego zasobu, niezależnie od jego roli. Chociaż różnice praktyczne są bardzo małe, dzieje się tutaj kilka fundamentalnych rzeczy (tutaj staje się to filozoficzne); jedna osoba w pokoju ostro zauważyła, że generalizator jest ekspertem od rubinów, podczas gdy specjalista jest ekspertem od javy. Ruby jest językiem interpretowanym z pisaniem dynamicznym, podczas gdy java jest językiem skompilowanym z pisaniem statycznym. Sprawa była dla mnie szalenie interesująca i zastanawiałem się, które podejście jest preferowane; rozwiązanie specjalistyczne lub uogólnione, a jakie kwestie należy wziąć pod uwagę? Zauważ, że mówimy tylko o technicznej części rozwiązania, nie ma to nic wspólnego z wrażeniami użytkownika końcowego.


title: Czy preferowane jest Spring + Hibernate zamiast EJB 3?

text: Uważam, że za każdym razem, gdy rozpoczynają się nowe projekty JEE (tam, gdzie te technologie miałyby zastosowanie), ludzie wolą używać kombinacji Spring + Hibernate zamiast EJB 3. Wydaje się, że młodszym programistom zaleca się nawet stosowanie tego zamiast EJB. Czy to osobista preferencja, czy są ku temu istotne powody? (np. osobiste blizny utworzone przez wcześniejsze wersje EJB, które spowodowały brak zaufania do EJB lub technologii, a przyczyny wydajności lub krzywa uczenia się)?


title: Program/biblioteka do dopasowania wzorców ciągów

text: Mam nazwy miast, jak Nowy Jork. Ktoś może to źle przeliterować i napisać jako Newyoork. Potrzebuję algorytmu lub biblioteki, która może dopasować takie wzorce z pewnym poziomem ufności. Masz pomysł, jak to zrobić lub czy istnieje jakakolwiek biblioteka rozpoznawania wzorców? To tak samo, jak gdy wpisujemy coś w Google z błędną pisownią, ale zamiast tego automatycznie poprawia błąd.


title: Czy korzystasz z komunikatorów internetowych, aby komunikować się w ciągu dnia z innymi programistami?

text: Hello Fellow Programrs: Prowadzę małą firmę i zazwyczaj komunikujemy się przez komunikator internetowy podczas rozmowy. Logujemy się do komunikatora internetowego po przyjeździe i zostajemy przez cały dzień. Moim zdaniem wydaje się to dość rozpraszające i może odciągać od pracy. Interesuje mnie, jak inne małe firmy korzystają z komunikatorów internetowych. Czy korzystasz z komunikatorów internetowych? Jeśli tak, to czy zostajesz cały dzień, czy przychodzisz tylko wtedy, gdy pojawi się pytanie zainicjowane przez e-mail? Staram się stworzyć jak najbardziej produktywne i efektywne środowisko pracy dla programistów odseparowanych geograficznie. Zainteresowany twoimi opiniami. Dziękuję Ci.


title: języki interpretowane a języki kompilowane (z punktu widzenia wdrożenia)

text: Wiele razy czytałem, że jeśli będziesz aktualizować swoją witrynę, możesz uznać, że język tłumaczony jest lepszy w tym przypadku. Chcę zrozumieć, dlaczego interpretowany język po stronie serwera jest lepszy, jeśli ciągle aktualizuję swoją witrynę (np. dodaję nowe funkcje lub zmieniam niektóre funkcje).?


title: Czy mogę używać fragmentu kodu JavaScript na licencji GPL w komercyjnej witrynie internetowej?

text: Patrzę na plupload dla niektórych funkcji przesyłania na stronie, którą tworzę. Teraz plupload jest na licencji GNU GPLv2 i oznacza to, że całe oprogramowanie pochodne również powinno być na licencji GPL (prawda?). Dlatego uruchamiam plupload przez mój minifikator, pojedynczy zminimalizowany plik js naruszy licencję, a na żądanie muszę udostępnić _wszystkie_ źródła mojej strony (prawda?). Jestem ciekaw: * czy mogę używać plupload API bez konieczności otwierania kodu? * czy licencja wyklucza w jakiś sposób kod skrócony? Zobacz też: http://stackoverflow.com/questions/3213767/minified-javascript-and-bsd-license


title: Niejawne lub jawne akcje zapisywania bazy danych

text: Piszę aplikację sieci web, która wymaga użycia funkcji przeciągania i upuszczania oraz innych funkcji jQuery/HTML5. Istnieją dwie opcje zapisywania zmian wprowadzonych przez użytkownika w bazie danych * Niejawne: zapisywanie bazy danych po zakończeniu zdarzenia, takiego jak upuszczenie, najechanie kursorem, itp. * Jawne: zapisz zmiany w lokalnej tablicy i wyślij po kliknięciu przycisku wysyłania. Obecnie jedyną różnicą między nimi jest to, że niejawne zapisy powiązane ze zdarzeniami użytkownika skutkują znacznie większą liczbą żądań danych POST/GET w porównaniu do zapisywania jawnego. Poza tym, czy istnieje różnica między tymi dwoma i jakie są powody wyboru jednej z opcji?


title: Sharding z IoC

text: Spotkałem się z sytuacją, w której muszę shardować bazę danych (Oracle, ale to nie ma szczególnego znaczenia). Istotą problemu jest to, że napisałem system na dużą skalę w dość standardowym stylu TDD, z repozytoriami i usługami ukrytymi za interfejsami. Dependency injection służy do implementacji poszczególnych wersji usług i repozytoriów w czasie wykonywania, przy czym ta funkcjonalność pozwala na szalone wymagania klientów (np. migrowaliśmy z MSSQL do Oracle w niecały tydzień, co nie byłoby możliwe, gdyby architektura nie była poprawna odłączone!). Teraz pojawia się problem, że ze względu na wydajność muszę oddzielić dużą część danych do osobnego systemu archiwalnego. Struktura tabeli musi pozostać taka sama ze względu na ograniczenia czasowe, a ja chciałbym, aby czystość architektury pozostała taka sama, bez żadnej części systemu, która miałaby wiedzę o działaniu innej. System będzie musiał zostać dynamicznie przełączony z jednego fragmentu na inny za pomocą danych wejściowych użytkownika (które dane wejściowe nie zostały jeszcze sfinalizowane). Oto dwa sposoby podejścia do tego problemu: 1 - Przekaż wymagane parametry połączenia podczas tworzenia repozytorium. Nie jest to idealne rozwiązanie, ponieważ oznacza to, że warstwa usług lub, co gorsza, interfejs użytkownika, musi wiedzieć o podstawowym shardingu. Spowoduje to, że projekt będzie w przyszłości bardzo nieelastyczny i będzie wymagał aktualizacji, takich jak warstwa buforowania sit-in-front (implementacja pamięci podręcznej z zapisem na górze IService), aby ich metody przyjmowały ciąg połączenia jako parametr, który po prostu wydaje się _niepoprawny_. 2 - Utwórz nową podsekcję IConnectionProvider systemu, która wyodrębnia informacje o połączeniu dla repozytorium. Byłoby to bardziej idealne, ponieważ repozytoria pozostałyby samowystarczalne, ale nie mogę wymyślić dobrego sposobu na przełączenie tej implementacji bez konieczności określania odpowiedniego interfejsu jako parametru do każdego wywołania metody, który wraca do warstwy usług określającej jakiego połączenia użyć. Czy ktoś ma jakieś doświadczenia z tym zagadnieniem, lub jakieś opinie na temat najlepiej niskonakładowego, ale wciąż dość czystego wdrożenia w tej sytuacji?


title: Czy w Scrumie zadania takie jak konfiguracja środowiska programistycznego i rozwój możliwości powinny być zarządzane jako podzadania w ramach rzeczywistych historyjek użytkownika?

text: Czasami w projektach musimy poświęcić czas na takie zadania jak: 1. poznawanie alternatywnych frameworków i narzędzi 2. poznanie frameworka i narzędzi wybranych do projektu 3. konfigurowanie serwerów i infrastruktury projektu (kontrola wersji, środowiska kompilacji, bazy danych itp. ) Jeśli korzystamy z historii użytkowników, gdzie powinna iść cała ta praca? Jedną z opcji jest uczynienie ich wszystkich częścią pierwszej historyjki użytkownika (np. stworzenie strony głównej aplikacji). Inną opcją jest zrobienie skoku dla tych zadań. Trzecią opcją jest uczynienie zadania częścią Problemu/Utrudnienia (np. środowisko programistyczne, które nie zostało jeszcze wybrane), a nie Historią użytkownika.


title: Jaki jest skuteczny sposób uzyskiwania informacji o przypadkach użycia od zajętych profesjonalistów?

text: Podczas projektowania nowego systemu w szpitalu lub innym środowisku klinicznym, myślę, że ważne byłoby zebranie informacji od lekarzy, pielęgniarek, farmaceutów, techników itp. na temat przypadków użycia systemu. Pomijając fakt, że wszyscy z nich są również zajętymi profesjonalistami, jaki jest dobry sposób, aby skłonić ich do dzielenia się informacjami dotyczącymi ich (prawdopodobnie chaotycznego i wrażliwego na czas) przepływu pracy, który byłby użyteczny w projektowaniu inżynierii oprogramowania?


title: Co mogę zrobić, aby wzmocnić swoje umiejętności kodowania długopisem i ołówkiem?

text: Chcę lepiej pisać kod piórem i papierem. Nie ma znaczenia, czy będzie to pseudokod, czy prawdziwy kod. Czy mógłbyś uprzejmie doradzić mi źródła tego?


title: Co zrobić, gdy praca programistyczna stanie się problemem?

text: Widziałem kiedyś program (nie pamiętam który), w którym mówiono o ludziach „doświadczających flow”, kiedy robią coś, co ich pasjonuje. Kiedy są „w przepływie”, tracą poczucie czasu i otoczenia, koncentrując się tylko na swojej aktywności. Zdarza mi się to często podczas programowania; szczególnie wtedy, gdy mam problem. Nie poddaję się, dopóki to nie zostanie rozwiązane. Zwykle prowadzi to do tego, że godziny po prostu pędzą i zapominam zjeść lunch, kolacja zostaje przesunięta w późny wieczór, a kiedy w końcu patrzę na zegar, mija późne godziny w nocy i dostanę tylko kilka godzin snu przed wstawaniem wcześnie rano. (Nie oznacza to, że jestem w stanie _tylko_ w obliczu problemu - ale szczególnie trudno jest mi przestać programować i cofnąć się, gdy jest coś, czego nie mogę natychmiast rozwiązać.) Uwielbiam programować, ale nienawidzę, gdy zaburza moje normalne nawyki (przede wszystkim wzorce jedzenia i spania). A siedzenie bez ruchu przez tyle godzin, wpatrywanie się w ekran, nie jest zdrowe. Proszę o jakieś pomysły, jak mogę opanować moją szaloną aktywność programistyczną?


title: Scuttlebutt Reconciliation w artykule „Efficient Reconciliation and Flow Control for Anti-Entropy Protocols”

text: Czytam artykuł „Efficient Reconciliation and Flow Control for Anti-Entropy Protocols”! , nie mogłem jasno zrozumieć Sekcji 3.2 „Pojednanie Scuttlebutt”. Tutaj wyciągam z gazety kilka zdań, które mnie szczególnie dezorientują. 1. Jeśli wiadomości plotkarskie miały nieograniczoną wielkość, to zestawy zawierają dokładne różnice, tak jak przy precyzyjnym uzgodnieniu. 2. Scuttlebutt wymaga, aby w przypadku pominięcia pewnej delty (r; k; v; n) wszystkie delty o wyższych numerach wersji dla tego samego r również zostały pominięte. 3. Scuttlebutt spełnia globalny niezmiennik C(p;q) dla dowolnych dwóch procesów p i q:


title: jak korzystać z kontroli wersji

text: Tworzę stronę internetową w php na localhoście i po ukończeniu jej modułów przesyłam ją do chmury, aby moi znajomi mogli ją przetestować w wersji alfa. W miarę rozwoju mam wiele plików i tracę kontrolę nad tym, który plik edytowałem lub zmieniałem itp. Słyszałem o czymś takim jak „kontrola wersji” do zarządzania tymi wszystkimi, ale nie jestem pewien, jak to działa. Tak więc moje pytanie brzmi: Czy jest dostępny dla mnie łatwy sposób/usługa/aplikacja do śledzenia wszystkich edycji/zmian/nowych plików i zarządzania plikami podczas tworzenia strony internetowej. Jak tylko skończę z modułem, chcę go wgrać do chmury (korzystam z Amazon Cloud Service). Jeśli coś stanie się z nowymi plikami, być może zechcę wrócić do starego. A może za jednym lub dwoma kliknięciami zobaczę pliki, które edytowałem lub zmieniałem od ostatniego przesłania?


title: Czy Code First z migracjami lub narzędziami danych programu SQL Server lepiej pasuje?

text: Dostałem specyfikację na stworzenie nowej strony MVC4, na początku nie będzie to zbyt duży projekt, ale podejrzewam, że będzie się rozwijał, gdy biznes będzie miał na niego nowe pomysły. Używając .NET 4.5 ASP.NET MVC4 i EF muszę wybrać między kodem najpierw z migracjami lub Sql Server Data Tools (SSDT) do obsługi mojej bazy danych. Dzięki SSDT mogę kontrolować moją bazę danych w projekcie w ramach mojego rozwiązania i obsługiwać zmiany od fazy deweloperskiej do produkcyjnej i dalej za pomocą plików dacpac. Moje doświadczenie z code-first z MVC3 polegało na tym, że nie używałem go poza programowaniem ze względu na ograniczone opcje bazy danych. Zawsze kończyłoby się to upuszczeniem Db przy zmianie modelu lub ręcznej obsługi zmian Db. Jednak wierzę, że z migracjami MVC4 już tak nie jest i mogę teraz przesyłać aktualizacje do Db. Więc moje pytanie brzmi, który z nich jest najbardziej wydajny w użyciu w oparciu o oszczędność czasu/wysiłku w rozwoju, ale także skalowalny i zdolny do obsługi zmian produkcyjnych. Podobał mi się code-first i możliwość generowania bazy danych z modeli, czy wprowadzenie migracji czyni ją wykonalną w produkcji?


title: Czy nauka gry na instrumencie poprawia umiejętność programowania?

text: Widziałem wiele pytań dotyczących tego, czy _słuchanie_ muzyki zwiększa produktywność itp., ale nie udało mi się znaleźć pytania o _wykonywanie_ muzyki. Nauka gry na pianinie była na mojej liście rzeczy do zrobienia od jakiegoś czasu, częściowo dlatego, że mam podstępne podejrzenie, że nauka radzenia sobie z relacjami, rekurencjami itp. nieodłącznymi od muzyki uczyni mnie lepszym programistą (dodatkowo wygląda to zabawnie ). Czy ktoś wie o jakichkolwiek badaniach lub ma doświadczenie z pierwszej ręki w nauce instrumentu muzycznego, który ma jakikolwiek zauważalny wpływ na czyjeś programowanie lub zdolności matematyczne? Większość z tego, co udało mi się znaleźć, wydaje się być zainteresowana skutkami uczenia się muzyki w bardzo młodym wieku na poprawę ogólnych zdolności umysłowych. Byłbym również zainteresowany innym kierunkiem, czyli nauką programowania poprawiającą swoje umiejętności za pomocą instrumentu.


title: Który ściśle reprezentuje agregację?

text: Wiem, że agregacja jest relacją ma, ale napotkałem w teście pytanie, które nie miało sensu (i zawierało również błędy gramatyczne). Które z poniższych stwierdzeń poprawnie opisuje pojęcie agregacji w OOP? * **A** Podział klasy na kilka podklas * **B** Tworzenie jednego kawałka kodu, który działa ze wszystkimi podobnymi obiektami * **C** Dostęp do danych tylko poprzez metody * **D** Łączenie kilku klasy do stworzenia nowej klasy * **E** Tworzenie nowej klasy z istniejącej klasy myślę; * **A** Może być prawdą. * **B** Brzmi jak dziedziczenie. * **C** Wygląda na własność. * **D** Może być prawdą. * **E** Może być prawdą. Nie jestem pewien, jak relacja ma-a przekłada się na rzeczywisty kod w tych stwierdzeniach. Jakieś pomysły?


title: Co to jest tworzenie aplikacji dla konsultantów?

text: Ostatnio dostałem ofertę pracy z csc jako konsultant ds. rozwoju aplikacji. Obecnie pracuję jako inżynier oprogramowania. Czy ktoś może mnie oświecić na czym jest rozwój kariery w rozwoju aplikacji dla konsultantów, rodzaj pracy, bezpieczeństwo i jaka jest tam rola?


title: Architektura czy wzorzec do obsługi właściwości z niestandardowym ustawiaczem/pobieraczem?

text: **Obecna sytuacja:** tworzę prostą witrynę MVC do prowadzenia dzienników jako osobistego projektu. Obawiam się, że staram się, aby interakcja między stronami i klasami była uproszczona. Problemy pojawiają się w polu hasła. Mój setter szyfruje hasło, więc pobierający pobiera zaszyfrowane hasło. public class JournalBook { private IEncryptor _encryptor { get; ustawić; } private String _hasło { get; ustawić; } publiczny identyfikator Int32 { get; ustawić; } public Nazwa ciągu { get; ustawić; } publiczny opis ciągu { get; ustawić; } public String hasło { get { return this._password; } set { this.setPassword(to._hasło, wartość, wartość); } } public Lista<Journal> czasopisma { get; ustawić; } utworzono public DateTime { get; ustawić; } public DateTime lastModified { get; ustawić; } public Boolean passwordProtected { get { return this.password != null && this.password != String.Empty; } } ... } Obecnie używam wiązania modelu do przesyłania zmian lub tworzenia nowych JournalBooków (jak poniżej). Problem pojawia się, że w poniższym kodzie `book.password` jest zawsze null, jestem prawie pewien, że jest to spowodowane niestandardowym ustawiaczem. [HttpPost] public ActionResult Create(JournalBook book) { // Utwórz JournalBook, jeśli nie ma wartości null. if (książka != null) this.JournalBooks.Add(book); return RedirectToAction("Indeks"); } **Pytanie(a):** Czy nie powinienem obsługiwać tego w pobieraniu/ustawianiu właściwości? Czy istnieje wzorzec lub architektura, która pozwala na powiązanie modelu lub inną prostą metodę, gdy właściwości muszą mieć niestandardowe metody pobierania/ustawiania w celu manipulowania danymi? Podsumowując, jak mogę obsłużyć przechowywanie haseł za pomocą szyfrowania, aby mieć następujące: * Solidna architektura * Nie przechowuję hasła jako zwykłego tekstu. * Przesłanie nowego lub zmodyfikowanego dziennika `JournalBook` jest tak proste, jak domyślne powiązanie modelu (lub blisko niego).


title: Czy istnieją algorytmy optymalizacji odpytywania?

text: Mam aplikację internetową z asynchronicznym backendem HTTP, który jest wywoływany przez klienta przez żądania AJAX. Klient musi rozpocząć pracę, a następnie pobrać wynik. Zacząłem od prostego interwału odpytywania 150 ms, który był dobry w przypadku małych zadań, ale duże zadania, które mogły zająć kilka minut, powodowały wysyłanie wielu nieudanych żądań do serwera. Obecnie po prostu dodaję 1000 ms do opóźnienia po każdym sondażu, więc odpytywanie z czasem staje się wolniejsze w przypadku dłuższych żądań, ale nigdy nie przekracza 10 sekund. **Czy są jakieś formuły, statystyki lub algorytmy, których mogę użyć do dynamicznej optymalizacji czasu odpytywania?**


title: Kryteria oceny oprogramowania pośredniego

text: Jakie są odpowiednie kryteria oceny listy firm oferujących bezpłatne oprogramowanie pośredniczące? Przeprowadzam badanie branżowe kilku wdrożeń oprogramowania pośredniego firmy i do tej pory określiłem następujące kryteria: 1. Koszt 2. Łatwość rozwoju/czasu przyspieszania 3. Licencjonowanie 4. Wsparcie 5. Jakość narzędzi


title: Jakie są zalety i wady korzystania z Web Framework?

text: To pytanie koncentruje się na **wydobyciu zalet i wad korzystania z frameworków opartych na sieci**: takich jak Cake PHP, Zend, jQuery, ASP.NET). To pytanie jest całkowicie _niezależne od języka_. Zacznę od pojęcia „Stania na barkach Gigantów”. ## Zalety: * **Umożliwia programistom** \- skompresowanie ich w jedno proste wywołanie funkcji, które wcześniej wymagałyby setek linii kodu, umożliwia programistom zintegrowanie bardziej złożonych funkcji z ich witrynami internetowymi. * Pozwala na **Szybszy rozwój** aplikacji - jest to bardzo istotne dla osób, które potrzebują stron internetowych tworzonych w bardzo małym oknie (ma ktoś na to przykłady?) * **Niższe koszty** \- pozwala programistom na przerzucenie kosztów oszczędności dla klienta, wygenerowano całą nową grupę klientów, którzy chcieli mieć stronę internetową, ale wcześniej nie mogli sobie pozwolić na wyższe koszty rozwoju. ## Wady: * **Utracone zrozumienie** \- opierając się na cechach frameworka, programista jest w niebezpieczeństwie utraty zrozumienia, jak to wszystko działa (pod maską). * Klif konfiguracyjny - gdy pójdziesz dalej niż konfiguracja twojego frameworka, twoja produktywność spadnie od razu, może być trudno zaimplementować funkcje poza konfiguracją frameworka. * **Deweloperskie ścieżki technologiczne** \- Ty (programista) musisz robić rzeczy w sposób, w jaki programista chce, abyś robił rzeczy. Zastanawiam się, co ludzie sądzą o moich uwagach i czy ktoś się z nimi nie zgadza? Również jeśli ludzie mają dodatkowe punkty, byłbym wdzięczny.


title: Jak klastrować ciągi na podstawie relacji między dwoma ciągami?

text: _Jeśli nie znasz WEKI, możesz spróbować teoretycznej odpowiedzi. Nie potrzebuję dosłownego kodu/przykładów..._ Mam ogromny zestaw ciągów danych, w których chcę pogrupować ciągi, aby znaleźć najbardziej powiązane, równie dobrze można je postrzegać jako duplikaty. Mam już zestaw par ciągów, dla których wiem, że są zduplikowane, więc teraz chcę przeprowadzić eksplorację danych na tych dwóch zestawach. Rezultatem, którego szukam, jest system, który zwróciłby mi możliwie najbardziej odpowiednie pary ciągów, dla których jeszcze nie wiemy, że są duplikatami, uważam, że potrzebuję do tego klastrowania, jakiego typu? Zauważ, że chcę oprzeć się na **porównaniu występowania słów** , a nie na interpretacji czy znaczeniu. * * * Oto przykład dwóch ciągów, o których wiemy, że są zduplikowane (w naszej wizji na nich): * Jest naprawdę zimno i pada deszcz. * Pada deszcz i jest naprawdę zimno. Teraz istnieją również następujące ciągi (od najbardziej do najmniej istotnego, ignorując słowa stopu): * Czy pogoda jest dziś naprawdę tak zimna? * Deszczowe dni są okropne. * Widzę słońce na zewnątrz. Oprogramowanie zwróci następujące dwa ciągi znaków jako najbardziej odpowiednie, o których nie wiadomo, że są duplikatami: * Jest naprawdę zimno i pada deszcz. * Czy dzisiaj jest naprawdę tak zimno? Następnie oznaczyłbym to jako duplikat lub nie duplikat i dałoby mi to inną parę. * * * Jak wdrożyć to w najbardziej efektywny sposób, jaki mogę zastosować do dużego zestawu danych?


title: Co powinienem zrobić, aby być agnostykiem językowym?

text: Do tej pory pracuję z asp.net i C#. Wykonałem też przyzwoitą pracę w Javie. Planuję swoją karierę w taki sposób, aby pewnego dnia być agnostykiem językowym. Czego muszę się nauczyć? Najpierw paradygmaty OOP, ponieważ mówi o projekcie klasy. Czy są jeszcze jakieś inne?


title: Czy Groovy odchodzi?

text: Jestem pewien, że to pytanie było zadawane wiele razy. Chciałbym jednak zadać to pytanie ponownie z intencją, jaka jest przyszłość tych języków. Po raz pierwszy poznałem Groovy i bardzo mi się spodobał. Czułem, że składnia jest prostsza i znacznie bliższa Javie i mogłem szybko nauczyć się Grails. Potem była Scala i platforma internetowa Lift. Nadal uczę się Scali i czasami składnia jest dla mnie bardzo trudna. Jednak wciąż zastanawiam się, jaka jest przyszłość Groovy. Kiedy autor Groovy mówi, że nigdy nie stworzyłby groovy, gdyby wiedział o Scali, zastanawiam się, czy w ogóle istnieje przyszłość. Oczywiście Groovy przeszedł długą drogę, a Grails jest dziś używany przez wiele dużych firm. Gdyby spojrzeć dzisiaj na Grails vs Lift, to Grails byłby wyraźnym zwycięzcą. Korzysta z niego więcej firm. Ale biorąc pod uwagę wszystko, co do tej pory powiedziałem, jestem zainteresowany, czy należy zainwestować w Groovy? Czy Groovy odchodzi, a Scala to lepszy wybór? Jeśli dyrektor generalny BMW mówi, że jeździ mercedesem, można by się zastanawiać, dlaczego wszyscy nie mielibyśmy też jeździć mercedesem, prawda? (Rozumiem, czy to pytanie jest naprawdę szerokie i może zostać zamknięte. Mam jednak nadzieję, że będzie to otwarta Wiki dla innych.)


title: Najmniejszy obrót leksykograficzny ciągu znaków przy użyciu tablic sufiksów w O(n)

text: Zacytuję problem z ACM 2003: > Rozważmy łańcuch o długości n (1 <= n <= 100000). Określ jego minimum > obrót leksykograficzny. Na przykład rotacje struny „alabala” > to: > > alabala > > labalaa > > abalaal > > balaala > > alaalab > > laalaba > > aalabal > > a najmniejszym z nich jest „aalabal”. Co do rozwiązania - wiem, że muszę skonstruować tablicę sufiksów \- i powiedzmy, że mogę to zrobić w O(n). Moje pytanie wciąż brzmi: jak znaleźć najmniejszy obrót w O(n)? (n=długość napisu) Bardzo interesuje mnie ten problem, a mimo to jakoś nie otrzymuję rozwiązania. Bardziej interesuje mnie koncepcja i sposób rozwiązania problemu, a nie konkretna realizacja. Uwaga: minimalna rotacja oznacza w takiej samej kolejności jak w słowniku angielskim - "dwor" jest przed "słowo", ponieważ d jest przed w. EDYCJA: konstrukcja tablicy sufiksów trwa O (N) OSTATNIA EDYCJA: Myślę, że znalazłem rozwiązanie! Co jeśli po prostu scalę dwa ciągi? Więc jeśli ciąg to „alabala”, nowy ciąg czy miałbym „alabalaalabala”, a teraz po prostu skonstruowałbym tablicę sufiksów tego (w O(2n) = O(n)) i dostałbym pierwszy sufiks? Myślę, że to może mieć rację. Co myślisz? Dziękuję Ci!


title: Jak mogę otrzymać darmową grafikę do mojego wolnego oprogramowania?

text: Tak wiele projektów wolnego oprogramowania ma piękną grafikę, szczególnie strony internetowe, że zastanawiam się, gdzie programiści spotykają się ze swoimi artystami. Czy jest jakieś miejsce, w którym można o to poprosić, poza tablicą szkolną lokalnych kierunków artystycznych? Myślałem o IRC, ale obawiam się, że można by niepokoić małą i częstą bazę użytkowników, pytając ją tam.


title: S. Dev stworzył bazę danych, z którą się nie zgadzam. Poszukiwana porada

text: Muszę wkrótce pobiec do pracy, więc to będzie krótkie. Jestem w firmie dopiero od kilku tygodni. To dobra firma, to jest kontrahent, który akurat jest dwa razy starszy ode mnie. Jestem nowy w dziedzinie profesjonalnego programowania. Ta baza danych robi dokładnie to, czego Wikipedia zabrania robić dla 1NF. Powtarza kolumny telefoniczne w różnych tabelach. To jest jedno uderzenie. Ostrzeżenie drugie: niektóre dane są duplikowane w tabelach. Mieszkanie zduplikowane. Uderzenie trzecie: nieistotne, ale zamienił wszystkie klucze w bigint. Wszystkie "FK_" są również nullable. Co? Nie zaczęliśmy JESZCZE korzystać z tej bazy danych, ale odkąd dołączyłem, nastąpił wielki kryzys, aby sprostać potrzebom i osi czasu klienta, a aktualna oś czasu wykorzysta ją, powiedzmy, jutro. Mogłem siedzieć wygodnie, podczas gdy on robił bałagan, ponieważ nie miałem do czynienia z tym bezpośrednio, ale wygląda na to, że zamierzam przejąć tę sekcję kodu, podczas gdy on musi zaprojektować coś innego. Każda rada byłaby bardzo mile widziana. Mój szef to wspaniały człowiek, ale jest też bardzo, bardzo zajęty, a stres to ostatnia rzecz, jakiej potrzebuje. **Aktualizacja:** Przepraszamy, ale wyszło to jako rant i mniej trafne pytanie. Naprawdę doceniam wszystkie odpowiedzi i pomogły mi bardziej analitycznie spojrzeć na „problem”. Istnieje również pewna korzyść z ich uogólnienia, ponieważ ta sama rada nadal będzie miała zastosowanie do przyszłych „problemów”. Dziękuję Ci. **Druga aktualizacja:** Więc uprzejmie spróbowałem dowiedzieć się, dlaczego zrobił to, co zrobił i w większości przyznał nawet, że nie miał zbyt dobrego powodu. Skończyło się na tym, że spędziliśmy trochę czasu i wycinaliśmy prawie wszystkie zduplikowane kolumny. Co do reszty dziwactw, mogę dobrze ugryźć się w policzek, ponieważ są po prostu denerwujące i nie będą potencjalnie siać spustoszenia, jeśli każde zduplikowane pole nie zostanie zaktualizowane. W sumie dobry dzień. PS Trudno mi wybrać najlepszą odpowiedź, ponieważ jest tak wiele dobrych.


title: Jak radzić sobie z edytorami WYSIWYG?

text: Obecnie istnieje wiele edytorów WYSIWYG, jednak za każdym razem, gdy używamy go na stronie internetowej opartej na CMS, stale pojawiają się problemy. Największe z nich to użytkownicy wklejający treści z Worda lub innych źródeł internetowych i wszystkie różne zasady formatowania dodawane „za kulisami”. Jak radzisz sobie z tymi redaktorami na stronie internetowej produkcji na żywo? Uwielbiam Markdown, jednak jego docelowym rynkiem jest zdecydowanie branża technologiczna.


title: Jakie są pytania typu FizzBuzz dla programistów WWW lub SQL?

text: Po pewnym czasie znowu zatrudniamy i przeglądam testy dla programistów; niektóre z nich są nieco nieaktualne. Jakie są niektóre z pytań typu FizzBuzz dla twórców stron internetowych i SQL? To znaczy, nie jest to zbyt trywialne, ale nadal możliwe do rozwiązania w ciągu pięciu do dziesięciu minut za pomocą pióra i papieru i bez Google? Zazwyczaj eliminuję około dwóch trzecich lub więcej kandydatów na podstawie CV, a potem wszystkich oprócz kilku naprawdę dobrych kandydatów na godzinnej rozmowie (która może być przez telefon). W tym momencie kandydat pisze test osobowości i ma szansę napisać trochę kodu podobnego do FizzBuzz. Tak więc nie próbuję eliminować kilku kandydatów, ale próbuję potwierdzić moją wstępną ocenę, że kandydat nadaje się do zatrudnienia i jest w stanie kodować.


title: Projektowanie architektury Web API

text: Uczę się i zagłębiam w Web API. Korzystałem wcześniej z usług internetowych, ale nie konkretnie z internetowym API. Poniżej przedstawiam, jak do tej pory to projektuję i byłem ciekaw opinii. Mam obiekt ReturnMessages. Zasadniczo jest to standardowy obiekt, który jest zwracany z dowolnego wywołania interfejsu API, poprawnie wykonany lub wystąpi błąd. W ramach każdej metody API mam próbny chwyt. jeśli wszystko jest w porządku, określam wartości, których potrzebuję w moim obiekcie ReturnMessages, a następnie `Ok(_returnMessages)`. Teraz, jeśli wystąpi błąd, wypełniam obiekt ReturnMessages informacjami o błędzie i jeszcze raz zwracam `Ok(_returnMessages)`. Obiekt ReturnMessages zawiera pole ReturnClass do przechowywania dowolnego typu innych obiektów, które będę musiał zwrócić. Pojedynczy obiekt lub tablica. Zawiera również kod powrotu, komunikat zwrotny, przyjazną wiadomość dla użytkownika końcowego na wypadek, gdyby coś się stało, a także ogólną listę ciągów danych, które zostały przekazane, które mogę wysłać i wykorzystać do celów testowych, aby spróbować odtworzyć błąd. Poniżej znajduje się przykładowy kod jednej z metod, który pokazuje to, o czym mówię. Czy to podejście jest w porządku, jeśli zawsze zwracam OK z obiektem, który zwracam, czy też brakuje mi potencjalnych elementów w internetowym interfejsie API, z którego powinienem korzystać? Widziałem wyjątki NotFound i wszystkie inne fajne rzeczy. **EDIT: Wprowadziłem pewne zmiany w zakresie tego, do czego wracałem, gdy coś nie działa. Wyjąłem ReturnMessage, a także ReturnData i zapisałem to w dzienniku zdarzeń aplikacji dla nowej wartości ciągu dla tego konkretnego interfejsu API. Taht występuje w wierszu kodu _lw, który jest po prostu klasą LogWriter, która używa wartości przekazanych do zapisywania w dzienniku zdarzeń aplikacji. public IHttpActionResult method1(string arg 1= null, string arg2 = null, string arg3 = null) { try { clrObject1 varClrObject = (z pw db.clrObject1 gdzie p.column1 == arg1 select p).SingleOrDefault(); if (varClrObject == null) { _returnMessages = new ReturnMessages { ReturnCode = 204, FriendlyErrorMessage = "Nic znalezione nie pasuje do podanych wartości." }; _lw.SetupEventLog("Nie znaleziono danych pasujących do podanych informacji.\n\nParametry:\narg1: " + arg1 + "\narg2: " + arg2 + "\narg2=" + arg2, "Ostrzeżenie"); } else { _returnMessages = new ReturnMessages { ReturnCode = 200, ReturnClass = varClrObject, ReturnMessage = "Informacje zostały pomyślnie pobrane" }; } } catch (Exception e) { _returnMessages = new ReturnMessages { FriendlyErrorMessage = "Wystąpił błąd podczas pobierania informacji. Spróbuj ponownie za kilka minut. Powiadomienie o tym problemie zostało już wysłane do firmy.", ReturnCode = 400 }; _lw.SetupEventLog("Parametry:\narg1: " + arg1 + "\narg2: " + arg2 + "\narg3=" + arg3, "Błąd", e); } return Ok(new { Response = _returnMessages }); }


title: O jakich praktykach bezpieczeństwa należy pamiętać podczas pisania oprogramowania?

text: Jakie istnieją rodzaje zabezpieczeń? Dlaczego i kiedy należy je wdrożyć? Przykład: Zapobieganie wstrzykiwaniu SQL


title: Ile wysiłku powinniśmy poświęcić na programowanie dla wielu rdzeni?

text: Procesory mają obecnie coraz więcej rdzeni, co mnie zastanawia... Czy my, programiści, powinniśmy dostosować się do tego zachowania i poświęcić więcej wysiłku na programowanie dla wielu rdzeni? W jakim stopniu powinniśmy to zrobić i zoptymalizować? Wątek? Podobieństwo? Optymalizacje sprzętowe? Coś innego?


title: Algorytm najbliższego koloru używający Hex Triplet

text: Poniższa lista stron zawiera listę kolorów o nazwach http://en.wikipedia.org/wiki/List_of_colors. Na przykład trójka heksadecymalna #5D8AA8 to „Air Force Blue”. Ta informacja będzie przechowywana w tabeli bazy danych (tbl_Color (HexTriplet,ColorName)) w moim systemie Załóżmy, że stworzyłem kolor za pomocą trójki heksadecymalnej #5D8AA7. Muszę uzyskać najbliższy dostępny kolor w tabeli tbl_Color. Oczekiwany anser to „#5D8AA8 - Air Force Blue”. To dlatego, że #5D8AA8 jest najbliższym kolorem dla #5D8AA7. Czy mamy jakiś algorytm znajdowania najbliższego koloru? Jak to napisać używając C#/Java? **ODNIESIENIA** 1. http://stackoverflow.com/questions/5440051/algorithm-for-parsing-hex-into-color-family 2. http://stackoverflow.com/questions/6130621/algorithm-for- znajdowanie-koloru-pomiędzy-dwoma-innymi-w-przestrzeni-kolorowej-farby **Sugerowana formuła:** sugerowana przez @user281377. Wybierz kolor, w którym suma tych kwadratów różnic jest minimalna (Kwadrat(Red(źródło)-Czerwony(cel))) + (Kwadrat(Zielony(źródło)-Zielony(cel))) +(Kwadrat(Niebieski(źródło)-) Niebieski (cel)))


title: Krótkie wyszukiwanie sekwencyjne a zwykłe wyszukiwanie sekwencyjne

text: Zakładając, że lista elementów jest posortowana w porządku rosnącym, przeszukujemy sekwencyjnie od pierwszego elementu porównując cel do kolejnych elementów albo do momentu znalezienia celu (sukcesu) albo do momentu, gdy bieżący element będzie większy od celu lub dotrzemy do końca lista (niepowodzenie). **Czy krótkie wyszukiwanie sekwencyjne jest jeszcze wydajniejsze niż zwykłe wyszukiwanie sekwencyjne? Jeśli tak, to kiedy?**


title: Jak przemierzać drzewo bez użycia rekurencji?

text: Mam bardzo duże drzewo węzłów pamięci i muszę przejść przez drzewo. Przekazywanie zwróconych wartości każdego węzła podrzędnego do węzła nadrzędnego. Należy to zrobić, dopóki wszystkie węzły nie będą miały swoich bąbelków danych do węzła głównego. Traversal działa tak. private Data Execute(Node pNode) { Data[] values = new Dane[pNode.Children.Count]; for(int i=0; i < pNode.Children.Count; i++) { values[i] = Execute(pNode.Children[i]); // rekurencyjne } return pNode.Process(values); } public void Start(Node pRoot) { Wynik danych = Execute(pRoot); } Działa to dobrze, ale martwię się, że stos wywołań ogranicza rozmiar drzewa węzłów. Jak można przepisać kod, aby nie były wykonywane rekursywne wywołania `Execute`?