title: Czy jestem uważany za „techniczny”?

text: Czy jestem uważany za „techniczny”? Zaczynam swoją trzecią firmę i spotykam się przy tym z inwestorami. Wydaje się, że wszyscy są uwikłani w to, czy startup ma współzałożyciela technicznego. Ok. Więc co sprawia, że osoba jest techniczna? Oto kilka informacji o mnie. Ty będziesz sędzią. * Od 18 lat pracuję w firmach programistycznych i internetowych. * Zbudowałem strony internetowe. * Zakładam trzecią firmę. * Moi partnerzy biznesowi tworzą architektury internetowe dla firm, o których marzę. * Z powodzeniem wprowadziłem na rynek produkty techniczne dla urządzeń mobilnych i internetowych w Stanach Zjednoczonych i na całym świecie. * Resztę pracy wykonuję. * Mam konto na Github. * Zbudowałem własne komputery do gier. Ale może traktuję to pytanie zbyt dosłownie, gdy pytam "Czy jesteś techniczny?" * Nie koduję, ale potrafię odczytać kod na tyle dobrze, aby go skopiować/wkleić. * Pracowałem nad edytorami wiersza poleceń, takimi jak emacs i vi, ale to nie jest moja mocna strona. A może powinienem po prostu się rozjaśnić i odpowiedzieć „Tak” na pytanie?


title: Czy śledzenie danych/metryk użytkownika za pomocą IP jest etyczne, a nawet legalne?

text: Ten jest trochę trudny. To są publicznie dostępne informacje, prawda? Ale można go również użyć złośliwie. Czy zatem przechowywanie i/lub zbieranie informacji o użytkownikach na podstawie IP jest legalne/etyczne? Głównie dla ciekawości, ale byłoby to również ważne w celach marketingowych, a może coś do anonimowego opublikowania na stronie głównej. Jednym z zastosowań jest wykrywanie ataków i, w przypadku niektórych produktów, ograniczanie uwalniania do jednej części świata. Nie widzę prawdziwych wad z biznesowego punktu widzenia, ale widzę też, jak sprawiłoby to, że użytkownicy poczuliby się niekomfortowo, a nawet może być nielegalne. W tej chwili po prostu przechowuję ciągi agenta użytkownika i ip w lekko losowym formacie łamania linii, więc jeśli bot sieciowy wykryje lukę, jest mniejsza szansa na prawidłowe zeskrobanie ips. Ale chciałbym ostatecznie skompilować mapę użytkowników i umieścić małą kropkę w miejscu, w którym każdy użytkownik się logował. Byłaby to mapa całego świata, więc drobne szczegóły nie zostałyby ujawnione. Ale z jakiegoś powodu czuję, że jestem winny czegoś lub wpadnę w kłopoty za zbieranie tych danych. Od strony prawnej zauważyłem artykuły podobne do tego: http://www.adexchanger.com/the-debate/why-ip-tracking-is-a-bad-idea/ i przeczytałem o firmach takich jak Google i Facebook, które wchodzą do gorącej wody z użytkownikami w celu zbierania danych. Jestem w Stanach Zjednoczonych, a serwer najprawdopodobniej będzie działał gdzieś w USA, ale mam wrażenie, że prawo krajowe dotyczyło odwiedzającego klienta.


title: Jak zorganizować dokument oprogramowania dla tej samej aplikacji obsługującej zarówno iOS, jak i Android

text: Muszę napisać dokumentację projektową oprogramowania dla aplikacji obsługującej zarówno iOS jak i Androida. Każda platforma ma swoje specyficzne cechy, a projekt i wymagania aplikacji mobilnej są prawie takie same. Na początku myślałem, aby umieścić wszystkie wymagania w jednym dokumencie, oddzielając platformy obok siebie. Dlaczego jednak twórcy Androida mieliby widzieć część deweloperską iOS i na odwrót? Czy powinienem napisać dokument osobno dla każdej platformy, czy zawrzeć go w jednym dokumencie? Który z nich jest dobry dla kontroli jakości i ogólnego profesjonalizmu specyfikacji wymagań oprogramowania?


title: Porady dotyczące dobrej konfiguracji rozwoju serwera WWW

text: Mniej więcej miesiąc temu stworzyłem swój pierwszy stos LAMP i zaimplementowałem prostą stronę internetową, która zawierała każdą literę w tym akronimie. Jednak moja konfiguracja programistyczna była znacznie mniej niż idealna. Tak naprawdę nie mam lokalnego serwera testowego, ale zamiast tego pisałem wszystkie moje skrypty CGI w vimie, podczas gdy ssh'em był na zdalnej maszynie jako _root_. Teraz zamierzam rozpocząć poważniejszy rozwój. **Pytanie:** Jaka jest dobra konfiguracja, aby programowanie przebiegało jak najłatwiej? Chciałbym zrozumieć, co jest dla mnie dostępne w ramach IDE, subversion (lub alternatyw), przesyłania i pobierania treści oraz tylko najlepszych praktyk. Jestem w tym całkiem nowy. Również zachęcam do wskazywania dobrych stron internetowych. Stron internetowych jest mnóstwo, ale tylko osoby, które już intensywnie rozwijają treści internetowe, są w stanie szybko określić, czy są to dobre strony internetowe.


title: Toczenie własnego Hackathonu

text: **Informacje w tle** Hej, wpadłem na pomysł firmy Hackathon, która przekaże nasz czas organizacji charytatywnej na pracę nad projektem (za darmo) mającym na celu poprawę morale w mojej firmie i zwiększenie spójności programistów. Jak się okazuje, najbardziej podoba mi się pomysł, ale zgadnij, kto będzie tym, który to poskłada. lol Tak ja. Powinienem dodać, że jesteśmy dość małym sklepem z około 10-12 programistami (niektórzy pełnią podwójną rolę jako programiści, interniści itp.) Więc może to trochę ułatwić. **Pytanie podstawowe** Chociaż nie jestem kierownikiem projektu ani żadnym poziomem autorytetu (człowiek na poziomie podstawowym), zastanawiałem się, czy ktoś zna najlepsze podejście dla kogoś na moim stanowisku, aby połączyć takie wydarzenie z prawdopodobnie (niektórymi) wsparcie firmy. Albo jeśli o to chodzi, masz jakąś pomocną radę, którą mógłbyś przekazać młodemu padawanowi. **Do tej pory.....** Na razie jest to tylko pomysł, więc na początek prawdopodobnie musiałbym złożyć jakąś propozycję i zrobić kilka rzeczy biurowych, które zostałem programistą, aby to wyjaśnić do pewnego stopnia.


title: Kiedy warto edytować kod napisany przez współpracownika?

text: W jakich kwestiach dobrze jest edytować kod napisany przez współpracownika? W jakich kwestiach jest to złe?


title: Uzyskanie spójnego obrazu stanu danych

text: Oto problem teoretyczny. Może dotyczyć wielu systemów. Załóżmy na przykład usługi sieciowe RESTful. Chcesz się czegoś dowiedzieć, ale tak się składa, że nie dostaniesz tego w jednym zapytaniu. Możesz wykonać wiele zapytań. Na przykład masz wspólne konto bankowe (lub konto w banku firmowym) i chcesz dowiedzieć się, ile jest tam pieniędzy. Tymczasem ktoś inny przelewa pieniądze z czeków na oszczędności. Sprawdzanie: 5000 $ Oszczędność: 3000 $ > Ja: sprawdzanie zapytań. Odpowiedź: 5000 $ > Joe: Przenieś 4000 $ z czeków do oszczędności Sprawdzanie: 1000 $ Oszczędności: 7000 $ Ja: Zapytaj o oszczędności. Odpowiedź: 7000 USD Razem 12 000 USD. Jak uniknąć takich anomalii? Przykład pokazuje dwa rachunki w jednym banku, ale może się to również zdarzyć w przypadku dwóch rachunków w dwóch różnych bankach.


title: Tematy do sesji treningowych zespołu programistycznego

text: Nasz zespół programistów rozpocznie comiesięczne spotkania w celu szkolenia i doskonalenia wiedzy. Szukamy pomysłów na tematy do omówienia. Sporządziliśmy już listę kilku oczywistych, takich jak dyskusje/szkolenia na temat konkretnych aplikacji, właściwe wykorzystanie TFS do kontroli źródeł, śledzenie błędów i przeglądy kodu, standardy kodowania i architektura korporacyjna. Problem, jaki mamy, polega na tym, że jesteśmy wieloplatformowym zespołem programistycznym, więc nie chcemy zajmować się tematami, które dotyczą tylko niektórych członków zespołu (Sql, .NET, raportowanie, aplikacje innych firm itp.). Wykorzystamy do tego spotkania podzespołu. Więc jakie inne tematy, które miałyby zastosowanie w szerokim zespole programistycznym, byłyby dobre dla tych sesji szkoleniowych?


title: Zapobieganie niektórym wadom statycznej klasy

text: Oto moja sytuacja. W tym pytaniu zaimplementowałem zaakceptowaną odpowiedź .NET 4.0, która działa. Jednak moja baza kodu jest dość duża i jako odpowiedzialny za ten kod zacząłem otrzymywać zapytania dotyczące tego rozwiązania. Zapytano mnie, czy nie ma prostszych sposobów na osiągnięcie tego samego i czy istnieje sposób na skrócenie użytkowania. W prawie wszystkich przypadkach ta klasa służy do pobierania lub ustawiania tylko jednej właściwości. To faworyzuje inne rozwiązania, ponieważ użycie kończy się tak: `new UserSessionData().CustomerNumber = 123;` Najbliższą rzeczą, jaką mam, jest klasa (statyczna lub nie) ze statycznymi składowymi i metodami, na przykład: public static class UserSessionData { public static Dictionary<string, string> AsDictionary() { return typeof(UserSessionData).GetProperties() .ToDictionary(p => p.Name, p => p.GetValue(null, null) as string); } prywatny ciąg statyczny Get(Expression<Func<string>> e) { var me = e.Body as MemberExpression; return ExternalInterfaceClass.Get(me.Member.Name); } private static void Set(Expression<Func<string>> e, string value) { var me = e.Body as MemberExpression; ExternalInterfaceClass.Set(me.Member.Name, value); } public statyczny ciąg NumerKlienta { get { return Get(() => NumerKlienta); } set { Set(() => NumerKlienta, wartość); } } // ... i setki innych właściwości podobnych do "CustomerNumber" } Wydaje się, że jest to całkiem dobre rozwiązanie: * Jest mocno typowane (tzn. mogę łatwo refaktoryzować `CustomerNumber`) * Użycie jest świetne (`UserSessionData.CustomerNumber = 123;`) * Schemat nie jest _tak_ brzydki - myślę, że jest do przyjęcia. Jest jednak jedna sprawa, nad którą nie mogę się połapać. Czasami musimy być w stanie użyć tego nieco inaczej, A) jako typu zwracanego i B) zbiorczej edycji struktury przed zapisaniem. Jeśli chodzi o A, rozumiem, że klasa statyczna nie może być użyta jako typ zwracany, jednak nie wiem, jakie byłyby moje alternatywy w tej konkretnej sytuacji? Jeśli chodzi o B, sądzę, że mógłbym opóźnić faktyczne zapisywanie, dostarczając określoną podklasę i wymagając jawnego zapisania, ale użycie byłoby pogorszone w normalnym przypadku użycia (ustawienie lub uzyskanie pojedynczej właściwości), ponieważ każdy jeden wiersz musiałby następuje wywołanie metody save. Myślałem o stworzeniu interfejsu dla klasy, ale interfejsy nie mogą definiować właściwości statycznych. Czuję się tu trochę zamroczona, pomoc jest doceniana. Prosimy o podanie minimalnego przykładu kodu podczas prezentowania swoich myśli, jeśli to możliwe - to bardzo wyjaśnia sprawę.


title: Jak mogę uratować wydział informatyki i inżynierii mojej uczelni?

text: Obecnie kończę studia licencjackie Doktorat z inżynierii komputerowej na Uniwersytecie Florydy, a teraz mamy mały problem... Stan niedawno uchwalił plan budżetowy, który obcina fundusze na szkolnictwo wyższe na Florydzie. Dziekan College of Engineering UF zdecydował, że najlepszym sposobem na zamortyzację tego ciosu jest wykonanie następującego planu: * Wszystkie programy studiów inżynierskich, BS, MS i PhD, zostaną przeniesione z Computer & Information Science i Wydział Inżynierii do Wydziału Inżynierii Elektrycznej i Komputerowej wraz z większością personelu doradczego. * Mniej więcej połowa wydziału miałaby możliwość przejścia na inż. elektrotechnikę, inż. biomed. lub inż. * Stanowiska pracowników w CISE, które obecnie wspierają programy badawcze i dla absolwentów, zostałyby zlikwidowane. * Działania obecnie objęte PT zostałyby przeniesione na wydział, a budżet PT na CISE zostałby zlikwidowany. * Każdy członek wydziału, który chce pozostać w CISE, może to zrobić, ale ze zmienionym zadaniem skoncentrowanym na nauczaniu i doradzaniu. W skrócie: **nasz wydział (przynajmniej taki, jaki znamy) jest dziesiątkowany.** Informatyka i informatyka oraz inżynieria (jeden z 9 wydziałów w College of Engineering) przejmuje ponad 50% cięć. Jeśli chcesz przeczytać pełną propozycję, możesz uzyskać do niej dostęp tutaj. Zdecydowana, OGROMNA większość studentów i wykładowców na wydziale zdecydowanie sprzeciwia się temu planowi, jednak dziekan już podejmuje działania w celu jego realizacji. To jedyna propozycja na stole w tej chwili, a ona nie przyjęła naszych próśb o alternatywy. Postrzega to jako oczywiste (choć drastyczne) rozwiązanie naszego problemu budżetowego, powołując się na fakt, że wiele innych uniwersytetów połączyło wydziały Informatyki i Elektrotechniki. Założę się, że te uniwersytety nie musiały eliminować istniejącego wydziału, aby się tam dostać. Budżet wchodzi w życie 1 lipca 2012 r. (nie podlega negocjacji), a propozycja dziekana ma zostać sfinalizowana w przyszłym tygodniu. Nie mamy dużo czasu! **Moje pytanie do wszystkich tutaj jest takie**: Czy przesadzamy z tym planem, czy jesteśmy usprawiedliwieni? Czy mógłbyś wyjaśnić dlaczego, a dlaczego nie? To oczywiste, że studenci CISE będą opierać się jakimkolwiek cięciom w naszym wydziale, ale jestem ciekaw, co mają do powiedzenia inni ludzie w tej dziedzinie. Wszelkie opinie są mile widziane. **Wybiorę odpowiedź, która uratuje nasz wydział.** Żartuję, wybiorę tę, która najlepiej wyjaśnia, dlaczego jest to dobra lub zła decyzja, którą podejmuje dziekan. Pamiętaj, że wszystko, co powiesz, _może_ i _zostanie_ wykorzystane do wspierania naszej sprawy (i możemy Cię wyśledzić, jeśli przedstawisz przekonujący argument przeciwko nam).


title: Możliwe zastosowania algorytmu opracowanego do rozróżniania tekstu strukturalnego od losowego

text: Napisałem program, który potrafi szybko (w ciągu 5 sekund na 2 GB RAM-u, procesorze 2,33 GHz) rozróżnić tekst strukturalny (np. angielski) od losowych ciągów alfanumerycznych. Może również zapewnić ocenę prawdopodobieństwa prognozy. Czy są jakieś praktyczne zastosowania/zastosowania takiego programu? Zwróć uwagę, że program jest oparty na modelach entropijnych i nie ma żadnych porównań słownikowych w swoim przepływie pracy.


title: Jak wytłumaczyć nie-programistom historię programowania?

text: Przepraszam, jeśli to pytanie nie jest odpowiednie dla tej witryny wymiany stosów, nigdy wcześniej tego nie używałem. Robię mój starszy projekt z programowania komputerowego. Zaprezentuję projekt kolegom z klasy, nauczycielom i (co najważniejsze) sędziom, którzy nie mają najmniejszego pojęcia, czym jest programowanie. Moje pytanie jest dość szerokie, ale jak mam sprawić, by mój projekt dotyczył programowania, ale nadal był wystarczająco prosty, aby jurorzy mogli to zrozumieć? Oto kilka rzeczy, które brałem pod uwagę: 1. Projekt skupi się na historii programowania, co osiągnął, jak jest dzisiaj używany itd., a także pokażę zdjęcia kodu i powiem "Tak wygląda kod". Tak więc prezentacja byłaby prosta, łatwa i przeciętna. 2. Spróbuj wyjaśnić trochę kodu, być może pokaż pętlę w działaniu lub coś w tym rodzaju, i spróbuj zmusić publiczność do przemyślenia, zamiast po prostu patrzeć, jak ktoś prezentuje coś, co uważa za nudne. Ale z drugiej strony nie chcę, żeby czuli się głupi czy coś.


title: używanie liczb całkowitych bez znaku w c, c++

text: Mam bardzo proste pytanie, które od dawna mnie zbija z tropu. Mam do czynienia z sieciami i bazami danych, więc dużo danych z którymi mam do czynienia to liczniki 32-bitowe i 64-bitowe (bez znaku), identyfikatory 32-bitowe i 64-bitowe (również nie mają sensownego mapowania znaku). Praktycznie nigdy nie zajmuję się realną materią słów, którą można by wyrazić jako liczbę ujemną. Ja i moi współpracownicy rutynowo używamy do tych celów typów bez znaku, takich jak uint32_t i uint64_t, a ponieważ zdarza się to tak często, używamy ich również do indeksów tablicowych i innych typowych zastosowań liczb całkowitych. Jednocześnie różne przewodniki po kodowaniu, które czytam (np. Google) odradzają stosowanie typów całkowitych bez znaku, a o ile wiem, ani Java, ani Scala nie mają typów całkowitych bez znaku. Nie mogłem więc wymyślić, co należy zrobić: używanie wartości ze znakiem w naszym środowisku byłoby bardzo niewygodne, jednocześnie kodując przewodniki, aby nalegać na robienie dokładnie tego.


title: Czy można przekonwertować zestaw danych z procedury składowanej na IEnumerable?

text: Tak więc pracuję nad projektem z zespołem i korzystamy z Entity Framework. Zasadniczo chcemy używać linq to encji, a nie używać procedur składowanych. Używam sporo list i IEnumerables, podobnie jak wszyscy inni. Moje pytanie brzmi, czy przekonwertowanie zestawu danych utworzonego przez procedurę składowaną na IEnumerable znacznie zmniejszy szybkość działania aplikacji, powiedzmy, że analizuje 1000 wierszy. A może lepiej byłoby przekonwertować procedurę sklepu na linq do encji (procedura jest nieco skomplikowana). Nie skonfigurowaliśmy jeszcze testów jednostkowych i integracji.


title: Pliki INI czy Rejestr czy pliki osobiste?

text: Chcę zapisać konfigurację mojego projektu, która obejmuje 1. Rozmiar ekranu 2. Położenie ekranu 3. Ścieżki folderów 4. Ustawienia użytkowników i tak dalej. Standardowymi miejscami, w których można je zapisać, są wartości konfiguracyjne: 1. Rejestr 2. Pliki INI 3. Pliki osobiste (np. *.cfg) Jak wybierać między tymi miejscami? Poza tym, czy są jakieś **plusy i minusy** korzystania z któregoś z nich?


title: Jaka jest różnica między zasobem a zasobem?

text: Użyłem kilku IDE i stworzyłem kilka domyślnych projektów. Po utworzeniu znajdę struktury folderów stworzone dla mnie. Czasami widzę folder Zasoby, czasami Zasoby, a czasami oba. Czy rzeczywiście istnieje (standardowa) różnica?


title: 2-letni stopień plus doświadczenie vs 4-letni stopień naukowy

text: W porządku, trochę przeszukałem tę stronę i znalazłem dwa podobne pytania: Certyfikat z programowania w informatyce a stopień z informatyki? Czy jest możliwe/prawdopodobnie uczciwe wynagrodzenie bez dyplomu ukończenia studiów wyższych? Ale to nie daje odpowiedzi konkretnie na to, czego szukam. Mam 2 lata A.A.S. Dyplom z programowania komputerowego wraz z certyfikatem sieciowym z uczelni technicznej. Od 3 lat pracuję również w małej firmie zajmującej się tworzeniem gier edukacyjnych na różnych stanowiskach, ale stopniowo awansuję i teraz jako główny programista przy kilku projektach. Niektórzy z wyższych programistów, z którymi pracuję, twierdzą, że bez względu na to, ile doświadczenia rozwinę, to i tak nie będzie to znaczyło tyle, co ktoś z 4-letnim stopniem naukowym. Ich argumentem jest to, że większość pracodawców przejrzy moje CV ze względu na powszechny wymóg minimum „4 lata”. Słyszałem też, że ludzie (choć nie tak wielu) mówili, że doświadczenie jest wszystkim i że pracodawca wolałby mieć kogoś, kto pracował w terenie, zamiast nowicjusza świeżo po studiach. Słyszałem obie strony tego sporu, ale szukam ogólnego konsensusu lub więcej argumentów z obu stron od ludzi, którzy tam byli lub są.


title: Jak mogę połączyć C/Fortran z JavaScriptem?

text: Pracuję nad projektem, w którym potrzebuję ciężkich obliczeń numerycznych do wizualizacji w czasie rzeczywistym za pomocą czegoś elastycznego, takiego jak D3.js. Czy istnieją frameworki, które pozwoliłyby mi to bezboleśnie osiągnąć? A może muszę użyć jakiegoś „klejowego” kodu napisanego, powiedzmy, w Pythonie?


title: Jak w TFS powinny być zorganizowane różne „wydania”? (wersja 1.0, wersja 2.0)

text: Importuję witrynę internetową do TFS, która jest przechowywana w SourceSafe jako $/MyApp 1.0 $/MyApp 2.0 $/MyApp 3.0 $/MyApp 3.5 „MojaAplikacja”?


title: Przekaż kod źródłowy klientowi

text: Zrobiłem kilka aplikacji na iPhone'a dla klienta i dzisiaj zostałem poproszony o przekazanie kodu źródłowego, aby mogli przeprowadzić konserwację, jeśli będzie to wymagane. Do tej pory nie omawiano żadnych problemów z kodem. Czy jest jakaś „powszechna” praktyka w tym zakresie? W jaki sposób powinno to wpłynąć na cenę?


title: Co wyjaśnić na pytanie „Jak wdrożyłeś MVC”?

text: Mam w CV projekt, w którym użyliśmy `architektury MVC` oraz `Java, JSP i MySQL`. Dlatego podczas rozmów kwalifikacyjnych, jeśli stanowisko wymaga doświadczenia z architekturą MVC, muszę zmierzyć się z pytaniem typu „`Wyjaśnij ten projekt`”. Czego dokładnie oczekuje ankieter? Wiem, że chcą wiedzieć, jak wdrożyliśmy MVC. Ale jakie „dokładne” szczegóły powinienem im przekazać w krótkim czasie 2-3 minut? Jakie kluczowe cechy/części mam wyjaśnić? Czy ktoś doświadczony może dać jakieś wyobrażenie na ten temat? Projekt dotyczy systemu zarządzania urlopami.


title: Wywiad - Utwórz portfolio, aby pokazać moje umiejętności

text: Mam około pięciu lat doświadczenia w rozwoju PHP i około roku doświadczenia z ExpressionEngine. Korzystam z PHP 5, HTML, CSS, JavaScript i innych technologii webowych. Postanowiłem stworzyć stronę portfolio i zamieścić setki (jeśli czas na to pozwoli) małych przykładów, aby udowodnić moje umiejętności. Następnie na rozmowie kwalifikacyjnej, jeśli ankieter poprosi mnie o pokazanie mojej pracy, pokażę stronę z moim portfolio. Czy to dobre podejście? Jeśli tak, czy możesz zaproponować mi jakieś świetne, kreatywne projekty do włączenia do mojego portfolio? Myślę: 1. Model View Controller 2\. Prosta witryna e-commerce 3\. System zarządzania treścią (CMS)


title: Pytania o algorytm Boga i kostkę Rubika

text: Tworzę kostkę Rubika do rozwiązywania. Dobrze by było, gdyby solver potrafił rozwiązywać kostki dowolnej wielkości i generował krótkie rozwiązania. Znalazłem wiele różnych informacji na temat algorytmu Boga, który jak rozumiem jest w stanie rozwiązać różne zagadki, nie tylko kostkę Rubica. Więc chcę zaimplementować algorytm Boga, ale nie mogę znaleźć żadnego prostego wyjaśnienia tego algorytmu. W prostych słowach, jak faktycznie działa algorytm Boga?


title: Czy w zależności od leniwego ładowania zapach kodu?

text: Podczas mojego krótkiego doświadczenia z DDD często znajdowałem się w sytuacji, w której chciałem mieć jakiś mechanizm leniwego ładowania, aby rozwiązać niektóre niebezpieczne przypadki, w których mogą być ładowane duże zagnieżdżone zestawy danych. Jednak po pewnym czasie zdałem sobie sprawę, że za każdym razem był to objaw źle zaprojektowanego zbiorczego korzenia, który wziął na siebie zbyt dużą odpowiedzialność. Dodatkowo bywało tak, że kruszywa powinny być w pełni załadowane, aby wykonać operacje konsystencji. Przyzwyczajenie się do pracy z identyfikatorami jednostek nieco ułatwiło sprawę. Więc po chwili zastanawiam się... czy leniwe ładowanie śmierdzi kodem? Czy to jest po prostu budowanie niedojrzałych modeli bez powodowania dużego problemu?


Jakie role pełnią ludzie po scrum master/technice? EDIT: Moja obecna rola jest mieszanką kierownika technicznego i roli scrum mastera, ale tak właśnie robimy w mojej firmie :) )


title: Radzenie sobie z dużą liczbą żądań usług internetowych i przechowywanie tych danych

text: Mam aplikację komputerową, która co 5 minut wysyła żądanie POST do mojej witryny. To żądanie post może zawierać zmienną ilość danych o komputerze wysyłającym żądanie, ale zazwyczaj zawiera około 20-30 zmiennych informacji. Przechowuję wszystkie te informacje w tabeli MySQL w formacie takim jak RequestID|Field|Value. Chcę mieć to wszystko, aby móc generować raporty trendów z 24 godzin, 48 godzin, tygodni, miesięcy, lat itd. Może to oznaczać około 10 000 wierszy danych każdego dnia. To 3 miliony wierszy danych rocznie. Wyobrażam sobie 20-30 osób korzystających z mojej strony internetowej i bazy danych przechowującej 100 milionów wierszy danych rocznie. Jaki jest najlepszy sposób na podejście do tego rodzaju usługi „powiadomień” i jej skalowanie?


title: Najbardziej „natywny”/zintegrowany język funkcjonalny dla rozwoju Mac OS X?

text: Jeśli ktoś postrzega środowisko uruchomieniowe CLR/.NET i powiązane biblioteki jako przyszłość systemu Windows, wówczas język programowania F# może być postrzegany w tym świetle jako najbardziej natywny język funkcjonalny. Oznacza to, że ma wsparcie od twórcy systemu operacyjnego, prawdopodobnie najlepiej integruje się z ich bibliotekami itp. Czy istnieje podobny logiczny wybór języka na platformie Mac OS X? Podczas gdy sam najbardziej ojczysty język jest oczywiście celem C, czy istnieje pierwszy wśród równych lub najbardziej oczywisty język paradygmatu funkcjonalnego, który się wyróżnia?


title: Jak ważna jest nauka jQuery z ASP.NET

text: Czytam rozdział dotyczący jQuery w książce ASP.NET. Szczerze mówiąc uważam to za nudne. Jak ważna jest nauka jQuery? I czy wielu programistów ASP.NET używa go na swoich stronach? Pozdrawiam TDG


title: Jak mogę profilować zapytania do bazy danych z PHP?

text: CodeIgniter posiada bardzo fajną funkcję o nazwie Profiler, która wyświetla informacje u dołu strony, takie jak GET, Memory, dane POST. Pokazuje również zapytania do bazy danych i czas ich uruchomienia, co uważam za bardzo przydatne. Niedawno przejąłem starszą aplikację PHP i bardzo pomogłoby mi zobaczyć, które tabele w bazie danych są przeszukiwane przez strony PHP. Czy istnieje biblioteka dla surowych aplikacji PHP, która mogłaby stworzyć coś podobnego do Profilera CodeIgnitera? Korzystam już z xdebug, interesuje mnie tylko profilowanie zapytań do bazy danych.


title: Przykład fuzji pętli przy użyciu frameworka zorientowanego aspektowo

text: Niedawno przeczytałem artykuł 'Programowanie zorientowane na aspekty' autorstwa Gregora Kiczalesa i innych i znalazłem tam przykład _fuzji pętli_. Oto definicja fuzji pętli z artykułu > …fuzja pętli składa się z połączenia pętli tych filtrów pierwotnych >, które mają tę samą strukturę pętli i są bezpośrednimi sąsiadami na wykresie przepływu danych. Każda z tych zasad kompozycji jest łatwa do zrozumienia, gdy > patrzy się na jej własny odpowiedni obraz. Ale te dwie relacje kompozycyjne – > statki przecinają się nawzajem tak fundamentalnie, że każdy z nich jest bardzo trudny > do zobaczenia na zdjęciu drugiego. W dalszej części artykułu _fuzja pętli_ wspomniano o implementacji przy użyciu protokołu metaobiektu w Lisp: > …aspekt fuzji pętli … może być zaimplementowany, z pewnym stopniem wydajności, przy użyciu funkcji łączenia metod w metaobiektu CLOS. > protokół Jak wygląda _fuzja pętli_ lubisz używać jakichkolwiek nowoczesnych frameworków zorientowanych aspektowo w statycznych lub dynamicznych językach typizowanych? Szukam przykładów języka aspektów i porad, które mogłyby zrobić _fuzję pętli_. ### Stan na połowę stycznia 2013 r. Dopóki nie ma innej odpowiedzi, zaznaczyłem własną odpowiedź jako odpowiedź. W każdym razie wciąż czekam na przykłady z innych języków/frameworków. **ps** : _loop fusion_ dyskusja na forum książki "AOP w .NET" @manning forum


title: W jaki sposób zostałyby wykryte błędy typograficzne podczas tworzenia mocków w dynamicznym języku?

text: Problem pojawia się podczas wykonywania TDD. Po kilku przejściach testowych typy zwracane przez niektóre klasy/moduły ulegają zmianie. W statycznie typowanym języku programowania, jeśli poprzedni modelowany obiekt był używany w testach jakiejś _innej_ klasy i nie został zmodyfikowany w celu odzwierciedlenia zmiany typu, wystąpią błędy kompilacji. Jednak w przypadku języków dynamicznych zmiana typów zwracanych może nie zostać wykryta, a testy klasy _other_ nadal zakończą się pomyślnie. Oczywiście mogą istnieć testy integracyjne, które później powinny zakończyć się niepowodzeniem, ale testy jednostkowe błędnie zaliczą. Czy jest jakiś sposób, jak tego uniknąć? Aktualizacja za pomocą trywialnej próbki (w niektórych wymyślonych językach)... Wersja 1: Calc = { doMultiply(x, y) {return x * y} } //.... więcej kodu .... // W niektórych daleki zdalny kod na innym pliku Rect = { computeArea(l, w) {return Calc.doMultipy(x*y)} } // test dla Rect testComputeArea() { Calc = new Mock() Calc.expect(doMultiply, 2 , 30) // gdzie 2 to arity attachEqual(30, computeArea) } Teraz w wersji 2: // zmieniam typy zwracane. Aktualizuję również testy dla Calc Calc = { doMultiply(x, y) {return {return: (x * y), success:true}} } ...Rect wyrzuci wtedy wyjątek w czasie wykonywania, ale test nadal będzie odnieść sukces.


title: Interpretowanie kodu źródłowego innych osób

text: Uwaga: znam to pytanie. To pytanie jest nieco bardziej szczegółowe i dogłębne, jednak skupia się na czytaniu samego kodu, a nie na debugowaniu go lub pytaniu autora. Moi znajomi, jako uczeń klasy wstępnej z informatyki, od czasu do czasu proszą mnie o pomoc w ich zadaniach. Programowanie to coś, z czego jestem bardzo dumny, więc zawsze chętnie się do tego zobowiązuję. Jednak zwykle mam trudności z interpretacją ich kodu źródłowego. Czasem wynika to z dziwnego lub niespójnego stylu, czasem z dziwnych wymagań projektowych określonych w zadaniu, a czasem po prostu z mojej głupoty. W każdym razie wyglądam jak idiota gapiący się na ekran przez kilka minut i mówiący „Uh…” Zwykle najpierw sprawdzam typowe błędy – brak średników lub nawiasów, używając przecinków zamiast operatorów ekstraktora itp. Kłopot przychodzi, gdy to się nie powiedzie. Często nie mogę przejść z debuggerem, ponieważ jest to błąd składni, i często nie mogę zapytać autora, ponieważ on / ona sam nie rozumie decyzji projektowych. Jak zazwyczaj czytasz kod źródłowy innych osób? Czy czytasz kod od góry do dołu, czy śledzisz każdą funkcję tak, jak jest wywoływana? Skąd wiesz, kiedy powiedzieć „Czas na refaktoryzację”?


title: Jakie są wyzwania związane z tworzeniem skalowalnej aplikacji internetowej w czasie rzeczywistym?

text: Zajmuję się aplikacjami internetowymi czasu rzeczywistego przy użyciu gniazd sieciowych i node.js. Interesuje mnie, jakie są techniczne wyzwania związane ze skalowaniem takiej konfiguracji. Jednym z takich problemów, o których słyszałem, jest to, że każde gniazdo wymaga deskryptora pliku uniksowego, a epoll/select zajmuje czas liniowo do liczby otwartych deskryptorów plików. Czy ktoś ma inny wgląd w skalowanie?


title: Aby nauczyć się nowego języka/ram, który sposób jest lepszy?

text: Czy lepiej uczyć się nowego języka lub frameworka, pracując z kimś innym nad istniejącym projektem, czy samodzielnie tworząc nowy? Miałem doświadczenie w pracy nad projektem szyn o otwartym kodzie źródłowym przez cztery miesiące. Projekt był ładnie napisany i zawiera wiele dobrych przykładów do nauczenia się, ale ostatecznie nie dostałem zbyt wiele szyn. Na koniec wciąż byłem zdezorientowany wieloma koncepcjami rails/MVC. Z drugiej strony, po tym projekcie rails, sam zacząłem tworzyć od podstaw ASP.net MVC. Skończyło się na pomyślnym zbudowaniu w pełni działającej strony internetowej MVC i korzystałem z wielu funkcji ASP.net MVC. Po tym projekcie miałem o wiele lepsze wyobrażenie o mechanizmach MVC i ASP.net MVC, ale w międzyczasie mogłem zastosować wiele złych rozwiązań, nawet nie zdając sobie z tego sprawy. Jak myślisz, który sposób jest lepszy do nauki? Jakie są zalety i wady każdego podejścia?


title: Semantyka czy struktura - kto powinien preferować nazewnictwo zmiennych?

text: W naszym projekcie mamy stos wywołań. Program jest napisany dla mikrokontrolera w języku C. Stos wywołań to w zasadzie tablica liczb całkowitych. Zmienna reprezentująca ten stos wywołań kończy się ciągiem `_stack`. Przeglądałem wdrożenie. Ta funkcja to przywracanie resetowania, a nie stos wywołań, ale stos wywołań jest częścią funkcji. Kiedy po raz pierwszy zobaczyłem zmienną, pomyślałem, że jest używana jako stos. Założyłem więc, co następuje: * Nie można uzyskać dostępu do wpisów innych niż ostatni wpis. * Będą operacje PUSH/POP/CLEAR/TOP. Następnie odkryłem, że pierwszy wpis (indeks 0) jest zawsze sprawdzany w specjalnym warunku. Znalazłem również funkcję, w której wszystkie elementy tablicy są odczytywane sekwencyjnie od indeksu 0 do góry. Oba z nich są nieprawidłową operacją na stosie. Myślę, że nazwa zmiennej nie powinna zawierać ciągu `stack`, ponieważ nie jest to stos, a raczej jest używana jako lista. Ale koder pokazuje poprawną logikę, że zgodnie z semantycznym znaczeniem jest to stos i faktycznie są operacje PUSH. Czy zmienna powinna być nazwana za pomocą `*stack*`?


title: Czy muszę internacjonalizować wyświetlanie wartości szesnastkowych?

text: W przypadku liczb dziesiętnych oczywiście chcę zlokalizować wszystko. Niezależnie od języka programowania, w którym pracuję, będą do tego dostępne narzędzia, więc jest to również łatwe do zrobienia. W mojej aplikacji często formatuję liczby jako szesnastkowe. To prowadzi mnie do zastanowienia się: * Czy istnieją lokalizacje, które grupują liczby szesnastkowe w różne grupy? * Czy istnieją lokalizacje, które używają separatora innego niż spacja dla grupowania? * Czy A-F są używane jako dodatkowe sześć cyfr nawet w lokalizacjach, które nie używają alfabetu łacińskiego? Myślę ogólnie - czy muszę to umiędzynarodowić, czy wszyscy na świecie patrzą na tę samą wartość szesnastkową i rozumieją ją w ten sam sposób?


title: Implementacja wzorca odwiedzającego dla abstrakcyjnego drzewa składni

text: Jestem w trakcie tworzenia własnego języka programowania, który wykonuję w celach edukacyjnych. Napisałem już lekser i rekurencyjny parser zstępujący dla podzbioru mojego języka (obecnie wspieram wyrażenia matematyczne, takie jak `+ - * /` i nawiasy). Parser przekazuje mi drzewo składni abstrakcyjnej, na którym wywołuję metodę `Evaluate`, aby uzyskać wynik wyrażenia. Wszystko dziala. Oto w przybliżeniu moja obecna sytuacja (przykłady kodu w C#, chociaż jest to w dużej mierze niezależne od języka): public abstract class Węzeł { public abstract Double Evaluate(); } public class OperationNode : Node { public Node Left { get; ustawić; } prywatny operator ciągu { get; ustawić; } prywatne prawo węzła { get; ustawić; } public Double Evaluate() { if (Operator == "+") return Left.Evaluate() + Right.Evaluate(); //Ta sama logika dla pozostałych operatorów } } public class NumberNode : Node { public Double Value { get; ustawić; } public Double Evaluate() { return Value; } } Chciałbym jednak oddzielić algorytm od węzłów drzewa, ponieważ chcę zastosować zasadę Open/Closed, więc nie muszę ponownie otwierać każdej klasy węzła, gdy chcę na przykład zaimplementować generowanie kodu. Czytałem, że Wzorzec Gościa jest do tego dobry. Dobrze rozumiem, jak działa wzorzec i że użycie podwójnej wysyłki jest najlepszym rozwiązaniem. Ale ze względu na rekurencyjny charakter drzewa nie jestem pewien, jak mam do niego podejść. Oto jak wyglądałby mój Visitor: public class AstEvaluationVisitor { public void VisitOperation(OperationNode node) { // Tutaj operuję na węźle operacji. // Jak zaimplementować tę metodę? // OperationNode ma dwa węzły podrzędne, które mogą mieć inne węzły podrzędne // Jak pracować z wzorcem gościa wokół struktury rekurencyjnej? // Czy powinienem uzyskać dostęp do węzłów potomnych i wywołać ich metodę Accept, aby zostały odwiedzone? // A może ich metoda Accept powinna zostać wywołana z Accept rodzica? } // Inne Implementacja wizyty według typu węzła } Więc to jest mój problem. Chcę rozwiązać ten problem natychmiast, podczas gdy mój język nie obsługuje wielu funkcji, aby uniknąć późniejszego większego problemu. Nie wysłałem tego do StackOverflow, ponieważ nie chcę, abyś dostarczał implementację. Chcę tylko, abyś podzielił się pomysłami i koncepcjami, które mogłem przegapić i jak mam do tego podejść.


title: Określanie „wartości” w wieloagentowej symulacji mikroekonomii

text: Próbuję określić obiektywny sposób, w jaki zainteresowany agent może obliczyć optymalną cenę kupna/sprzedaży towarów w symulacji wieloagentowej, podobnej do Sugarscape (http://en.wikipedia.org/wiki/Sugarscape). Symulacja wygląda następująco: każdy agent ma zapas żywności F, zapas pieniędzy G, pewną ilość „energii”, E i pozycję (x, y) na siatce kwadratowej. Przemieszczanie się z jednego kwadratu na sąsiedni kwadrat zużywa A jednostki energii, a energia jest naturalnie zużywana w tempie B jednostek na dzień symulacji. Agent ma do dyspozycji następujące opcje każdego dnia: zjedz jednostkę jedzenia, aby zwiększyć jego energię o Q jednostek; przenieś się w inne miejsce (pod warunkiem, że ma wystarczającą ilość energii), "pokarm" na żywność (wydaj P jednostek energii, aby uzyskać [prawdopodobnie nieznaną] ilość żywności) lub handluj z sąsiednim agentem za wzajemnie uzgodnioną cenę. Celem każdego agenta jest maksymalizacja jego „funkcji użyteczności” U(E, F, G) bez względu na funkcję innych agentów. Od razu wydaje się, że daje to podstawową „wartość użytkową” żywności: Vuse = U(E + Q, F - 1, G) - U(E, F, G), ale gdyby to była cała historia, to byłoby nie będzie interesującym problemem. Wygląda na to, że najbardziej ogólne (ale w czasie wykładniczym) rozwiązanie wyglądałoby mniej więcej tak: Funkcja SearchActions(State S): Dodaj(spożywaj jedzenie) do zestawu akcji Dodaj(pasaż na jedzenie) do zestawu akcji Dla każdego innego agenta A Dla każdego możliwego cena handlowa P Dodaj (handluj z A po cenie P) do zestawu akcji Dla każdej akcji X w zestawie akcji S' = Zastosuj X do S SearchActions(S') Zwróć optymalną funkcję X End Jednak główna trudność zostaje zmieciona pod dywan „za każdą możliwą cenę”, ponieważ cena, za którą agent A będzie kupować/sprzedawać, sama zależy od identycznej kalkulacji… np. Moja kalkulacja wartości zależy albo od tego, co mogę uzyskać, używając go samemu, albo od tego, ile ktoś za to zapłaci... ale to, co za to zapłacą, zależy od tego, ile ja za to zapłacę. Jak przeciąć ten węzeł? Wiem, że ten problem został już wcześniej rozwiązany... ale nie mogę znaleźć do niego żadnych odniesień, nie mówiąc już o rzeczywistych implementacjach. Najbliższy mi był artykuł o „Planowaniu strategicznym” w SugarScape, ale wydaje się, że podaje tylko wyniki planowania, a nie wyjaśnia, w jaki sposób odbywa się planowanie.


**Nie deklaruj interfejsów dla niezmiennych obiektów** [EDYTUJ] _Gdzie przedmiotowe obiekty reprezentują obiekty transferu danych (DTO) lub zwykłe stare dane (POD)_ Czy to rozsądna wytyczna? Do tej pory często tworzyłem interfejsy dla klas zapieczętowanych, które są niezmienne (dane nie mogą być zmieniane). Sam starałem się uważać, aby nie używać interfejsu w miejscach, w których zależy mi na niezmienności. Niestety interfejs zaczyna przenikać do kodu (i nie tylko o mój kod się martwię). W końcu otrzymujesz interfejs, a następnie chcesz przekazać go do jakiegoś kodu, który naprawdę chce założyć, że przekazywana rzecz jest niezmienna. Z powodu tego problemu rozważam nigdy nie deklarowanie interfejsów dla obiektów niezmiennych. Może to mieć konsekwencje w odniesieniu do testów jednostkowych, ale poza tym, czy wydaje się to rozsądną wytyczną? A może jest jakiś inny wzorzec, którego powinienem użyć, aby uniknąć problemu „rozprzestrzeniania-interfejsu”, który widzę? (Używam tych niezmiennych obiektów z kilku powodów: głównie ze względu na bezpieczeństwo wątków, ponieważ piszę dużo kodu wielowątkowego; ale także dlatego, że mogę uniknąć tworzenia kopii obronnych obiektów przekazywanych do metod. Kod staje się znacznie prostszy w w wielu przypadkach, gdy wiesz, że coś jest niezmienne – czego nie wiesz, jeśli otrzymałeś interfejs.W rzeczywistości często nie możesz nawet wykonać obronnej kopii obiektu, do którego odwołuje się interfejs, jeśli nie zapewnia on operacja klonowania lub jakikolwiek sposób jej serializacji...) [EDYTUJ] Aby zapewnić dużo więcej kontekstu dla moich powodów, dla których chcę uczynić obiekty niezmiennymi, zobacz ten wpis na blogu autorstwa Erica Lipperta: http://blogs.msdn.com/b /ericlippert/archive/tags/immutability/ Powinienem również zaznaczyć, że pracuję tutaj z pewnymi koncepcjami niższego poziomu, takimi jak elementy, które są manipulowane/przekazywane w wielowątkowych kolejkach zadań. Są to zasadniczo DTO. Również Joshua Bloch zaleca użycie niezmiennych obiektów w swojej książce Efektywna Java. * * * **Kontynuacja** Dziękuję wszystkim za opinię. Zdecydowałem się skorzystać z tych wytycznych dla DTO i im podobnych. Jak na razie działa dobrze, ale minął dopiero tydzień... Mimo to wygląda dobrze. Jest kilka innych kwestii z tym związanych, o które chciałbym zapytać; szczególnie coś, co nazywam „głęboką lub płytką niezmiennością” (nomenklaturę, którą ukradłem z klonowania głębokiego i płytkiego) – ale to pytanie na inny czas.


title: W jaki sposób IDE zapewniają automatyczne uzupełnianie, natychmiastowe sprawdzanie błędów i debugowanie?

text: Załóżmy, że masz kompilator języka, dla którego chcesz zbudować IDE. W jaki sposób powszechnie wdrażane jest automatyczne uzupełnianie, natychmiastowe raportowanie błędów podczas pisania kodu i debugery?


title: Najlepsze sposoby na wygenerowanie kodu do umieszczenia na stronie

text: Zajmuję się tworzeniem małej aplikacji webowej w CakePHP, która pozwala użytkownikowi na tworzenie treści przy użyciu dostarczonych przeze mnie narzędzi. Gdy użytkownik zakończy tworzenie treści, chcę dać możliwość osadzenia tego na własnej stronie internetowej. Są dwa sposoby, które mogę teraz wymyślić, aby to zrobić 1. Korzystanie z kodu osadzania iFrame 2. Nadawanie unikalnego linku do tej zawartości Czy istnieją lepsze sposoby na wygenerowanie kodu osadzania? Później chciałbym, aby użytkownik nadał styl (css itp.) tworzonym przez siebie treściom.


title: Czy wysyłanie e-maili jest stratą czasu w Dev Teams?

text: Wiem, że nie jest to ściśle związane z tym, o co tu pytają ludzie, ale i tak muszę o to zapytać. Czy długie rozmowy/dyskusje przez e-maile nie zmniejszają produktywności. Dołączyłem do nowej firmy, w której ludzie wolą e-maile **dużo**. Nie jest to duża firma, więc każda jest dostępna dla wszystkich, a także starsi technicy spotykają się codziennie na 30-minutowe sesje, aby omówić i zaplanować sprawy z menedżerami i udziałowcami. Uważam, że e-maile są świetne i powinny być używane tak długo, jak są na miejscu i nie marnują niczyjego czasu. Z mojego doświadczenia zawodowego zdobywanie lub uzgadnianie rzeczy przez e-maile szybko staje się niekończącą się grą w ping-ponga. Dojście do konkluzji często zajmuje kilka dni tylko dlatego, że… no cóż… nie każdy ma wystarczająco dużo czasu na przejrzenie długich e-maili. Tematy e-maili często stają się mniej subiektywne i bardziej _"re:re:re:re:fw:"_. Po kilku _"re:re's"_ i _"fw:fw's"_ znalezienie tego, czego szukasz, staje się koszmarem, ponieważ nie każda rzecz w e-mailach jest kluczowa, więc powrót do rozmowy po 8-9 miesięcy jest jak przeglądanie czyjegoś kodu źródłowego napisanego w języku C. Nie jest to również najlepsze podejście do omawiania pomysłów lub uzgadniania rzeczy, ponieważ większość ludzi jest bardziej powściągliwa w rozmowach e-mailowych niż w prawdziwym życiu, ponieważ bardzo łatwo jest błędnie zinterpretować swój ton . W większości przypadków o wiele łatwiej i szybciej jest dla mnie wysłanie e-maila z napisem „Porozmawiajmy o X o xx:xx”, a następnie szybka rozmowa telefoniczna w uzgodnionym czasie, zamiast przeciągania sprawy przez kilka dni (lub w niektórych przypadkach tygodnie). W razie potrzeby wysyłam wiadomość e-mail z informacją „no cóż, uzgodniliśmy przez telefon”. Ponadto ludzie zazwyczaj bardziej szanują się nawzajem i są otwarci na dyskusje, gdy rozmawiają twarzą w twarz lub przez telefon. Nie zrozum mnie źle, e-maile są ważne i należy ich używać zawsze, gdy jest to absolutnie konieczne. Ale w małych/średnich zespołach, dlaczego ta kultura (pisania długich historii, np. e-maili) jest tak ważna? dlaczego ludzie nie używają narzędzi takich jak Basecamp, redmine, wiki. W jaki sposób możesz poprawić komunikację swojego zespołu lub firmy, aby ludzie stali się bardziej produktywni i tworzyli przyjazne środowisko. Dziękuję za przeczytanie.


title: Portfel i umowa NDA

text: Tak więc praca z NDA uniemożliwia wspominanie projektów w swoim portfolio. * Jak sobie z tym poradzić? * Jak można by zaprezentować swoje doświadczenie w tym scenariuszu? Na przykład od 2 lat pracowałem nad kilkoma złożonymi aplikacjami na iPhone'a i nie mogę nawet wymienić adresu URL sklepu z aplikacjami w moim CV/profilu online do tych aplikacji z powodu umowy NDA? Czy moje doświadczenie się marnuje?


title: Jak wykonać synchronizację danych między dwiema aplikacjami?

text: Nasz klient ma aplikację CRM (nazwijmy ją `A`) oraz specjalnie zbudowaną aplikację Windows (VB.NET) (nazwijmy ją `B`), która bezpośrednio zapisuje i odczytuje z bazy danych CRM. Aplikacja „A” służy (głównie) do zarządzania klientami i ich zamówieniami. Aplikacja `B` służy do zarządzania wszystkimi produktami sprzedawanymi przez naszego klienta. Nasz klient chce, abyśmy zbudowali sklep internetowy (`C`) przy użyciu formularzy ASP.NET WebForms, aby mogli sprzedawać produkty, którymi zarządzają za pomocą `B`. Wszyscy ich klienci i zamówienia powinni być obecni zarówno w literach „A”, jak i „C”. Ponieważ `B` zajmie się całą komunikacją z `A`, będzie musiał wymyślić sposób na synchronizację danych `B` i `C`. To dla nas coś stosunkowo nowego. Zrobiliśmy coś takiego w przeszłości, ale naprawdę nie podoba mi się sposób, w jaki zostało to rozwiązane: > Kiedy ktoś zamawia coś w sklepie internetowym, **C** umieszcza zamówienie w > pliku XML, zipuje XML i wysyła go do serwera FTP w sieci > **A**. **A** monitoruje katalog na serwerze FTP, rozpakowuje każdy nowy plik, > przetwarza XML, tworzy nowy plik XML, spakuje go i wysyła do serwera FTP w sieci **C* *. **C** monitoruje katalog na serwerze FTP->, rozpakowuje każdy nowy plik i przetwarza XML. > > Dodatkowo, każdej nocy **A** generuje plik XML dla każdej tabeli > w swojej bazie danych, zipuje je i wysyła do serwera FTP w sieci > w **C**. **C** rozpakowuje pliki i pozwala SSIS przetwarzać pliki XML w celu > aktualizacji bazy danych **C**. Naprawdę tego nie lubię. Muszą być inne sposoby, prawda? Prawdopodobnie potrzebujemy synchronizacji pojedynczego rekordu i synchronizacji partii. Jak to się zwykle robi? Usługi internetowe? Coś niestandardowego jak Rhino ETL? Coś innego? **Aktualizacja:** byłoby miło, gdybyś mógł też krótko wyjaśnić, w jaki sposób proponowana przez Ciebie technologia jest zwykle używana i jak wpływa na różne aplikacje.


title: Jak zespół Scrumowy rozlicza zadania infrastrukturalne na spotkaniu planistycznym?

text: W jaki sposób zespół Scrumowy rozlicza zadania deweloperskie/infrastrukturalne na spotkaniu planistycznym? Na pierwszy rzut oka nie wyglądają jak historyjki użytkownika, ponieważ nie dostarczają wartości dla użytkownika końcowego. Jednak dołączanie ich jako zadań do konkretnej historyjki użytkownika też czasami nie ma sensu. Załóżmy na przykład, że zadanie to: „Konfiguracja Bamboo”. To zadanie nie jest wymagane do ukończenia żadnej historyjki użytkownika, ponieważ zespół mógł ręcznie skompilować i wdrożyć. Tak więc dołączenie go do historyjki użytkownika nie ma sensu, ponieważ to zadanie nie jest wymagane do ukończenia historyjki użytkownika. Sugeruje to zatem, że zadania te stają się historyjkami użytkownika. Ale z drugiej strony, jeśli wskazuje na to historia zespołu, zmienia to prędkość, co jest dziwne, ponieważ właściciel produktu chce poznać prędkość w stosunku do swoich zaległości, a nie do swoich zaległości z dołączoną do niego garścią technicznych historyjek użytkownika.


title: Jaka jest dobra książka, która pomoże kierownictwu nietechnicznemu zrozumieć tworzenie oprogramowania?

text: Jeśli masz jakieś osoby nietechniczne zarządzające twoim zespołem programistycznym, czy jest jakaś książka, którą chciałbyś, aby przeczytali, aby lepiej zrozumieć proces? Na przykład w większości prac można dość dobrze oszacować, ile czasu zajmie wykonanie zadania. Ale w rozwoju chodzi o to, że musisz rozwiązać problem, co zajmuje nieznany czas. Trudno to zakomunikować. Coś, co o tym wiesz, dobrze to wyjaśnia?


title: Najgorsze antywzorce, z jakimi się spotkałeś

text: Jakie są najgorsze antywzorce, na jakie natknąłeś się w swojej karierze programisty? Zajmuję się głównie javą, chociaż prawdopodobnie jest ona niezależna od języka. Myślę, że najgorsze jest to, co nazywam **głównym anty-wzorem**. Oznacza program składający się z jednej, niezwykle dużej klasy (czasem z parą małych klas), która zawiera całą logikę. Zazwyczaj z dużą pętlą, w której zawarta jest cała logika biznesowa, czasami zawierająca dziesiątki tysięcy wierszy kodu.


title: Jak używać licencji Apache w moim projekcie, który będzie LGPL?

text: Chcę użyć LGPL do mojego projektu, czy mogę użyć kodu źródłowego na licencji Apache? Jeśli jako biblioteki w moim projekcie używam tylko komponentu na licencji Apache, jak mam dokonać wyjaśnienia w moim projekcie? Czy muszę umieścić informacje o licencji Apache na początku kodu źródłowego korzystającego z biblioteki?


title: Wersjonowanie WCF, nazewnictwo i adres URL punktu końcowego

text: Mam usługę WCF i główną bibliotekę Lib1. Powiedz, mam usługę zapisywania profilu. Program WCF pobiera dane (ze wstępnie zdefiniowanym kontraktem danych) od klienta i przekazuje je do biblioteki Main Class Lib1, generuje odpowiedź i wysyła ją z powrotem do klienta. **Metoda WCF: SaveProfile(ProfileDTO profile)** **Aktualna wersja 1.0** ProfileDTO mają następujące Nazwa użytkownika Hasło Imię DOB (w ciągu rrrr-mm-dd) Data utworzenia (w ciągu rrrr-mm-dd) **Następna wersja (V2.0)** ProfileDTO mają następujące Nazwa użytkownika Hasło Imię DOB (w UnixTimeStamp) Data utworzenia (w UnixTimeStamp) **Wersja 3.0** ProfileDTO mają następujące (ze zmianą w walidacji długości nazwy użytkownika i hasła) Nazwa użytkownika Hasło Imię DOB (w UnixTimeStamp) CreatedDate (W UnixTimeStamp) Po prostu mamy zmianę DataContract i Workflow pomiędzy każdą wersją 1\. Jak nazwać metody w usłudze WCF i klasie głównej Lib1? 2\. Czy muszę stosować jakiś konkretny wzór, aby ułatwić rozwój i utrzymanie? 3\. Czy muszę mieć różne punkty końcowe dla różnych wersji? W powyższym przykładzie mam metodę o nazwie „SaveProfile”. Czy muszę nazywać metody takie jak „SaveProfile1.0”, „SaveProfile2.0” itp. Jeśli tak jest, gdy nie ma zmiany między wersją „3.0” a „4.0”, będzie utrudniona konserwacja. Szukam podejścia, które ułatwi konserwację


title: Kilka wyjaśnień na temat DOM

text: Próbowałem zrozumieć DOM i chociaż mam dobre pojęcie o tym, co to jest, są pewne pomysły, których po prostu nie mogę sprecyzować. Wypiszę, czym moim zdaniem jest DOM, a moje pytania będą wstawiane. 1. DOM jest w pełni obiektową reprezentacją strony internetowej. Standard W3C DOM stanowi podstawę DOM zaimplementowanego w większości nowoczesnych przeglądarek. _Więc DOM mówi o tym, jak dokument XML/HTML jest reprezentowany jako model obiektowy?_ 2. DOM nie określa, że dokumenty muszą być zaimplementowane jako drzewo lub zagajnik, ani jak mają być zaimplementowane relacje między obiektami . _W jaki inny sposób można przedstawić dokument?_ 3. Kiedy robisz coś takiego - document.write('Witaj na mojej stronie głównej!'); obiekt dokumentu jest dostarczany przez DOM. Metody zapisu to interfejsy, które są udostępniane JavaScript przez DOM. _Więc obiekty i ich metody są tworzone jako obiekty JavaScript przez parser DOM, a następnie prezentowane silnikowi JavaScript? A może obiekty i metody w silniku analizującym DOM są w ich własnym języku ojczystym? I czy jest narażony na działanie silnika JavaScript? Jeśli tak, to co jest odpowiedzialne za tłumaczenie z JavaScript na język ojczysty?_ 4. Co to są powiązania językowe? Powiązanie języka to zestaw obiektów natywnych dla danego języka, który implementuje każdy z interfejsów w specyfikacji DOM. Deweloperzy mogą tworzyć powiązania językowe z DOM do swojego języka, po prostu postępując zgodnie z IDL (język definicji interfejsu) w specyfikacji DOM. _Więc jeśli silnik analizujący DOM jest zaimplementowany powiedzmy w C++, czy to oznacza, że kiedy tworzysz powiązania językowe zgodnie z IDL, tworzysz po prostu obiekty w określonym języku, tj. C++, z którym zbudowany jest twój silnik analizujący DOM?_


title: Czy możesz nauczyć się programowania w ciągu 2 lat, aby uzyskać dobrą pracę na poziomie podstawowym?

text: Studiowałem 2 z 4 lat w college'u, głównie matematykę i fizykę, więc jestem dość techniczny. Z jakiegoś powodu nigdy tak naprawdę nie nauczyłem się kodować przed ostatnim miesiącem. Byłem podekscytowany i zamierzam skoncentrować moje ostatnie 2 lata na studiach wyłącznie na nauce programowania. Moje pytanie brzmi: jeśli uczę się jak szalony przez ostatnie 2 lata przed ukończeniem studiów, czy mogę nauczyć się wystarczająco dużo programowania, aby uzyskać dobrą i renomowaną pracę/staż dla inżyniera oprogramowania na poziomie podstawowym. A przez renomowane mam na myśli coś takiego jak Microsoft, Apple, Facebook, Google, IBM, Oracle itp. Czy można zacząć od zera i nauczyć się w ciągu 2 lat wystarczających umiejętności, aby to zrobić?


title: Modyfikacja projektu tabeli SQL w oparciu o role danych lub wygodę implementacji?

text: Mam istniejącą strukturę tabeli SQL, która wygląda następująco: Orders - order_id - Organization_id - [cała reszta danych zamówienia] Organizacje - Organization_id - [cała reszta danych organizacji] Users - identyfikator użytkownika - [wszystkie reszta danych użytkownika] Próbuję zmienić tabelę `Orders`, aby zamówienie mogło być połączone z `Organizacją` lub `User`. Mam dwa pomysły: ### Opcja A * Dodaj pole `orders.user_id`, a następnie ustaw `user_id` lub `organisation_id` na null dla każdego zamówienia, wskazując, czy zamówienie zostało złożone przez użytkownika czy organizację. ### Opcja B * Dodaj tabelę `orderers` (lub podobną), a następnie dodaj pola `organisations.orderer_id` i `users.orderer_id`. Wtedy użytkownicy i organizacje są jednocześnie zleceniodawcami, a zleceniodawcy składają zamówienia. ### Podejście ewaluacyjne Opcji B oparte na rolach wydaje się mieć sens i wydaje się być bardziej rozszerzalne, ale po prostu nie mogę przestać myśleć o kłopotach, jakie spowoduje dodatkowe „DOŁĄCZENIE” pod względem wydajności i Złożoność SQL. Jak najlepiej się do tego zabrać?


title: Jak kodować w bardziej funkcjonalnym stylu w Javie?

text: Koduję Javę od co najmniej 5 lat i naprawdę doceniam działanie języka. Patrząc na nowe języki JVM (np. Scala, Clojure) można zauważyć tendencję do bardziej funkcjonalnych sposobów kodowania, co ma kilka istotnych zalet. W każdym razie, czy istnieją wzorce pozwalające osiągnąć bardziej funkcjonalny styl, nawet przy użyciu Javy lub innego czystego OOP? I czy to ma sens w Javie?


title: Wykres pokazujący malejącą atrakcyjność przy korzystaniu ze skrótów

text: Jestem odpowiedzialny za stworzenie prezentacji dla kierownictwa, która szczegółowo opisuje, w jaki sposób system powinien zostać zrefaktoryzowany lub przepisany. Mamy istniejący system, w którym wystąpiły awarie produkcyjne, a baza kodu nie jest w pożądanym stanie. Oto aktualne możliwe opcje: 1. Przepisz system, używając programistów, którzy zapewniają najlepszą jakość kodu 2. Przepisz system, korzystając z programistów, którzy piszą kod o niższej niż idealna jakość 3. Pozostaw system bez zmian i po prostu go utrzymuj 4. Przepisz system wykorzystujący tańszą siłę roboczą po drugiej stronie świata Problem nie polega na tym, który z nich wybrać, ponieważ uważam, że #1 zapewnia najlepszą długoterminową wartość dla biznesu. Problem polega na tym, jak przedstawić to kierownictwu, aby zrozumieli koszty każdego skrótu, jaki wybierają z punktu 1. Na przykład zacząłbym od przedstawienia #1... i co potem? Moim oryginalnym pomysłem jest pokazanie w jakiś sposób każdego skrótu i tego, co to oznacza pod względem długoterminowych kosztów/korzyści. Być może więc kierownictwo chce korzystać z tańszej siły roboczej. Muszę pokazać, jak wpływa to na jakość, czas itp. Jak to pokazać? Być może kierownictwo chce użyć hybrydy powyższych opcji. Jak mam to pokazać? Może istnieć 20 różnych kombinacji powyższych opcji i chciałbym pokazać, że jeśli przyjmą krótkoterminowe podejście do wszystkiego o niskim koszcie, co to ostatecznie oznacza dla jakości produktu. Czy istnieją wykresy dla tego typu rzeczy? Zalecane podejście? Mógłbym po prostu zacząć pisać, ale nie chcę, aby oczy kierownictwa zaszkliły się od zbyt wielu słów. Mam nadzieję, że wszystko ma sens. Pomysł polega na przedstawieniu czegoś takiego dla każdej opcji: ![tutaj podaj opis obrazu](http://i.stack.imgur.com/qbsrs.png)


title: Kto ukuł termin „wykonawca”?

text: Wszyscy wiemy, że to nie jest prawdziwe słowo. Ale jest powszechnie używany wśród programistów i prawdopodobnie można by go traktować jako „termin techniczny”. Może przejść do powszechnego użytku i trafić do słownika, jeśli użyje go wystarczająca liczba osób. Wikisłownik definiuje _wydajny_ w następujący sposób: * **wydajny** (porównywalnie bardziej wydajny, znakomicie najwydajniejszy) 1. (żargon, głównie komputerowy) Zdolny do lub charakteryzujący się odpowiednim lub doskonałym poziomem wydajności lub wydajności. Nasz jest wydajnym narzędziem do monitorowania sieci i monitorowania systemów. „To oprogramowanie jest o dziesięć procent wydajniejsze niż jego poprzednik”. Bóg wie, dlaczego chcę wiedzieć*, ale po piętnastu minutach poszukiwań nadal nie wiem, kto jest uważany za osobę, która ukuła termin „wykonawca” w inżynierii oprogramowania? Kto był pierwszą osobą, która go użyła? *To niekoniecznie prawda. Podejrzewam, że to dlatego, że 10 rano w poniedziałek w USA i jestem gotowy do powrotu do domu.


title: Przeglądarka jako bogata platforma kliencka

text: W Javie istnieje pojęcie "bogata platforma kliencka" - jest to framework do budowania aplikacji desktopowych, zapewnia wspólne funkcje, takie jak przeglądarka pomocy, zarządzanie układem okien itp. Znanymi frameworkami są Eclipse i Netbeans. Teraz jestem ciekaw, czy można coś takiego zrobić na przeglądarce internetowej? Słyszałem o XULRunner, rozszerzeniach Chrome, NPAPI i tym podobnych, ale waham się, aby zanurkować dalej (moim obecnym pomysłem jest rozwidlenie Chromium). Zasadniczo, czy istnieje sposób z (bezserwerowej) aplikacji przeglądarkowej: 1. Praca z systemem plików (przeglądarka plików Open/Save/open OS) 2. Uruchom procesy systemu operacyjnego (np. niektóre narzędzia) i przeanalizuj ich dane wyjściowe. 3. Uzyskaj dostęp do bibliotek dynamicznych. 4. Zmień interfejs przeglądarki (np. usuń pasek strony głównej/adresu, ponów menu) 5. Pakiet jako coś łatwego do wdrożenia wyrzuć sklepy z aplikacjami. Czy można to zrobić bez rozwidlenia przeglądarki? O czym powinienem przeczytać? **Zaktualizowane wymagania:** Zasadniczo szukam „PhoneGap na komputery PC” – ale naprawdę podoba mi się, jak mogę ponownie wykorzystać interfejs Chromium (karty, preferencje itp.), jeśli go rozwidłem. Prototypuję na Macu, skonfiguruję kompilację Linuksa. W tym momencie nie interesuje mnie Windows...


title: Lepszy sposób, aby poprosić o dane wejściowe?

text: Zastanawiam się, jaki jest najlepszy sposób, aby przejść z kodem java. Muszę utworzyć klasę z prostymi monitami o dane wejściowe. Próbowałem używać obu klas i nie mogę wypracować konkretnych korzyści dla każdej z nich. Czy to dlatego, że wciąż jestem na wczesnym etapie programowania, czy są sytuacje, które pojawią się, gdy stanie się to bardziej złożone? importować java.util.Scanner; public class mojaKlasa { Skaner stdin = new Scanner(System.in); public String getInput(String monit) { System.out.print(monit); return stdin.nextLine(); } ... lub zaimportuj java.io.*; public class mojaKlasa { public static void main(String[] args) wyrzuca IOException { BufferedReader stdin = nowy BufferedReader (nowy InputStreamReader (System.in)); System.out.print("Wpisz coś: "); Nazwa ciągu = stdin.readLine(); Wiem, że te przykłady pokazują różne metody w tych klasach, ale pomyślałem, że może to dobrze posłużyć do dyskusji. _Naprawdę nie jestem pewien, w której witrynie najlepiej o to zapytać._


title: Kontynuować pracę w pełnym wymiarze godzin nad projektami lub znaleźć pracę na występy w CV?

text: Obecna sytuacja: Jakieś pięć miesięcy temu zdobyłem dyplom z czegoś, co nie ma nic wspólnego z programowaniem. Od tego czasu intensywnie studiuję/pracuję nad projektami programistycznymi przez ostatnie pięć miesięcy. **(A) Czy nadal pracuję w pełnym wymiarze czasu nad projektami, które rozwijają się w szybkim tempie, prawdopodobnie ukończyłem wystarczająco przyzwoite projekty, aby dostać stanowisko startowe / płatny staż w ciągu 3 miesięcy** lub **(B) Czy dostanę pracę, prawie na pewno taki, który nie ma nic wspólnego z programowaniem, tylko po to, aby pracodawcy mogli zobaczyć w moim CV, że wykonałem pracę w międzyczasie i znacznie ograniczyłem moje postępy w programowaniu?** Zakładam, że ankieterzy HR z dużych firm oceniliby moje bezrobocie jako złe rzecz, ale z drugiej strony jest bardzo mało prawdopodobne, żebym i tak starała się o pracę w takiej firmie, ponieważ prawie zawsze wymagają one odpowiedniego stopnia naukowego. Ale nie jestem pewien, jak zinterpretowaliby tę sytuację inni pracodawcy. Btw, mówię o zachodnioeuropejskim rynku pracy, a nie o amerykańskim rynku pracy. Poza tym nauczyłem się DUŻO więcej w ciągu tych 5 miesięcy na własną rękę niż w ciągu tych trzech lat na uniwersytecie. ## EDYTUJ Właściwie jestem przekonany, że najlepszym krokiem jest kontynuowanie pracy w pełnym wymiarze czasu przy tych projektach, ponieważ uważam, że istnieje znaczna liczba pracodawców małych firm, którzy mogą spojrzeć na moje CV z przeszłości, o ile mogę im przedstawić projekty, nad którymi pracowałem. Ale mój ojciec obawia się, że żaden pracodawca nie będzie w stanie zapomnieć o tym, że w tym okresie nie wykonywałem żadnej pracy, niezależnie od tego, czy była związana z programowaniem. **Chcę pokazać mojemu ojcu ten wątek TAK, aby przekonać go inaczej**. Tak samo pracodawcy lub pracownicy takich pracodawców mogą prosić o stwierdzenie, czy podejrzenie mojego ojca jest słuszne, czy nie. Ma to ogromny wpływ na moją obecną sytuację życiową, dlatego ważne jest, aby to zrozumiał.


title: Czas kompilatora a czas programisty

text: Chcę krótko omówić języki zarządzane lub tłumaczone. Mówi się, że warto się w nich rozwijać, ponieważ czas procesora jest wart mniej niż czas programisty potrzebny do programowania w szybszym języku. Ciekawe, czy to samo można powiedzieć o kompilatorze. Gdybym miał jakiś mityczny kompilator, którego kompilacja zajęłaby cztery razy więcej czasu niż, powiedzmy, C#, ale programowanie zajęłoby mu połowę czasu, czy byłaby to zaleta czy wada? Czy czas programisty jest wart więcej niż czas kompilatora?


title: Licencja MIT - czy można ukraść kod?

text: Załóżmy, że Twoja firma ma ściśle strzeżone oprogramowanie wewnętrzne, które ma licencję MIT. Być może był oparty na oprogramowaniu na licencji MIT, ale przez lata był mocno modyfikowany. Twoja firma nie chce dzielić się tym ze światem zewnętrznym. Jednak pewnego dnia pracownik postanawia opublikować oprogramowanie w serwisie GitHub wbrew woli firmy. Czy to legalne? Czy narusza licencję?


title: Nazwa dla tego wzoru?

text: Piszę klasę, która obsłuży synchronizację wątków. Miałby metodę begin, która zwiększałaby licznik i metodę end, która zmniejszałaby licznik. Będzie miał inną metodę, która zablokuje, gdy licznik nie będzie wynosił zero, a następnie wykona akcję, trzymając blokadę. To trochę jak przeciwieństwo semafora, ponieważ jest odblokowany od zera i może zostać zablokowany wiele razy, a odblokowuje się ponownie, gdy zostanie odblokowany taką samą liczbę razy. Czy istnieje nazwa tego wzoru? * * * To zajęcia oparte na zaakceptowanej odpowiedzi na moje pytanie tutaj


title: Dlaczego firmy nie kupują deweloperów instrumentów rozrywkowych?

text: Wiele razy, kiedy jestem zmęczony rozwojem, a mój umysł już mi nie pomaga (w domu), po prostu robię coś zabawnego i mój umysł uwalnia się na więcej godzin pracy z większą zdolnością rozwiązywania problemów. Kiedy jednak zarekomendowałem tę technikę mojemu menedżerowi jako technikę zwiększającą produktywność i wydajność programistów, odmówił on zaakceptowania, że praca nie jest miejscem na rozrywkę. Myślę, że ta formuła działa dla mnie. Czy dotyczy to również innych programistów: 2 godziny produktywnej pracy + 30 minut rozrywki > 3 godziny nudnej pracy Dlaczego firmy w to nie wierzą? **Aktualizacja:** Nie wiem, dlaczego zostało to zamknięte jako nie na temat. Jeśli uważasz, że jest to istotne, zagłosuj za ponownym otwarciem.


title: co jest ogólnie potrzebne do obsługi?

text: Szukałem definicji handlera. podstawy Zrozumiałem, że „obsługa to fragment kodu, który jest wywoływany, gdy coś się dzieje i zwykle wykonuje jakąś akcję, na przykład generowanie odpowiedzi”. - (z http://stackoverflow.com/questions/3246200/what-is-an-handler ). Ale może to być wyzwalacz lub oddzwonienie. Również w szczególności procedura obsługi zdarzeń na niskim poziomie często działa poprzez odpytywanie urządzenia i oczekiwanie na odpowiedź sprzętową. A więc, jaka jest konkretna rola handlera (co czyni go unikalnym dla wyzwalacza, wywołania zwrotnego lub jakiejkolwiek innej takiej funkcji). Czy wszystkie programy obsługi mają podobną rolę (obsługa zdarzeń, obsługa plików, obsługa wyjątków, obsługa błędów)...


title: Jak łatwo jest zhakować JavaScript (w przeglądarce)?

text: Moje pytanie dotyczy bezpieczeństwa JavaScript. Wyobraź sobie system uwierzytelniania, w którym używasz frameworka JavaScript, takiego jak Backbone lub AngularJS, i potrzebujesz bezpiecznych punktów końcowych. To nie problem, ponieważ serwer zawsze ma ostatnie słowo i sprawdzi, czy masz uprawnienia do robienia tego, co chcesz. Ale co, jeśli potrzebujesz trochę bezpieczeństwa bez angażowania serwera? Czy to jest możliwe? Załóżmy na przykład, że masz system routingu po stronie klienta i chcesz, aby konkretna trasa była chroniona dla zalogowanych użytkowników. Więc pingujesz serwer z pytaniem, czy możesz odwiedzać chronione trasy i idziesz dalej. Problem polega na tym, że kiedy pingujesz serwer, przechowujesz odpowiedź w zmiennej, więc następnym razem, gdy pójdziesz na prywatną trasę, sprawdzi, czy jesteś już zalogowany (brak pingowania do serwera) i w zależności na odpowiedź pójdzie, czy nie. **Jak łatwo jest użytkownikowi zmodyfikować tę zmienną i uzyskać dostęp?** Moja wiedza na temat bezpieczeństwa (i JavaScript) nie jest świetna. Ale jeśli zmienna nie jest w zasięgu globalnym i znajduje się w prywatnej części wzorca modułu, który ma tylko gettery, ale nie settery, nawet w takim przypadku, czy możesz to zhakować?


title: W jaki sposób wstrzykiwanie zależności nie tylko przenosi złożoność do osobnej klasy?

text: W tym tygodniu szukałem możliwości użycia frameworka Typhoon do wstrzykiwania zależności. Rozumiem, że rozdzielenie konstrukcji obiektów jest korzystne przy zastępowaniu dowolnych komponentów makietami podczas testów jednostkowych i jak dotąd widziałem korzyści z tego samego. Ale nie mogę powstrzymać się od myślenia, że tam, gdzie wcześniej miałem ogromną klasę kontrolera widoku, która miała dziesiątki importów nagłówków, teraz mam ogromną klasę fabryki, która ma dziesiątki importów nagłówków. Czy mam uniknąć ogromnej klasy fabrycznej?


title: Implementacja kolejki priorytetowej z szykiem kołowym

text: [Jeżeli to pasuje bardziej do stackoverflow, to prześlij je tam proszę.] Cześć, próbuję zaimplementować kolejkę priorytetową w C. Najłatwiejszym sposobem, jaki znalazłem, aby to zrobić, jest użycie tablicy kołowej (zamiast używania połączonej listy). Mam tablicę o stałym rozmiarze, indeks dla elementu `pierwszego` w kolejce i indeks dla `następnego` wolnego miejsca w kolejce. Ale zmagam się z dequingiem maksymalnej wartości... Wiem, jak uzyskać maksymalną wartość, ale nie jak przejść dalej i pierwszy, aby kolejka pozostała ciągła w tablicy (jedyny sposób, w jaki wiem, że to działa). Jak mam to zrobić? A może masz propozycję lepszego wdrożenia? Dziękuję


title: Jak poświadczyć głosowanie elektroniczne?

text: Opracowuję prosty system „głosowania” dla każdego typu grupy (politycznej, roboczej). Zastanawiałem się, jaki mógłby być dobry system „poświadczania” głosów? Na przykład prosta struktura bazy danych to: PollID, UserId, ChoseID (co wybrał użytkownik), DateTime Co mogę zrobić, aby zaświadczyć, że głos nie został naruszony? Dodanie pola KEY wynikającego z algorytmu? Coś jeszcze ?


title: Wywołaj oprogramowanie GPL z oprogramowania innego niż GPL

text: Czy mogę (legalnie) używać programu wydanego na licencji GPL z innego programu, który piszę i nie muszę przestrzegać GPL (dla programu, który piszę)? Na przykład, mam GUI, który używa programu (który jest na licencji GPL), czy mogę ukryć kod w GUI, a nawet go sprzedać?


title: Wywoływanie pliku binarnego GPL z wiersza poleceń

text: Opracowałem oprogramowanie, które sprzedaję / zamknąłem sos. Istnieje plik wykonywalny na licencji GPL, który chciałbym wywołać/wykonać z poziomu mojego oprogramowania (i użyć danych przez nie zwróconych) _jeśli_ użytkownicy sami pobierają plik wykonywalny i mówią mojemu programowi, gdzie go znaleźć. (Dlatego nie chcę rozpowszechniać ani źródeł, ani plików binarnych narzędzia GPL.) Jeśli dobrze to zrozumiałem, w żaden sposób nie linkuję. Narzędzie GPL będzie stanowić tylko niewielką część ogólnej funkcjonalności i prawdopodobnie będzie przydatne (i prawdopodobnie nie obowiązkowe) dla mniej niż procenta moich użytkowników. (Zgrubne oszacowanie.) Stąd, zgodnie z moim zrozumieniem, powinienem być w stanie wykonać powyższe bez dalszych problemów, tj. Nie będę musiał: \- Wzmiankować czegokolwiek w moim pliku readme/podobnym, ponieważ użytkownik sam pobiera plik wykonywalny GPL z oficjalnej strony - moje oprogramowanie wskaże na to, aby użytkownik mógł je tam znaleźć) \- Moje własne oprogramowanie może pozostać bez zmian (zamknięte źródło, komercja) Czy mam rację powyżej?


title: Przekazywanie dwóch różnych typów w dół łańcucha wywołań z powodu przeciążenia dalej

text: Wpakowałem się w trochę bałaganu. Mam kod pochodzący z Main, przez myMethod i do OtherMethod. Jednym z parametrów może być int lub string, co ma wpływ na OtherMethod, ale na żadną z metod interweniujących. public static void Main() { mojaMetoda(liczba: 10); mojaMetoda(litery: "dziesięć"); } public static void mojaMetoda(int number = 0, string letters = null) { //długi całkowicie udostępniony kod z wywołaniami: OtherMethod(number,letters); } public static void OtherMethod(int number = 1, string letters = null) { //Wiele współdzielonego kodu, osadzonych wielokrotnie w tym kodzie to zasadniczo: if (letters != null) { Console.WriteLine("letters!") ; } else { Console.WriteLine("liczby!"); } } OtherMethod dba o to, kiedy przekazuję go `int` lub `string`, ale żadna z metod interweniujących nie przejmuje się tym. Uznałbym również, że dzielenie OtherMethod bez niepotrzebnego ponownego użycia kodu jest bardzo trudne. Rozwiązanie, które podałem, działa, ale prawdopodobnie jest antywzorcem. Ponieważ, na przykład, wywołanie `myMethod(10,"dziesięć")` po cichu wyrzuci `10` do kosza. Czy zmiana jej na „prywatna mojametoda (liczba int = 0, ciąg = null)” wywoływana przez „publiczny (numer int)” i „publiczny (litera ciągu)” dla każdego poziomu byłaby fatalnym pomysłem? Pomyślałem, że zamiast tego przekazać klasę z int i string oraz instrukcjami, których należy używać od góry do dołu. Podejrzewam, że to jest rozwiązanie. Ale czuje się tak samo OTT, jak OO. Moim prawdziwym przypadkiem użycia jest to, że losowo generuję dane na dole tego łańcucha i mogę albo dostarczyć ziarno (int), albo oszukać i dostarczyć dane do wygenerowania (ciąg). Przychodzi mi do głowy, że to, co robię, może być sztucznym wstrzykiwaniem zależności proceduralnych,


title: Programowanie do przyszłego wykorzystania interfejsów

text: Mam kolegę siedzącego obok mnie, który zaprojektował taki interfejs: public interface IEventGetter { public List<FooType> getFooList(String fooName, Date start, Date end) throws Exception; .... } Problem polega na tym, że w tej chwili nie używamy tego parametru "end" nigdzie w naszym kodzie, jest on po prostu tam, ponieważ być może będziemy musieli go użyć w przyszłości. Przekonujemy go, że wstawianie parametrów do interfejsów, które w tej chwili się nie przydają, to zły pomysł, ale wciąż upiera się, że trzeba będzie wykonać dużo pracy, jeśli zaimplementujemy od jakiegoś czasu użycie daty końcowej później i trzeba wtedy dostosować cały kod. Teraz moje pytanie brzmi, czy są jakieś źródła zajmujące się takim tematem „szanowanych” guru kodowania, z którymi możemy go połączyć?


title: obsługa płatności online za towary w jednej ilości - problem z projektem

text: Chciałbym wdrożyć solidny sposób obsługi płatności e-commerce za przedmioty o ograniczonej ilości, takie jak na przykład ekskluzywne obrazy. Najlepiej byłoby, gdyby płatność była akceptowana za pośrednictwem PayPal i kart kredytowych. Najlepiej byłoby, gdyby działało na zasadzie „kto pierwszy, ten lepszy” i nie blokowałby po prostu produktów, jeśli dodasz je do koszyka, tak jak robią to niektóre sklepy internetowe z modą. Jednak głównym problemem jest to, że po przekierowaniu użytkownika do rozwiązania płatniczego nie masz nad nim kontroli. Nawet gdybym miał zaimplementować jakąś formę blokowania elementów, tj. użytkownik dodaje go do koszyka i jest tymczasowo blokowany dla innych użytkowników na powiedzmy 30 minut - myślę, że ten problem nadal by przeważał, biorąc pod uwagę poniższy przepływ pracy: * Użytkownik A dodaje element A z ograniczoną ilością (1) do koszyka. Przedmiot jest usuwany z serwisu na 30 minut * Użytkownik A przechodzi do płatności w systemie PayPal. * Z jakiegoś powodu, Użytkownik A nie płaci od razu na PayPal, ale utrzymuje sesję przy życiu przez powiedzmy 1 godzinę * Po 30 minutach strona przywróci pozycję A z powrotem w magazynie * Użytkownik B dodaje do koszyka * Użytkownik B przechodzi do płatności * Użytkownik B płaci za item * Użytkownik A, z ciągle odświeżaną sesją, płaci również za item. Spowodowałoby to podwójny zakup tego samego przedmiotu. Czy da się rozwiązać ten problem w 100%? Szczerze wątpię, żeby tak się stało w prawdziwym życiu, ale chciałbym zająć się wszystkimi możliwymi przypadkami.


title: Jak wywołać metodę w klasie zawsze, gdy dostęp do klasy jest możliwy - jak reakcja?

text: Pracuję nad projektem C# net micro framework, w szczególności klasą magistrali I2C. Mam kilka różnych urządzeń I2C, każde zdefiniowane w oddzielnych klasach, które zawierają wszystkie unikalne metody urządzeń. W moim przypadku mogę mieć zdefiniowany tylko JEDEN obiekt I2CDevice i aby przełączyć się na inne urządzenie I2C, muszę zmienić I2CDevice.Config = DeviceConfig. Na przykład (pseudokod): Klasa Device1 -DeviceConfig1 -Method 1 -Method 2 -Method 3 Class Device2 -DeviceConfig2 -Method 1 -Method 2 -Method 3 Program główny { I2cBus = new I2CDevice(konfiguracja) Device1.Method1 Device2.Method3 } Podczas przełączania między urządzeniami muszę zmienić właściwość I2CDevice.Config. Szukam eleganckiego sposobu, aby za każdym razem, gdy wywołam metodę dla urządzenia, I2CBus.Config zostanie automatycznie zmieniony. Czy istnieje sposób, że nie muszę ponownie wpisywać tego kodu konfiguracji w każdej metodzie? Czy masz oddzielną metodę wewnętrzną, która jest wywoływana za każdym razem, gdy uzyskuję dostęp do którejkolwiek z tych metod? Mam nadzieję, że mój opis jest jasny. Aktualizacja, jako alternatywę, czy istnieje sposób, aby utworzyć moją klasę magistrali I2C, a następnie dodać urządzenia do tej klasy? Następnie, aby uzyskać dostęp do urządzeń, zrobiłbym coś takiego jak I2CBus.AddDevice(Device1ObjectClass) I2CBus.AddDevice(Device2ObjectClass) I2CBus.Device1.Method1 I2CBus.Device2.Method2 Nadal mam ten sam problem, że muszę „automatycznie” przełączyć konfigurację I2C między połączeniami z różnych urządzeń.


title: Najlepszy sposób na stworzenie interfejsu internetowego do przeszukiwania konkretnej bazy danych

text: Zostałem poproszony o stworzenie aplikacji internetowej, która pozwoliłaby użytkownikom łatwiej przeszukiwać konkretną bazę danych. Upraszczając, ta baza danych zawiera tylko dwie tabele, raporty i produkty. Związek między nimi polega na tym, że jeden raport może odnosić się do jednego lub więcej produktów. Aplikacja internetowa powinna umożliwiać użytkownikom określenie w sposób graficzny (nawet w prostym formularzu) listy kryteriów wyszukiwania w celu pobrania podzbioru raportów. Na przykład użytkownik może poprosić o wszystkie raporty w określonym okresie, z „(pole1 = wartość1 i pole2 = wartość2) lub (pole3 <> wartość3)”, które odnoszą się do produktu A i produktu B. Jest to opis podstawowego wymagania; w idealnym przypadku aplikacja internetowa powinna również umożliwiać użytkownikom zapisywanie i łączenie ich zapytań (na przykład z operatorami typu „UNION, EXCEPT, INTERSECT”) oraz dynamiczne porządkowanie wyników. Ponadto produkty można pogrupować w poziomy hierarchiczne, a użytkownik może poprosić o wszystkie raporty, które odnoszą się do wszystkich produktów na danym poziomie. W tej chwili tabela raportów ma tylko 114 000 wierszy, ale szybko rośnie: istnieje od 27 lat, ale w zeszłym roku wstawiono 18 000 wierszy! Więc moje pytanie brzmi, jak podejść do rozwoju tej aplikacji. Przede wszystkim trzeba napisać NOWĄ aplikację, czy jest coś, czego mogę użyć od razu (oczywiście z pewną wstępną konfiguracją)? Jeśli nie, to wierzę, że mógłbym napisać to sam za pomocą CodeIgniter i JQuery, ale wiedziałbym, czy istnieją inne frameworki PHP lub JAVA przydatne do przyspieszenia mojej pracy. Na koniec chciałbym usłyszeć twoją opinię na temat krytycznych punktów, o które powinienem się martwić.


title: Zarezerwuj sieciowe protokoły kryptograficzne

text: Szukam książki, która szczegółowo opisuje najpopularniejsze sieciowe protokoły kryptograficzne, takie jak SSL, TLS, SSH, HTTPS itp. Mam już kilka książek, które obejmują podstawowe protokoły kryptograficzne (takie jak DES, AES itp.) . To kolejna warstwa, o której chcę się dowiedzieć.


title: Złagodzić bóle testowania jednostkowego C#, gdy jesteś jedyną osobą w zespole testów jednostkowych

text: Natknąłem się na to kilka razy, kiedy dostałem się do projektu i chciałbyś przeprowadzić pewnego rodzaju testy jednostkowe, ale projekt nie jest odpowiednio skonfigurowany, aby na to pozwolić i możesz nie mieć wpisowego od wszystkich. Głównymi problemami są zwykle zapachy kodu, takie jak problemy z zależnościami (zwłaszcza nadmierne użycie statyki) i separacja problemów. Nowy kod, który piszesz, można łatwo skonfigurować, ale wszystko, co działa z innym starszym kodem, a nawet ci, którzy nie piją fajnego pomocnika, mogą stać się problemem. Niektóre rzeczy, które znalazłem, to fakt, że frameworki izolacji, takie jak TypeMock, mogą to ułatwić. **Jakie są inne narzędzia/sztuczki/najlepsze praktyki, które według Ciebie łagodzą tego rodzaju ból?**


title: Rozpoczęcie spójnej architektury w starszej aplikacji

text: Odpowiadam za dużą witrynę internetową opartą na Asp.Net. Obecnie jest to strona internetowa (nie aplikacja internetowa), niektóre usługi systemu Windows i wiele bibliotek klas. Warstwa danych wykorzystuje mieszankę LLBLGEN i Linq To LLBGen, a także szereg wystąpień starszego wbudowanego SQL, które nie zostały zrefaktoryzowane. Istnieje kilka implementacji typu manager, ale w wielu przypadkach aplikacja wykazuje anty-wzorzec Smart UI (tj. za dużo logiki biznesowej w kodzie za klasami) Na stronie jest dość duży ruch, a wydajność jest dobra, ale rozwijamy nasze możliwości programistyczne do zespołu liczącego około 10 osób i coraz bardziej staje się jasne, że potrzebujemy nadrzędnego projektu warstwowego na szczycie istniejącego oprogramowania pośredniczącego. Moje pytanie brzmi od czego zacząć? Mamy 10 lat kodu (część z nich wciąż tak naprawdę dopiero migrowała elementy ASP Classic), wiele różnych podejść i stylów. Refaktoryzacja całej bazy kodu nie jest realistyczna i prawdopodobnie nie jest pożądana Wiem, że to nie jest nowa sytuacja, czy są jakieś przydatne pomysły lub koncepcje, jak podejść do tego problemu?


title: Jakich typowych błędów/pułapek związanych z Silverlight powinni unikać programiści?

text: Jakie są typowe błędy/pułapki, specyficzne dla rozwoju Silverlight, których programiści powinni unikać? PS: Proszę, jeśli nie masz doświadczenia z Silverlight i chcesz po prostu stwierdzić, że ludzie nie powinni go używać, powstrzymaj się od tego. Dziękuję za poświęcony czas i uwagę. Oto kompilacja danych wejściowych od użytkowników zarówno na StackOverflow, jak i programers.stackexchange.com na to pytanie: * Myśląc, że to to samo co WPF * Nie używam wzorca projektowego MVVM * Nie wiedząc, że nie obsługuje połączeń ADO.Net * Nie wiedząc, że obsługuje tylko basicHttpBinding (brak dozwolonych wsHttpBinding) * Nie wiedząc, że powiązania RelativeSource nie obsługują AncestorType * Zapominając o skonfigurowaniu typów MIME IIS * Myślenie, że Silverlight działa tak samo jak WPF * Limit 5 MB na pliki XAP i potrzeba trzeciego rozwiązania firmowe do obejścia tego * Brak abstrahowania wywołań warstwy usług. > Wyodrębnienie wywołań warstwy usługi, aby strony Silverlight były ładowane > w projektancie (w programie Visual Studio lub Expression Blend) bez > obecności usługi. Zwłaszcza jeśli interfejs użytkownika jest projektowany w > Expression Blend. Niektóre fikcyjne dane można zwrócić bez wywoływania usługi >, a projektanci interfejsu użytkownika nadal mają wyczucie wyglądu aplikacji > z danymi. * Nie używając MVVM > Możesz programować Silverlight jak aplikację WinForm, ale jesteś w świecie > żalu. Cała platforma została zaprojektowana do korzystania z MVVM i jeśli nie pracujesz > z tym, będziesz płynął pod prąd przez całą drogę. * **Sieć:** istnieją ograniczenia dotyczące gniazd, np. bez UDP, tylko model asynchroniczny * **Sieci:** dwa (3.0) różne stosy HTTP, przeglądarka jeden i klient - każdy ma swoje dziwactwa (wiele aplikacji korzysta z obu); * **Bezpieczeństwo:** niektóre API są oznaczone jako [SecurityCritical] i nie będziesz mógł ich używać, nawet jeśli skompiluje się dobrze w czasie wykonywania (np. ten kod działał od lat w mojej innej aplikacji ) * **Bezpieczeństwo:** polityki bezpieczeństwa na HTTP[S] i gniazdach (ale działa tak dobrze na własnym komputerze) * ditran.net/silverlight-common-errors * Używam MVVM, ale nie rozumiem go do końca > ślepo przestrzegając jego zasad jakby były 10 przykazaniami, niektórzy > ludzie naprawdę utrudniają sobie życie. Założę się, że większość nie ma żadnego > oddzielnego zespołu projektowego UI ani nie używa testów jednostkowych, więc korzyści z MVVM > byłyby minimalne > * Nie rozumienie Asynchroniczna natura Silverlight. > * Nadużywanie UserControls, kiedy powinni używać Templated > > > Dziękujemy za konstruktywny wkład dla następujących osób: Rachel, > maple_shaft, Jesse C. Slicer, ChrisF, Jon Raynor, poupou, RKitty, DShah, > AnthonyWJones


title: Dlaczego używamy notacji węgierskiej na zmiennej lokalnej, ale nie na funkcji lub zmiennej globalnej?

text: To wydaje się nie mieć sensu. W zmiennej lokalnej tak czy inaczej znamy typ. To jest lokalne. Pracujemy nad tym. Jednak w nazwie funkcji lub zmiennej globalnej definicja jest bardzo odległa w przypadku innych plików. Wydaje się, że notacje węgierskie mają tam znacznie więcej sensu. Na przykład w Object-c użyłem tego +(CGFloat) fHeightOfNavigationController Więc kiedy chcę poznać wysokość kontrolera nawigacyjnego, będę musiał nacisnąć przycisk, który określa funkcję. Co to za przycisk? Jaka jest nazwa funkcji. Czy to heightOfNavigationController? Czy to NawigacjaControllerHeight? Czy to navHeight? Nie wiem, którą literę powinienem najpierw wpisać, aby aktywować autouzupełnianie. Ale wiem, że funkcja jest zmiennoprzecinkowa. Więc po prostu wpisuję f... Tada... Mam fHeightOfNavigationController w autouzupełnianiu. Jednak nie sądzę, że większość ludzi używa notacji węgierskiej w ten sposób. Czemu?


title: TDD – jakie są krótkoterminowe zyski/korzyści?

text: Dość często korzyści płynące z używania TDD są uważane za „długoterminowe” zyski – ogólny kod będzie lepiej ustrukturyzowany, bardziej testowalny, ogólnie mniej błędów zgłaszanych przez klientów itp. Jednak gdzie są krótkoterminowe korzyści z używania TDD? Czy są takie, które są rzeczywiście podatne na rozciąganie i łatwe do zmierzenia? Czy ważne jest, aby w ogóle uzyskać oczywiste (lub nawet nieoczywiste przez wymierne) korzyści krótkoterminowe, jeśli długoterminowe korzyści są mierzalne?


title: Jakiś problem prawny w tworzeniu aplikacji podobnej do innych?

text: Jest gra, którą chcę stworzyć na urządzenia mobilne, m.in. telefon komórkowy/tablet. Szukałem tej gry i nie mogłem jej znaleźć, więc postanawiam zrobić to sam. Ale martwię się, że pojawią się problemy prawne. Przepraszam, ale nie wiem, jak to wygląda. Zauważyłem na przykład grę Bejeweled Blitz. Jeśli tworzę coś podobnego, czy muszę skontaktować się z deweloperem i poprosić o zgodę, jeśli tworzę grę o podobnych zasadach, ale używam kształtów, a nie klejnotów? Oryginalna gra istnieje tylko w systemie Windows za darmo. Jeśli opracuję grę, dokładnie podobne zasady, ale inny sposób wyświetlania, czy mogę ją sprzedać? Dziękuję...


title: Jak wzbudzasz zainteresowanie swoimi projektami?

text: > **Możliwe powielenie:** > Pomysły, które pomogą Ci odzyskać mojo w programowaniu? To dla mnie prawie 10 lat pracy w aplikacjach opartych na Javie (głównie w sieci). Czasami czuję się naprawdę znudzona regularną pracą... te same stare problemy, podobne wyzwania itp. Ponieważ pracuję w firmie obsługującej różnych klientów, od czasu do czasu zmieniam domenę, dowiaduję się o nowych rzeczach , ale ostatecznie wszystkie są aplikacjami webowymi i naprawdę nie znajduję nic ciekawego po 6-8 miesiącach w nowym projekcie. Chciałbym się dowiedzieć od ekspertów, w jaki sposób praca w tej samej technologii jest interesująca?


title: Czy zadaniem programistów jest zaprojektowanie bazy danych?

text: Jestem programistą od sześciu lat. W swojej karierze pracowałem nad wieloma aplikacjami internetowymi. W większości przypadków, gdy potrzebna była baza danych, była ona przekazywana nam (programistom) lub mieliśmy jakąś starszą bazę danych do pracy. Jeśli nie, musieliśmy sami stworzyć i zaprojektować bazę danych, co nie było takie trudne. Ale czy my, jako programiści, mamy tworzyć całą bazę danych od podstaw, gdy musimy budować nową aplikację, w której dane są tak ważne i mają bałaganiarskie wymagania ze złożonym modelem danych? Czy w najlepszym interesie aplikacji i firmy nie jest wykonanie tego przez eksperta? Nie próbuję uciekać od projektowania bazy danych, ale jest to rzecz, która jest tak ważna, aby zrobić to dobrze.


title: Czy styl komentarza wpływa na to, jak czytelnicy rozumieją kod?

text: To pytanie dręczyło mnie od 2 miesięcy. Jakiś czas temu znajomy, który jest świetnym programistą, dał mi kilka przykładowych kodów i po raz pierwszy zauważyłem unikalny styl organizowania komentarzy. Włożył trochę wysiłku, aby zaprojektować komentarze w sposób, który ułatwiłby mi korzystanie z samego kodu. Na przykład:               /////////////////////////////////////////////                                                   // // // Ten kod wyświetla podstawową wiadomość "Hello world" // // na ekranie konsoli. Możesz // // zmienić tekst w nawiasach. // // // ////////////////////////////////////////// / #include <iostream> int main() { cout << "Witaj świecie"; } kiedy mógł po prostu napisać /* Ten kod wyświetla w konsoli podstawową wiadomość "Witaj świecie", zmień tekst w nawiasach */ #include <iostream> int main() { cout << "Witaj świecie"; } Taki przykład tylko na większą skalę. Uważam, że jest to trochę bezproduktywne w sytuacjach zawodowych, ale w sytuacji uczenia się wydaje się idealne. Pytanie brzmi, czy styl komentarza wpływa na to, jak czytelnik rozumie kod. Moim zdaniem opcja #1 jest ładniejsza dla oka i łatwiejsza do naśladowania niż #2. Czy sposób, w jaki komentujesz kod, wpływa na zdolność zrozumienia kodu, czy jest to po prostu strata czasu i miejsca?


title: Czy istnieje miara gnicia kodu?

text: Znowu mam do czynienia z niechlujną aplikacją C++, tonami klas o mylących nazwach, obiekty mają wskaźniki do siebie i wszędzie, rozwlekłe typy danych Boost i STL itp. .Prawdopodobnie to mamy.) Kiedy pracuję nad tym projektem, często przychodzi mi do głowy fraza „zgnilizna kodu”. Czy istnieje ilościowy sposób mierzenia zgnilizny kodu? Nie spodziewałbym się niczego wysoce znaczącego lub naukowego, ponieważ żadna inna miara produktywności lub jakości kodu nie jest tak dobra. Nie szukam zwykłego przeciwieństwa miar jakości kodu, ale konkretnie miary tego, jak wiele złych rzeczy wydarzyło się po tym, jak seria „inżynierów” oprogramowania konserwacyjnego zaczęła hakować kod. Ogólny środek mający zastosowanie do dowolnego języka lub wielu języków byłby świetny. Jeśli czegoś takiego nie ma, przynajmniej dla C++, który jest lepszym niż przeciętny językiem do tworzenia bałaganu. Może coś, co dotyczy topologii, jak obiekty łączą się w czasie wykonywania, liczby fragmentów zakomentowanego kodu, jak wiele plików jest rozrzuconych po typowych zmiennych, nie wiem… ale na pewno teraz, dekada w W XXI wieku ktoś próbował zdefiniować jakąś miarę zgnilizny. Szczególnie interesujące byłoby zautomatyzowanie serii kas svn, zmierzenie „zepsucia” każdego z nich i wykreślenie zaniku w czasie.


title: Jaki jest najlepszy/etyczny sposób oszacowania czyszczenia kodu?

text: Pracuję nad linią produktów od ostatniego roku studiów dla mojego obecnego pracodawcy. Teraz, kilka lat po ukończeniu college'u, jestem w sytuacji, w której podaję szacunki dotyczące wniosków o zmianę na tej samej linii produkcyjnej. Należy pamiętać, że nasz kierownik ds. oprogramowania nadal zatwierdza szacunki, ale w trakcie tego procesu nie ma rąk do roboty. W miarę rozwoju moich umiejętności wciąż widzę rzeczy, które mogę poprawić. Problem polega na tym, jak uzyskać finansowanie tych zmian. Moim obecnym procesem jest czyszczenie / refaktoryzacja kodu, jeśli dotyka on obszaru, który ma aktywne żądanie zmiany. Jednak brudne sekcje kodu, które nie są częścią aktywnego CR, są zaniedbywane i coraz bardziej mnie denerwują w miarę dojrzewania linii produktów. Aby pomóc wyjaśnić, nie uważam, że klient powinien płacić za pełne przepisanie oprogramowania, chyba że w rzeczywistości jest to tańsze, aby spełnić nowe wymagania. Wolę zmiany przyrostowe w celu oczyszczenia fragmentów kodu. Jaki jest najlepszy sposób, aby _etycznie_ spróbować odzyskać koszty czyszczenia kodu podczas składania ofert/szacunków? Aby rozwinąć dalej, jaki rodzaj wyściółki jest typowy dla ogólnej konserwacji? Czy powinna opierać się na liniach kodu, złożoności projektu lub innej metryce?


title: Jak najlepiej mierzyć dług techniczny? Jakie dane) są najbardziej przydatne?

text: > **Możliwy duplikat:** > Jak mogę obliczyć kwotę długu technicznego istniejącego w projekcie? Gdybym chciał pomóc klientowi zrozumieć stopień zadłużenia technicznego w jego aplikacji, jaki byłby najlepszy wskaźnik do zastosowania? Natknąłem się na toksyczność kodu Erika Doernenburga, a także wtyczkę długu technicznego Sonara, ale zastanawiałem się, jakie inne istnieją. W idealnym przypadku chciałbym powiedzieć, że „system A ma wynik 100, podczas gdy system B ma wynik 50, więc system A najprawdopodobniej będzie trudniejszy w utrzymaniu niż system B”. Oczywiście rozumiem, że sprowadzenie złożonych pojęć, takich jak „dług techniczny” lub „możliwość utrzymania” do jednej liczby, może być mylące lub niedokładne (w niektórych przypadkach), jednak potrzebuję prostego sposobu przekazania go klientowi (który nie jest praktyczne w kodzie) w przybliżeniu, ile długu technicznego jest wbudowane w ich system (w stosunku do innych systemów), w celu zbudowania przypadku do refaktoryzacji/testów jednostkowych/itd. Ponownie szukam jednej liczby/wykresu/wizualizacji, a nie wyczerpującej listy naruszeń (np. CheckStyle, PMD itp.).


title: Poprawa spójności i łączenie klas

text: Dostałem ten zestaw kodu i muszę zasugerować sposoby poprawy spójności kodu i łączenia klas. Ale pomyślałem, że te klasy są dość dobrze oddzielone, ponieważ wygląda na to, że wykorzystują zdarzenia. A jeśli chodzi o spójność, wszystkie wywołania init() są umieszczone razem, wszystko wydaje mi się całkiem w porządku. klasa publiczna A { prywatna C t; szeregowy Bg; public static void main(String args[]) { // Tworzy t i g. t = nowy C(); t.init(); g = nowy B(); g.init(); g.start(to); } pubic void update (Event e) { // Aktualizuje t na podstawie zdarzenia } } public class C { public C() { ... } public void init() { ... } } public class B { public B () { ... } public void init() { ... } public void start(A s) { e = getNextEvent(); while (e. type != Quit) if (e.type == updateB) update(e) ; jeszcze s.aktualizacja(e) ; e = getNextEvent(); } public void update(Event e) { ... } } } Czy nadal istnieją sposoby na poprawę spójności i łączenia klas? Dla mnie wygląda to ok, ale wydaje mi się, że czegoś mi brakuje. Dzięki za wszelkie sugestie w tej sprawie.


title: Projektowanie oprogramowania dla branż produktowych i usługowych

text: W każdej branży istnieją dwa piony `Pion produktów` i `Pion usług`, więc moje pytanie brzmi: * Jak zmienia się podejście do projektowania podczas projektowania Oprogramowania dla Pionu Produktów w porównaniu do rozwoju Oprogramowania dla Pionu Usług? Jakie są plusy i minusy w każdym przypadku? Ponadto, w przypadku pionu produktów, * W jaki sposób projektujesz produkt lub funkcje i jakie są z tym związane etapy? Na koniec czytałem artykuł How Facebook Ships Code i wydaje się, że Menedżerowie Produktu mają bardzo mały wpływ na to, jak Produkt jest rozwijany, a odpowiedzialność za tę funkcję spoczywa głównie na Deweloperze. * Czy to dobra praktyka i dlaczego warto wybrać takie podejście? * Jaki byłby twój komentarz na temat takiego podejścia?


title: Jesteś lub będziesz zwolnionym programistą - co robisz rok temu, teraz, jutro iw przyszłym tygodniu?

text: Wielu programistów, inżynierów oprogramowania i innych specjalistów od technologii jest bez pracy, stoi w obliczu zwolnień lub nie jest na nie przygotowanych, chociaż _czują się_ teraz bezpiecznie. * Co każdy programista powinien teraz zrobić (nawet jeśli jest bezpieczny w swojej obecnej pracy), aby przygotować go na zwolnienia w przyszłości? Gdyby twój szef przyszedł do twojego boksu, kiedy to czytałeś i zwolnił cię: * Co byś zrobił zaraz potem? * Co byś zrobił jutro? * Co byś zrobił w przyszłym tygodniu? Oczywiste jest, że zawsze należy mieć aktualne CV, zawsze otrzymywać rekomendacje od ludzi, gdy widzą Cię w najlepszym wydaniu (nie wtedy, gdy szukasz nowej pracy) itp. Jakie są rzeczy, krok po kroku, które każdy programista powinien zrobić (lub powinien rozważyć zrobienie tego) na długo przed zwolnieniem, kiedy jest zwolniony i wkrótce po tym, jak został zwolniony? To pytanie o wielu możliwych aspektach. Chociaż chcę zachęcić do dyskusji, aby skoncentrować się na programowaniu odpowiedzi opartych na karierze, proszę zastanów się ponownie, zanim kogoś odrzucisz, ponieważ myśli on o tym, jak zapobiec zadłużeniu się. **Pytanie typu „bonus catch-22”:** możesz uczyć się nowego języka lub technologii bez pracy, ale w większości miejsc musisz mieć więcej niż 1-2 miesiące doświadczenia w środowisku pracy, a nie tylko na podstawie ćwiczeń edukacyjnych. Czy warto nadać priorytet nowym (najlepiej poszukiwanym) umiejętnościom, czy zamiast tego doskonalić istniejące?


title: Jak opisać swoje poziomy umiejętności w CV?

text: Jakie są możliwe/standardowe słowa opisujące Twój poziom umiejętności w różnych językach programowania w Twoim CV? Obecnie używam tych trzech: * ekspert * zaawansowany * początkujący Nie uważam się za eksperta w żadnym języku programowania, więc wszystkie moje umiejętności klasyfikuję jako początkujące lub zaawansowane. Chciałbym jednak bardziej zróżnicować. Szczególnie szukam czegoś pomiędzy _zaawansowanym_ a _ekspertem_. Jakieś sugestie? A może nie powinienem nawet zawracać sobie głowy różnicowaniem bardziej szczegółowych?


title: Dlaczego tytuły stanowisk IT i programistów są tak tajemnicze?

text: Jestem nowym stażystą w dziale IT dość dużej firmy. Nauczyłem się wielu rzeczy i kocham każdą minutę tego. Jednak im więcej osób spotykam w firmie, tym mniej rozumiem ich tytuły czy ogólną hierarchię tytułów. Oto kilka przykładów: * Starszy Projektant * Architekt Systemów * Analityk Systemów * Analityk Systemów II * Analityk Wsparcia Technicznego II * Operacje Infrastruktury Aby wymienić tylko kilka. Ale z tego, co rozumiem, czasami dwie osoby będą miały ten sam tytuł i będą robić dwie zupełnie różne rzeczy, podczas gdy czasami będą miały różne tytuły i będą robić te same rzeczy. Nic więcej nie rozumiem z samych tytułów.


title: Python — Złożoność czasowa funkcji wbudowanych w porównaniu z funkcjami budowanymi ręcznie w polach skończonych

text: Generalnie zastanawiam się nad zaletami i wadami korzystania z wbudowanych funkcji arytmetycznych w porównaniu z tworzeniem własnych w Pythonie. W szczególności zajmuję się wielomianami pól skończonych GF(2) w formacie ciągu, konwertując na wartości bazowe 2, wykonując operacje arytmetyczne, a następnie wyprowadzając z powrotem do wielomianów w formacie ciągu. Więc mały przykład tego jest w mnożeniu: Rolling własne: def multiply(a,b): bitsa = reversed("{0:b}".format(a)) g = [(b<<i)*int (bit) for i,bit in enumerate(bitsa)] return zmniejszyć(lambda x,y: x+y,g) Versus: def multiply(a,b): # a,b are GF(2) wielomiany w postaci binarnej .... return a*b #zwraca iloczyn 2 wielomianów w gf2 Obecnie operacje takie jak multiplikatywna odwrotność (na przykład z 20-bitowymi wykładnikami) zajmują dużo czasu w moim programie, ponieważ używa on wszystkich wbudowanych w Pythonie -w operacjach matematycznych, takich jak // podział podłogi i moduł % itp., W przeciwieństwie do tworzenia własnego podziału, reszty itp. Zastanawiam się, jaki wzrost wydajności i wydajności mogę uzyskać, budując je ręcznie (jak pokazano nad). Zdaję sobie sprawę, że zyski zależą od tego, jak dobrze zbudowane są wersje ręczne, to nie jest pytanie. Chciałbym się dowiedzieć 'zasadniczo', jaka jest przewaga nad tymi wbudowanymi. Na przykład, jeśli mnożenie (jak w powyższym przykładzie) jest dobrze dopasowane do arytmetyki o podstawie 10 (dziesiętnej), ale musi przeskoczyć więcej obręczy, aby zmienić zasady na binarne, a następnie jeszcze więcej obręczy w działaniu (więc jest to niższa wydajność), nad tym się zastanawiam. Na przykład, zastanawiam się, czy możliwe jest znaczne skrócenie czasu, budując je samodzielnie w sposób, na który być może niektórzy profesjonaliści już się zetknęli.


title: Próbuję zrozumieć programowanie 3-warstwowe

text: Jestem zdezorientowany, aby zrozumieć strukturę programu 3-warstwowego. Gdzie jest dobre miejsce na wyjątki, podmiot itp.? Jeśli używam MVC, w moim modelu interfejsu użytkownika, jak przenieść klasę jednostki do klasy modelu itp.? Stworzyłem projekt o nazwie Ramznegar. Jest to projekt internetowy. W tym celu użytkownik może się zarejestrować i założyć konto. Następnie zaloguj się i możesz tworzyć kategorie, takie jak gmail, yahoo, itp... W każdej kategorii użytkownik może dodać dowolny element i jego hasło. Ten program w rzeczywistości jest strażnikiem haseł. Do rozwoju tego programu stworzyłem cztery projekty o następującej strukturze: 1. RamznegarDAL: zawiera cały plik DAO 2. RamznegarBLL: zawiera logikę programu. jak odszyfrowanie i zaszyfrowanie hasła klasa 3. RamznegarUI : zawiera wszystkie klasy `JSP` i `Servlet`. 4. podmiot : zawiera 2 rodzaje zajęć. „Entity” (takie jak kategoria Kategoria, pozycja i klasa użytkownika) i „wyjątki” (w tym wszystkie klasy wyjątków, które są używane w programie, takie jak „DataSourceAccessException”), „RamznegarDAL” używa „entity” jako biblioteki. „RamznegarBLL” użyj „RamznegarDAL” i „entity” jako biblioteki „RamznegarUI” użyj „RamznegarBLL” i „entity” jako biblioteki. Teraz proszę powiedz mi, że ta struktura jest poprawna lub jeśli mam problem z koncepcją 3 warstw.