title: Zrozumienie procesu rozwoju przez osoby niebędące programistami

text: Rozpoczynając projekt dla firmy, która nie jest przede wszystkim firmą programistyczną, jednym z oczekiwań jest to, że na końcu jest gotowy produkt wolny od wszelkich błędów i od razu robi wszystko, co potrzebne. Jednak rzadko tak się dzieje. Jakie są sposoby radzenia sobie z oczekiwaniami i wyjaśniania nie-programistom, czym rozwój oprogramowania różni się od innych rodzajów rozwoju produktu?


title: Programista program uczeń-nauczyciel

text: Wiem "cześć" i takie nie są potrzebne na pytania, ale w tym przypadku można zrobić wyjątek (IMHO). Cześć! Mam 16 lat i kończę 4/6 rok edukacji przeduniwersyteckiej. Programowanie, matematyka i algorytmika to moje hobby i tak bardzo mi się to podoba, że nie mam wątpliwości, że zrobię z tego swoją pracę. W rzeczywistości lubię to tak bardzo, że spędzam prawie cały swój wolny czas na jednym, szybko się ucząc. Natykam się jednak na jeden duży problem: nie mam nauczyciela. W mojej szkole mamy coś, co nazywamy "Informatica" (holenderski), informatykę w języku angielskim. Poziom tej klasy jest jednak bardzo niski, do tego stopnia, że wiem więcej niż nauczyciel. Od czasu do czasu kupuję książki o programowaniu, ale angielski nie jest moim językiem ojczystym i czasami po prostu marnuję godziny lub dzień, ponieważ nie znam żadnego słowa (zmarnowałem tygodnie, zanim zrozumiałem czasownik „przepracować iterację”, coś, czego nie robimy nie mam po holendersku). Inna sprawa, że wszystkiego muszę się sama nauczyć. Musiałem się nauczyć, co to jest kompilacja, linkowanie, biblioteki, w tym itp. Zajęło mi to **dużo** czasu. Dzięki Bogu jest przepełnienie stosu. Kiedy byłem całkowicie zajęty czymś, mogłem tam zapytać i zwykle było to rozwiązywane w ciągu godziny. Ale utknąłem jak co godzinę na czymś małym, każdy profesjonalista westchnął, pokręcił głową i wyjaśnił to w ciągu 5 sekund. Teraz chciałbym, żeby istniał jakiś darmowy program dla uczniów-nauczycieli, który przydzieli Ci _mentora_ lub kogoś, z kim od czasu do czasu możesz rozmawiać/mailować (na IRC, MSN, nie obchodzi mnie to) zadając pytania. Więc moje pytanie, czy znasz taki program? (A może jeśli chciałbyś to zrobić, kto wie?) Przepraszam za mój angielski, jeśli zauważysz jakieś błędy, sam się tego wszystkiego nauczyłem :) (po raz kolejny poziom języka angielskiego w szkole to naprawdę podstawowe)


title: Skrypt Google Apps pobiera informacje o użytkowniku

text: Próbuję utworzyć arkusz kalkulacyjny, który będzie pobierał następujące informacje dla każdego użytkownika w naszej domenie: * Imię i nazwisko * Adres e-mail * Numer telefonu komórkowego (zapisany w sekcji „Komórka”) * Dział * Tytuł * Numer wewnętrzny (zapisany w sekcji „Praca” ) * Adres URL zdjęcia profilu Google+ Jestem całkiem nowy w pisaniu skryptów i JavaScript, więc mam pewne problemy ze specjalnymi, określonymi polami. Korzystam z tej strony referencyjnej Google, aby uzyskać pomoc, ale potrzebuję pomocy z numerami telefonów i informacjami o organizacjach. Mogę wyciągnąć `user.phones` i `user.organizations`, ale wszystkie zebrane dane są bałaganiarskie. Wiem też, że mogę uzyskać adres URL obrazu profilu Google+, używając `profile.image.url`, jeśli zdefiniuję zmienną dla `PlusDomains`. function listAllUsers() { // ustaw arkusz kalkulacyjny var ss = SpreadsheetApp.getActiveSpreadsheet(); // ustaw arkusz var sheet = ss.getSheets()[0]; // ustaw zakres var range = sheet.getRange(3, 1); // wyczyść zakres range.clear(); var pageToken, strona; do { page = AdminDirectory.Users.list({ domena: 'test.org', orderBy: 'givenName', maxResults: 500, pageToken: pageToken }); var users = page.users, auserInfo = new Array(); if (users) { for (var i=0, len=users.length; i<len; i++) { var user = users[i]; Logger.log('%s (%s)', user.name.fullName, user.primaryEmail); auserInfo.push([nazwa.użytkownika.pełna nazwa, użytkownik.podstawowy adres e-mail, telefon.użytkownika, organizacje.użytkownika]); } } else { Logger.log('Nie znaleziono użytkowników.'); } pageToken = page.nextPageToken; } while (pageToken); // ustaw wartości w arkuszu sheet.getRange(3,1,len,4).setValues(auserInfo); }


title: Dlaczego popularność Pythona była tak nagła?

text: Python pojawił się po raz pierwszy w 1991 r., ale był nieco nieznany do 2004 r., jeśli rankingi TIOBE określają cokolwiek sensownego. Co się stało? Co spowodowało, że zainteresowanie tym 13-letnim językiem przebiło dach? Czy istnieje powód, dla którego Python nie był uważany za prawdziwego konkurenta dla Perla w pierwszej dekadzie swojego istnienia? Czy jest jakiś powód, dla którego Python nie pozostawał we względnym zapomnieniu przez kolejne dziesięć lat? Osobiście uważam, że Python to bardzo fajny język i cieszę się, że nie tylko ja. Ale nie ma wsparcia korporacyjnego ani zabójczej funkcji, która wyjaśniałaby nagły wzrost znaczenia. Czy ktoś zna tę historię?


title: Jaki jest ogólny format specyfikacji projektu oprogramowania?

text: Próbuję szczegółowo udokumentować oprogramowanie, które napisałem. SAS ma zbyt wysoki poziom i nie obejmuje interfejsu API. Znalazłem kilka przykładów SDS w Internecie, ale nie widzę trendu w ich formacie. Zastanawiam się, czy istnieją ogólne wytyczne dotyczące pisania specyfikacji projektu oprogramowania lub jakie jest najlepsze podejście?


title: Wykrywanie usług Open Source

text: Próbuję owinąć głowę wokół tego artykułu na temat odkrywania usług OSS i trudno mi zobaczyć las przez drzewa. W artykule tym autor przedstawia główny problem związany z wykrywaniem usług: > Problem wydaje się na początku prosty: jak klienci określają adres IP i port > dla usługi, która istnieje na wielu hostach? Ale nie jestem nawet pewien, co to oznacza/sugeruje. Mówiąc o odkrywaniu usług, o czym dokładnie mówimy tutaj? Czy tak jest, jeśli chcemy połączyć się z bazą danych, możemy potrzebować gdzieś zdefiniowanego hosta i numeru portu, na przykład: host=mydatabase01.example.com port=9300 ??? Czy to jest to, o czym mówi autor i czy to oznacza „odkrywanie usług”? Jeśli tak, to czy (oczywistym) rozwiązaniem nie byłoby po prostu umieszczenie usługi sieciowej przed wszystkim? W ten sposób klienci nie dbają o to, z jakim konkretnym hostem/portem się łączą, po prostu wykonują połączenia RESTful do, powiedzmy, `http://my-data-service.example.com`. To nie może być takie proste, ponieważ ten artykuł mówi o takich rzeczach jak ZooKeeper i Eureka, które wydają się być bardzo złożonymi bestiami. Wyraźnie czegoś mi brakuje; jeśli tak, czy ktoś może podać konkretny, **konkretny** przypadek użycia, co oznacza, gdy mówimy o „odkrywaniu usług”?


title: Oblicz wyrażenia matematyczne bez stosu

text: Jak oceniać dowolne wyrażenia matematyczne przy użyciu zmiennych tymczasowych zamiast stosu? To o czym mówię to przetłumaczenie wyrażenia na szereg prostych operacji – każda zmieniająca jedną zmienną na podstawie drugiego argumentu. Przykładowa lista operacji może wyglądać następująco: = += -= *= /= Zwróć uwagę, jak każda operacja zmienia pierwszy argument. (żaden z nich niczego nie zwraca) Oto proste wyrażenie: (mam też podrostek z napisanym pod nim przyrostkiem) x=2+a*(b+c) x 2 a b c + * + = 0 1 2 3 4 3 2 1 0 x=c x+=b x*=a x+=2 Zauważ, że nie potrzebujesz zmiennych tymczasowych. Oto wyrażenie, które wymaga zmiennej tymczasowej: x=a*(b+c)+d*(e+f) x a b c + * d e f + * + = 0 1 2 3 2 1 2 3 4 3 2 1 0 x=b x+=c x*=a tmp=e tmp+=f tmp*=d x+=tmp Wydaje mi się, że nie potrafię znaleźć algorytmicznego rozwiązania dla uzyskania tych zbiorów operacji. Wydaje się, że potrzeba zmiennych tymczasowych ma coś wspólnego z operatorami o niższym priorytecie, których argumentami są operatory o wyższym priorytecie, ale nie mogę powiedzieć. Czuję się głupio... Droga wydaje mi się tuż przede mną, ale jej nie widzę. Oczywiście można to zrobić w „łatwy” sposób; AKA, utwórz tymczasową zmienną do przechowywania wyniku każdej operacji, aby żadne operacje nie były destrukcyjne dla niczego poza tym, co umieściłeś przed `=`, ale to jest złe i nie podoba mi się to. Jak uzyskać „algorytm” wyrażenia w najprostszej formie? EDYCJA: Z powodu mojej niejednoznaczności muszę wyjaśnić, że stos jest dozwolony w _tłumaczeniu_ , ale nie w pseudo-języku, który tworzę.


title: Jak podzielić nowy projekt z istniejącą stroną mega PHP?

text: Muszę zagłębić się w bardzo dużą witrynę PHP i mam dzisiaj pierwsze spotkanie z klientem. Do tej pory dali mi tylko adres URL. Jak zbieracie/strukturyzujecie/dokumentujecie i przygotowujecie się do nowego projektu w środowisku PHP? O jakie rzeczy prosisz z góry? PS - Wiem, że są inne ogólne pytania na ten temat, ale chcę mieć styl PHP, w tym narzędzia (nawet jeśli uniwersalne) i podejścia. Dziękuję!! Jestem podekscytowana, ale też przestraszona.


title: Jak zarządzać hasłami w zespole do bazy danych z wieloma ograniczeniami środowiskowymi i bezpieczeństwa?

text: Nie chcę żadnych narzędzi, ale więcej metod, które pomogą nam zarządzać naszymi hasłami. Wiem, że to pytanie zostało zamknięte, ale myślę, że to, nawet jeśli jest powiązane, jest bardziej problemem programistów niż problemem superużytkownika. Używamy jakiegoś schematu bazy danych, każdy z hasłem. Te schematy istnieją w naszych 4 różnych środowiskach (DEV, TEST, INTEGRATION, UAT) Istnieją zasady korporacyjne dotyczące haseł, więc musimy je często zmieniać. Złe hasła powodują zablokowanie kont. Zdarza się to dość często i zajmuje niezliczone godziny, aby dbać go rozwiązać... Zasady są również dość drastyczne w kwestii zmiany hasła. Zakaz ponownego użycia, zabronione słowo... Rezultatem tego ustawienia jest bardzo często bezużyteczna baza danych dla naszego dewelopera. I dużo frustracji. Czy znasz jakiś „deterministyczny” sposób tworzenia haseł, który pomoże nam uniknąć całkowitego bałaganu?


title: Gdzie mogę dowiedzieć się, jak programy obsługują systemy plików, takie jak NTFS?

text: Piszę program do obsługi plików STFS konsoli Xbox 360. Spotykam się z różnego rodzaju problemami dotyczącymi śledzenia używanych i nieużywanych bloków, odczytywania plików niesekwencyjnych itp. To nie są tak duże problemy ze strukturą STFS - to tylko kolejna struktura plików - ale ja nie nie wiem, jak mam robić pewne rzeczy. Myślałem, że znajdę mnóstwo informacji o tym, jak systemy plików, takie jak NTFS i Fat32, są odczytywane przez programy, ale znajduję tylko zasoby dotyczące pracy z systemami plików przy użyciu gotowego oprogramowania, a nie tyle, jak to zrobić oprogramowanie. Oto odniesienie do STFS: http://free60.org/STFS


title: Skany dostępu i Visual Studio

text: Gdzie pracuję, skanowanie McAfee On Access jest wymuszane na wszystkich naszych komputerach. Visual Studio 2010 nie jest czasami najszybszym programem, ale połączenie dużej witryny internetowej, kilku konfiguracji kompilacji i plików repozytorium mercurial w folderze projektu skutkuje bardzo dużą liczbą małych plików, z których wiele jest skanowanych podczas odczytu lub zapisu. Chciałbym poprosić nasz dział IT o dodanie kilku wyjątków, aby przyspieszyć VS, ale prawdopodobnie nie będzie to łatwe zadanie. Jakie masz zalecenia dotyczące minimalnej listy wykluczeń, które mógłbym podać, a które dałyby najbardziej zauważalne ulepszenia?


title: Czy potrafisz wykonać kompilację w jednym kroku?

text: Z testu Joela: > Czy możesz wykonać kompilację w jednym kroku? Muszę powiedzieć, że nie mogę. Obecnie pracuję nad aplikacją sieci Web, która zawiera listę elementów arkusza kalkulacyjnego, które należy wykonać w celu wdrożenia. Więc moje pytanie brzmi **jak mogę to zautomatyzować**? Czy musi obejmować całą organizację? Wskazówki/techniki?


title: Jak się całujesz?

text: Zasada KISS jest często cytowaną mantrą projektową. Celem tej zasady jest wyeliminowanie niepotrzebnej złożoności projektu. To dobra rzecz, oszczędzająca czas, energię i pieniądze. Może to prowadzić do stosunkowo bezstresowej implementacji i prostego, eleganckiego, łatwego w utrzymaniu produktu końcowego. Wiele dyskusji na temat KISS dostarcza mechanizmów upraszczających wymagania, projektowanie i wdrażanie. Rzeczy, które przychodzą mi na myśl to: unikaj pełzania zakresu; prosty, oczywisty projekt i kod; minimalne zależności czasu wykonywania; refaktoryzacja w celu zachowania prostoty; itp. Jednak jest wiele ukrytych rzeczy, które robimy dla KISS. Przykłady: małe rozmiary zespołów; minimalne warstwy zarządzania; uporządkowane biurko; opanowanie jednego IDE; jasne, zwięzłe komunikaty o błędach; skrypty do automatyzacji/hermetyzacji zadań; itp. Jakie praktyki KISS stosujecie? Jak ci przynieśli korzyści? Szczególnie interesują mnie nieoczywiste praktyki.


title: Dlaczego C/C++ jest trudniejszy do dekompilacji niż C#?

text: Zobacz górną odpowiedź tutaj: _Obfuskacja na poziomie kodu źródłowego skuteczniejsza niż obfuscators?_, w szczególności "Zakoduj to w języku, który nie jest łatwy do dekompilacji, takim jak C/C++" Chcę napisać nową aplikację, która będzie sprzedawana 500 USD za licencję, więc chciałbym zapobiec dekompilacji. Czy należy unikać C#, czy użycie zaciemniacza jest wystarczające, aby zapobiec tego rodzaju rzeczom?


title: Jakie pułapki i problemy często występują, gdy zaczynasz od programowania równoległego i współbieżnego w C?

text: Mniej więcej trzy tygodnie będę brać udział w zajęciach z programowania równoległego, które będą prowadzone przy użyciu języka C do zadań. Obecnie bardzo interesuję się tym tematem i moje umiejętności C nie są straszne, ale czuję, że muszę odświeżyć C, ponieważ ostatnie zajęcia, które aktywnie wymagały programowania, były 8 miesięcy temu. Wiosną wziąłem udział w kursie Embedded Systems, więc rozumiem pojęcie impasu, semaforów i problemu „udostępnionych danych”. Był to przede wszystkim kod programowania iOS, więc moje umiejętności C również nie były zbyt przydatne w tym kontekście. Gdybym miał zgadywać, co do obszaru szczególnie rygorystycznego ponownego badania, wybrałbym wskaźniki i alokację pamięci, ponieważ wydaje się to być głównym wyzwaniem. Uważam, że klasa obejmuje MPI i OpenMP, więc mogę przyjrzeć się im wcześniej. Czy jestem na dobrej drodze, czy całkowicie czegoś mi brakuje?


title: Przedstawianie współpracownikom nowych tematów

text: Próbowałem przybliżyć współpracownikom tematy takie jak testowanie jednostkowe, wstrzykiwanie zależności, odwrócenie kontroli itp. Prowadziłem mini wykłady, pokazy i sugerowałem te tematy podczas lunchu i nauki. Odbiór był ogólnie pozytywny i ludzie dostrzegają wartość w takich tematach. Mimo że wydają się być zainteresowani tymi tematami, adopcja jest bardzo niska. Kiedy z nimi o tym rozmawiam, odpowiedź jest na ogół następująca: > Spróbuję następnym razem. Chcę tylko wyrzucić ten projekt za drzwi. Mam wrażenie, że to dlatego, że większość z tego, co widzieli, to tylko pokazy typu wykładów i nie mają żadnego praktycznego doświadczenia. Co mogę zrobić, aby ich popchnąć? Nie chcę ich "zmusić" do pisania kodu, jeśli nie chcą, ponieważ może się to wydawać "pracą domową" i może pozostawić na nich złe wrażenie. Nasze projekty generalnie nie pozostawiają czasu na eksperymenty, więc ludzie mają tendencję do unikania nowych technologii. Nie pozostawia to programistom miejsca na próbowanie wprowadzania nowych rzeczy w fazie rozwoju. Czy są jakieś zabawne lub interesujące ćwiczenia (solo lub zespołowe), które pozwalają im na bardziej praktyczne doświadczenie z tymi tematami? Mam nadzieję, że znajdę coś, co wzbudziłoby wystarczające zainteresowanie, aby byli gotowi zaplanować godzinę swojego dnia na pracę nad czymś schludnym lub na tyle duże zainteresowanie, aby zbadać sprawę w swoim własnym czasie.


title: Kiedy używasz klasy zamiast rekordu, gdy nie chcesz używać pól zmiennych?

text: Wyobrażam sobie sytuację, w której tworzysz moduł F# w stylu czysto funkcjonalnym. Oznacza to, że obiekty nie mają zmiennych pól i nie są modyfikowane w miejscu. Zakładam dla uproszczenia, że nie ma potrzeby używania obiektów .NET lub innych rodzajów obiektów. Istnieją dwa możliwe sposoby implementacji rozwiązania zorientowanego obiektowo: pierwszy to użycie klas, a drugi użycie rekordów, które mają pola typu funkcjonalnego, do implementacji metod. Wyobrażam sobie, że użyjesz klas, gdy chcesz użyć dziedziczenia, ale w przeciwnym razie rekordy byłyby odpowiednie, jeśli być może trudniejsze do wyrażenia. Czy w każdym razie uważasz, że zajęcia są wygodniejsze niż zapisy?


title: Chromebook – czy jest interesujący dla programistów?

text: Google ogłosił wczoraj (11 maja 2011 r.) Chromebooka. Chociaż jest to z pewnością fajna rzecz, nie mam pojęcia, czy kupowanie takiego dla programisty (nie JavaScript) było interesujące. Co myślisz? Czy będzie na przykład Java IDE w chmurze? Nawet wiersz poleceń?


title: Jaki jest związek między wierszem poleceń, systemem operacyjnym i mikroprocesorem?

text: Nie jestem do końca jasny, jak korzystanie z wiersza poleceń różni się od pracy przez interfejs systemu operacyjnego za pomocą na przykład edytora. Oczywiście interfejs użytkownika jest inny, ale chcę zrozumieć, w jaki sposób wiersz poleceń współdziała z jądrem i mikroprocesorem oraz jak to ma się do interfejsu jądra z GUI systemu operacyjnego. Wiem, że brakuje mi kilku warstw abstrakcji, ale byłbym wdzięczny, gdyby ktoś to wyjaśnił.


title: Jaki jest najlepszy sposób na zrobienie strzelaniny Proof of Concept?

text: Przygotowując się do nowej wersji oprogramowania, które utrzymuje nasza firma, pracowałem nad tym, co uważam za naprawdę dobre podejście do rozwiązania naszych problemów ze skalowalnością. Mam zamiar zebrać dowód koncepcji, aby zweryfikować projekt na papierze, faktycznie zrobię to, co chcę. Kiedy poinformowałem o tym zespół, szef miał kontrpropozycję, zainspirowaną częściowo sposobem, w jaki opisałem problematyczne obszary. Szef przyjął również moją propozycję wykonania dwóch weryfikacji koncepcji w celu oceny alternatyw. Jaki jest więc najlepszy sposób na sprawdzenie poprawności koncepcji? Do oceny rozwiązań stosujemy zarówno obiektywne, jak i subiektywne kryteria. Chciałbym się upewnić, że porównujemy jabłka do jabłek, stosując te dość różne podejścia. * Mamy wymagania dotyczące przepustowości i rozmiaru. Krótko mówiąc, wiemy, że musimy przetwarzać określoną liczbę obiektów na sekundę i utrzymywać tę szybkość przez godzinę. * Musimy ocenić skalowalność (zarówno poprzez dodanie większej liczby rdzeni, jak i zwiększenie liczby obiektów) * Musimy ocenić łatwość programowania (subiektywną) * Musimy ocenić, jak łatwo jest zrozumieć algorytm (subiektywnie) teorię o tym, w jaki sposób sprawy będą się opierać, ale nie chcę, aby wpłynęło to na moje wyniki. Wszelkie uwagi dotyczące tego, jak zachować obiektywność w tym procesie, a także rzeczy, które mógłbym wziąć pod uwagę, byłyby bardzo mile widziane.


title: Jak zachęcić ludzi do zgłaszania pomysłów do mojej biblioteki .NET?

text: Utrzymuję bibliotekę LGPL do szybkiego tworzenia aplikacji .NET na dużą skalę. Jest to biblioteka klas ogólnego przeznaczenia zawierająca funkcjonalności, które są używane na poziomie DAL i BLL. Tak więc w praktyce jest to biblioteka skoncentrowana na programistach po stronie serwera/średniej warstwy - nie ma żadnych błyszczących ani modnych rzeczy i jako taka nie spodziewam się, że kiedykolwiek stanie się popularna. Jednak bardzo chciałbym rozbudować bibliotekę i uzyskać więcej pomysłów na ewentualne przydatne funkcjonalności do dodania. Większe, bardziej zorientowane na użytkownika biblioteki mają mnóstwo użytkowników i mnóstwo pomysłów. Jak sprawić, by więcej osób wniosło pomysły do mojej bardziej _niszowej_ biblioteki?


title: Używanie klas CSS jako dekoratorów - dobry wzorzec?

text: Budowałem aplikację internetową z dość złożonym GUI - wiele małych elementów obok siebie oraz w innych elementach, które wymagają różnych zachowań (przeciąganie, klikanie, ale kontekstowe). Mój kod ma tendencję do działania w następujący sposób: _kontrolki zaczynają się jako tagi html_ <li> _następnie dodaję klasy do tagu_ <li class = 'static pasyw included'> _niektóre klasy mogą mieć wpływ na styl CSS, aby wpłynąć na wygląd_ .static {background: blue ; float: left;} _podczas gdy inne są obsługiwane przez jQuery, aby uzyskać zachowanie dla powiązanych zdarzeń DOM_ $("#container").delegate(".passive", function {onclick : //do-stuff}) i inne mogą być odebrane przez normalny javascript podczas skanowania dokumentu, np. zbierz wartości tekstowe wszystkich węzłów z klasą 'included'. Tak więc niektóre elementy DOM są obiektami GUI, które implementują klasy zdefiniowane przez kombinację css i jQuery. Moje pytanie brzmi, czy to dobry sposób na pracę? A także są to naprawdę „dekoratorzy” – z pewnością „dynamicznie dodają dodatkowe obowiązki do obiektu”, ale nie jestem pewien co do tego terminu. Wreszcie, czy używasz tego wzorca we własnych witrynach?


title: Dlaczego nikt nie mówi o równoległej kompilacji dla .Net?

text: Kompilacje są powolne i wymagają czasu. Możemy uzyskać program MSBuild do ich zrównoleglenia, ale tylko na jednej maszynie, a nie w klastrze. Dlaczego nikt nie wymyślił rozwiązań do tworzenia klastrów w przestrzeni .Net? Wiem, że takie rozwiązania istnieją w przestrzeni C++ (np. IncrediBuild, Electric Cloud itp.), ale my programiści .Net jesteśmy zmuszeni do budowania ogromnych rozwiązań na pojedynczych maszynach. Czy ktoś wie, czy są w tym jakieś nierozwiązywalne trudności techniczne? Po prostu ciekawy.


title: Obsługa zmian typów danych i wpisów w migracji bazy danych

text: Całkowicie przeprojektowuję witrynę, która indeksuje szereg artykułów z podstawową funkcją wyszukiwania. Poprzednia strona została napisana około dekady temu, a ja ratuję około 30 000 wpisów z danymi przechowywanymi w mniej niż idealnych formatach. Podczas przechodzenia z MSSQL do MySQL nie muszę wprowadzać żadnych zmian „na żywo”, więc nie jest to kwestia migracji na poziomie produkcyjnym, ale przeprojektowanie. Na przykład daty są przechowywane tak samo jak tagi/tematki artykułów, ale w ciągach jako „RRRRMMDDd” (mała litera d oznacza „datę” w ciągu). Zasadniczo, przed lub po przejściu z poprzedniego formatu bazy danych do nowego, będę musiał dokonać wielu zmian poszczególnych wpisów. Chociaż rozumiem, jak wykonywać operacje z wyrażeniami regularnymi w kwestiach niezwiązanych z bazą danych, moje doświadczenie bazy danych nie jest wystarczająco niezawodne, aby wiedzieć, jak najlepiej sobie z tym poradzić. Jaki jest najlepszy (lub standardowy) sposób radzenia sobie z takimi dużymi zmianami? Czy istnieje operacja SQL, którą powinienem się przyjrzeć? Daj mi znać, jeśli problem nie jest jasny — nie jestem do końca pewien, jakiej odpowiedzi szukam.


title: Która relacja jest bardziej naturalna?

text: Mam szybkie pytanie, jak najlepiej ustrukturyzować coś dla mojego projektu Java: Jestem użytkownikiem. Mogę pracować w jednym lub kilku miejscach. W tych miejscach pracy pełnię jedną lub więcej ról. Dla każdej z tych ról pracuję na zmianę. Albo wymyśliłem: Moje miejsca pracy mają zmiany, moje zmiany mają dokładnie 1 pozycję (na jakiej pozycji pracowałem, kiedy pracowałem na zmianę? To zmienia się z dnia na dzień..) lub Miejsca pracy mają stanowiska, każda pozycja ma zmiany, myślę, że druga jest bardziej naturalne, ale ciągle jeździmy tam iz powrotem / nie jesteśmy pewni, co ma większą przewagę teraz i na przyszłość. To dla mnie trudne, ponieważ mogę się spierać z obydwoma, jak sądzę? Dziękuję!


title: Najlepszy sposób walidacji właściwości klasy

text: ## Tło: Mam plik CSV, który muszę przygotować i zwalidować każdy element w każdym wierszu oraz stworzyć kolekcję klasy, posiadającej prawidłowe dane. czyli plik CSV wygląda tak: EmpID,FirstName,LastName,Salary 1,James,Help,100000 2,Jane,Scott,1000 3,Mary,Fraze,10000 Klasa wygląda tak: public class Employees { public int EmpID { get; ustawić; } ciąg publiczny Imię { get; ustawić; } ciąg publiczny Nazwisko { get; ustawić; } public string Wynagrodzenie { get; ustawić; } ciąg publiczny ErrorReason { get; ustawić; } } Oto walidacje wymagane dla każdego pola: * EmpID: * Jest to pole obowiązkowe, dlatego nie może być puste ani puste * Powinna być tylko liczbą całkowitą * Nie powinna mieć więcej niż 2 cyfry * Powinna być obecna w bazie danych ( zapytaj tę bazę danych i sprawdź, czy pracownik wychodzi z tym empidem * Imię (ta sama walidacja dla Nazwiska): * Jest to pole obowiązkowe, dlatego nie może być puste ani puste * Powinno być tylko alfabetami * Dozwolone jest nie więcej niż 30 znaków * Wynagrodzenie: * Jest to pole obowiązkowe, stąd nie może być puste ani puste * Powinno być ułamkiem dziesiętnym Aby to osiągnąć, oto moje podejście: 1. Odczyt pliku CSV wiersz po wierszu 2. Dla każdego elementu tj. EmpId, FirstName... itd ** wykonaj wymagane walidacje wywołując poszczególne metody posiadające logikę walidacji.** np.: public bool ValidateIsDecimal(string value) { } public bool ValidateIsEmpIdExists(string value) { } itd 4. Jeśli NIE WARTOŚĆ ID, wypełnij właściwość "ErrorReason", podając przyczynę niepowodzenia walidacji. (np. brak pola wymaganego lub typ danych nie jest dziesiętny itp.) 5. Dodaj tę klasę do kolekcji Employees (np.: List) Pytanie brzmi, czy jest to właściwe podejście, czy też istnieje inny lepszy/czystszy sposób sprawdzania poprawności właściwości klas.


title: Struktura front-endu dużego projektu Django

text: Kilka dni temu zacząłem pracować w nowej firmie. Przede mną cały kod front-endowy i backendowy pisał jeden człowiek (ojej...). Jak wiecie, aplikacja Django zawiera dwa główne katalogi dla front-endu: /static - dla plików statycznych (publicznych) i /templates - dla szablonów django Teraz mamy dużą aplikację z ponad 10 różnymi modułami, takimi jak: home, admin, spanel , mobile itp. Oto aktualna struktura plików i katalogów: PIERWSZY - katalog /static. Jak widać, są to katalogi mieszane z niektórymi nazwanymi modułami podobnymi, niektóre zawierają globalne biblioteki. ![katalog statyczny](http://i.stack.imgur.com/CPwzo.png) jeszcze jeden: ![katalog statyczny sekunda](http://i.stack.imgur.com/LMEED.png) DRUGA – /templates katalog. Niektóre katalogi o nazwie module z mieszanymi szablonami, niektóre zależą od nowej wersji =), niektóre używane tylko w module, ale umieszczone globalnie. ![katalog szablonów](http://i.stack.imgur.com/pztlm.png) i więcej: ![katalog szablonów 2](http://i.stack.imgur.com/XNEO6.png) chyba , że jest to brzydka, nienadająca się do utrzymania struktura, która jest poddawana stresowi! Po pewnym czasie proponuję skorzystać z tego schematu, który opiera się na strukturze modułowej. ![tutaj podaj opis obrazka](http://i.stack.imgur.com/tSjPa.png) Na początku mamy katalogi z wersjami, używane do zapisania pełnej kopii zapasowej projektu, w tym: katalog /DEPRECATED - dla starych, nieużywanych plików oraz katalog /CURRENT (aktywny), który zawiera produkcyjną wersję projektu. Myślę, że to słuszne, ponieważ możemy szybko i łatwo uzyskać dostęp do starszych lub nowszych wersji plików. Ponadto jesteśmy uratowani przed zepsutymi lub błędnymi zależnościami między różnymi wersjami. Po drugie, w każdej wersji mamy moduły samodzielne oraz moduł globalny. Każdy moduł zawiera własne katalogi /static i /templates. Ta struktura służyła do uniknięcia uszkodzonych lub błędnych zależności między różnymi modułami, ponieważ każdy moduł ma własną aplikację js, tabele css i lokalne obrazy. Moduł Global zawiera wszystkie biblioteki, główne arkusze stylów oraz obrazy, takie jak logo czy favicon. Myślę, że ta struktura jest znacznie lepsza w utrzymaniu, aktualizacji, refaktoryzacji itp. Moje pytanie brzmi: Jak myślisz, czy ten schemat jest lepszy niż obecny? Czy ten schemat może funkcjonować, czy nie można go zaimplementować w aplikacji Django?


title: Co zrobić, gdy Twoja firma nie szyfruje haseł

text: **Tło** Zlecono mi pomoc firmie w utrzymaniu ich serwera. Pracuję nad kilkoma mniejszymi projektami PHP, ale także przeglądam problemy z wydajnością, a ostatnio skanuję logi w poszukiwaniu hakerów. Ci goście od jakiegoś czasu prowadzą swój serwer i mają na ostatnich nogach coś, co nazwałbym przestarzałą aplikacją. Używa magicznych cudzysłowów, zmiennych globalnych (które pozwalają na nadpisanie `$id` przez `$_GET['id']`), używa .htaccess jako jedynego zabezpieczenia w niektórych przypadkach, nazywasz to. Koszmar bezpieczeństwa i programowania. Zostaliśmy zhakowani w przeszłości, głównie za pomocą wstrzyknięć SQL, które uruchamiały polecenia `SLEEP(99999999)` i działały jako atak DOS-a. Na szczęście nie uruchomili "małych stołów bobby", ![http://xkcd.com/327/](http://i.stack.imgur.com/OSBpv.png) XKCD: http://xkcd. com/327/ Przepisałem więc podatne na ataki instrukcje SQL z `mysql_query()` (nie mysqli) do transakcji PDO. Analizuję również zapytania o `SLEEP` i `UNION`, których nie używamy, ale zastrzyki mają. Na razie w porządku. **Najnowsze wydanie** Ostatnio poinformowano nas, że w bazie danych zmieniają się zapisy użytkowników, takie jak ich adresy e-mail na adresy prawdopodobnie utworzone przez spamerów. Zauważyłem, że ich kolumny nie mają kolumny `last_modified`, więc nie byliśmy w stanie nawet wiedzieć, kiedy były zmieniane, nie mówiąc już o tym, kto. Dodałem tę kolumnę, ale to dopiero pierwszy krok. Kiedy zaglądałem do tej tabeli, zauważyłem, że hasła nie były solone ani nawet zahaszowane, po prostu zapisane jako zwykły tekst. **Komunikacja z klientem** Jak mam podejść do całej sytuacji jako kontrahent, nie wymachując rękami jak szaleniec? Jakakolwiek rada? Myślałem o spokojnym podejściu PROBLEM 1 Streszczenie Dlaczego jest to problem Co może się stać, jeśli nie zostanie rozwiązany Sugerowana naprawa PROBLEM 2 Streszczenie Dlaczego jest to problem Co może się stać, jeśli nie zostanie rozwiązany Sugerowana naprawa


title: Usługi internetowe: uzasadnienie dla portType i powiązania w wsdl

text: W wsdl definiujemy nazwę operacji, wejście i wyjście w elemencie portType; później w wiązaniu ponownie definiujemy operację, wejście i wyjście. Jakie jest uzasadnienie tego? po co definiować je dwukrotnie? Rozumiem, że w powiązaniu definiujemy kodowanieStyle i inne atrybuty, więc po co jest portType?


title: Czy nauka różnych języków programowania z różnych kategorii jest dobra?

text: Przeczytałem kilka postów dotyczących nauki różnych języków programowania lub nie. Większość odpowiedzi wskazuje, że nauka więcej niż jednego języka programowania poszerza nasze horyzonty jako programisty i możemy nauczyć się różnych sposobów rozwiązywania podobnych problemów. Jednak niektórzy sugerują również, że nauka więcej niż jednego języka tego samego typu niewiele pomaga. Moje pytanie brzmi, czy to oznacza, że powinniśmy uczyć się różnych języków, ale także różnych kategorii? Czy powinniśmy uczyć się jednego lub wszystkich wspaniałych języków z każdej kategorii, aby poszerzyć naszą wiedzę programistyczną?


title: Czy metoda w klasie powinna mieć świadomość, że klasa „załadowała” zmienną?

text: Więc mam następujący kod, który łączy się, a następnie łączy się z serwerem LDAP. Pytanie dotyczy pierwszej metody. public function getUsers() // To jest metoda, o której mowa. { if( $this->connect()->bind() ) { ldap_query(self::$connection) // Należy pamiętać, że klasa została pomyślnie załadowana // połączenie, czy metoda bind() powinna zwrócić zasób? } } public function connect() { self::$connection = ldap_connect($this->host); if( ! self::$connection ) { wyrzuć nowy \CHttpException(503, 'Brak połączenia z serwerem '.$this->host); } foreach( $this->options as $option => $value ) { ldap_set_option(self::$connection, constant($option), $value); } return $to; } public function bind() { $ldapbind = ldap_bind(self::$connection, $this->username.'@'.$this->domain, $this->password); if( ! $ldapbind ) { wyrzuć nowy \CHttpException(503, 'No se puede enlazar con el server: '.ldap_error(self::$connection)); } zwróć prawdę; }


title: Czy jest jakiś sposób na uzyskanie atrybutów pliku audio?

text: Załóżmy, że masz plik .mp3. Kilka atrybutów, o których chciałbym się dowiedzieć, to bas, kiedy bas jest głośny, cichy, mocny, miękki i kiedy to wszystko. Czy jest jakiś sposób na zrobienie tego, czy jest coś podobnego do tego? EDYCJA: też nie przejmuję się jakim kodem, interesuje mnie tylko jak najłatwiej to zrobić


title: Czym C++ w QT różni się od standardowych bibliotek C++?

text: Chcę, aby moja aplikacja mogła manipulować obrazami i tworzyć znaki wodne, a także musi działać zarówno w systemie Windows, jak i Mac. Dlatego badam QT. Czy QT jest dostarczane ze wszystkimi bibliotekami, których będę potrzebować, aby to osiągnąć? czy będę musiał zdobyć inne standardowe biblioteki C++? Jeśli tak, to czy warto robić projekt w QT?


title: Po co deklarować zmienne blisko miejsca ich użycia?

text: Słyszałem, jak ludzie mówili, że zmienne powinny być deklarowane jak najbliżej ich użycia. Nie rozumiem tego. Na przykład ta zasada sugeruje, że powinienem to zrobić: foreach (var item in veryLongList) { int whereShouldIBeDeclared = item.Id; //... } Ale z pewnością oznacza to, że przy każdej iteracji ponoszone są koszty ogólne tworzenia nowego `int`. Czy nie byłoby lepiej użyć: int gdzieNależyZadeklarować; foreach (var item in veryLongList) { whereShouldIBeDeclared = item.Id; //... } Proszę, czy ktoś mógłby wyjaśnić?


title: Jak rozmawiać o metodach anonimowych/lambdach

text: Któregoś dnia zdałem sobie sprawę, że nie umiem mówić o metodach anonimowych. Dość łatwo jest mówić o nazwanych metodach (`Metoda X przyjmuje Y1, Y2 i Y3`) i klasach (`Klasa X ma metody A, B i C`), ale jest to trudniejsze w przypadku metod anonimowych. **Jak się o nich mówi (i pisze)**? Od liczby parametrów, które przyjmują, przez typy tych parametrów do sygnatury metody? * * * Jak byś przeczytał na głos ten anonimowy podpis metody? int -> int -> bool -> double Powiedziałbym, że `"int, int, bool to double"`. A co powiesz na to? Jak byś to przeczytał? (A,B) => A*B; Powiedziałbym, że „AB idzie/jest do A razy B”.


title: Czy algorytm Dijkstry jest odpowiednim rozwiązaniem tego problemu routingu sygnału?

text: Jestem w trakcie opracowywania modułu zarządzania i routingu sygnału dla zintegrowanego systemu audiowizualnego i projektuję go z myślą o jak największej elastyczności w różnych sieciach dystrybucji sygnału. Intencją modułu jest obsługa routingu przez wiele ustawionych w stos przełączników macierzowych1 oraz obsługa niezbędnej konwersji formatu. Najlepszym rozwiązaniem, które zbadałem w tym momencie, jest zmapowanie sieci na wykres z dyskretnymi wierzchołkami dla każdego typu sygnału obsługiwanego przez przełączniki i które są następnie łączone przez węzły reprezentujące procesory wideo obsługujące konwersję formatu. ![Przykładowy wykres](http://i.stack.imgur.com/TDXC9.jpg) _Kolory reprezentują formaty sygnałów._ _Węzły okrągłe to przełączniki, źródła lub ujścia._ _Węzły kwadratowe to procesory wideo, które przeprowadzają konwersję formatu._ Stamtąd mogę użyć implementacji algorytmu Dijkstry, aby zidentyfikować ścieżkę, którą należy utworzyć, aby uzyskać wejście X do wyjścia Y. Powinno to umożliwić przekazanie danych o konfiguracji wejścia / wyjścia wszystkich przełączników i procesorów a moduł odpowiednio się dostosuje. Czy jest to właściwe rozwiązanie, czy też istnieje alternatywne podejście, które warto zbadać? 1 znany również jako „przełącznik krzyżowy”, router wideo z wejściami M x N wyjściami, który obsługuje połączenia jeden-do-wielu. Każde urządzenie fizyczne może obsługiwać wiele formatów sygnału i może, ale nie musi, być zdolne do wykonywania jakiejkolwiek konwersji formatu. **edytuj:** Jak wspomniał Péter Török, wykres niekoniecznie będzie drzewem, diagram jest prostym przykładem ilustrującym pomysł. Po zaimplementowaniu w „rzeczywistym świecie” może istnieć wiele ścieżek, które oferują różne poziomy rozdzielczości (DVI > VGA > komponent > kompozyt), które planowałem przedstawić za pomocą ważenia krawędzi. **edit 2:** Oto nieco bardziej wyczerpujący przykład ze wskazaną kierunkowością i pokazujący sieć składającą się z dwóch typów sygnałów. Początkowy przykład został nieco zmodyfikowany, tak aby każde wejście i wyjście urządzenia zostało zdefiniowane jako dyskretny węzeł, ponieważ zapewni to dane wymagane do sterowania routingiem/wyborem wejścia macierzy. ![Przykład 2 – dwa typy sygnałów, przełączniki w stosie](http://i.stack.imgur.com/zcgcs.jpg)


title: Naprawianie popchnięcia do niewłaściwej gałęzi

text: Zatwierdziłem i wprowadziłem kilka zmian do niewłaściwej gałęzi. Znalazłem sposób, aby to naprawić, ale wydaje się to zbyt skomplikowane. Czy to naprawdę najłatwiejszy sposób? 1. na gałęzi, w której dokonałeś zmian, wpisz `hg parent` 2. uruchom `hg diff -r <rodzic> -r <ze_zmianami> > patch.diff` 3. `hg up <właściwa_gałąź>` 4. `hg import --no-commit patch.diff` 5. `hg ci -m 'zatwierdzanie zmian we właściwej gałęzi'` 6. `hg up <bad_branch>` 7. `hg parent` aby znaleźć poprzedni zestaw zmian na tej gałęzi, który jest dobry 8. `hg ci --close-branch -m 'zamykanie złej gałęzi'` 9. `hg up <last_good_changeset>` 10. dodaj spację lub inną drobną zmianę 11. `hg ci -m 'zrób wskazówkę'` 12. `hg push` W każdym razie coś w tym stylu. Zrobiłem to w nieco innej kolejności; Ponownie wprowadziłem dobrą zmianę, ustawiłem wskazówkę i musiałem wykonać wymuszenie, ponieważ tworzy nową głowicę, a następnie musiałem uruchomić hg heads `hg branch` Aby ponownie znaleźć złą gałąź, a następnie ją zamknąć. Teraz nadal pokazuje zły zestaw zmian jako „wskazówkę”, ponieważ zamknąłem go _po_ „ponownie” przepisałem dobrą gałąź, ale podczas aktualizacji do tej gałęzi, myślę, że przyjmuje najnowszą niezamkniętą głowę? Wydaje się, że naprawienie tak prostego błędu wydaje się dość śmiesznym procesem. Czy jest na to łatwiejszy sposób? Dlaczego nie?


title: Cykl ciągłej integracji informacji zwrotnej

text: Jak długo powinien trwać proces Continuous Integration (tj. kompilowanie klas i uruchamianie testów jednostkowych + test integracyjny)? W moim obecnym projekcie zajmuje to około 30 minut, czy to w porządku? Jaka jest idealna długość czasu kompilacji? Testy integracyjne zajmują większość tego czasu, jeśli 30 minut to za długo, co można tutaj zrobić? Jaki wpływ ma ukończenie kompilacji w 30 minut?


title: Wiązanie z indeksem dolnym i kategorie tablic

text: Uczę się "Zasad języków programowania" i jest dużo informacji na temat rzeczy, które składają się na język programowania. Niestety każdy materiał, z którym się do tej pory spotkałem, zawiera dużo technicznego żargonu i jest bardzo trudny do zrozumienia (przynajmniej dla początkującego, który szczerze stara się zrozumieć temat na własną rękę, czytając materiał). Czy ktoś może mi ogólnie wyjaśnić "Powiązanie indeksów dolnych i kategorie tablic" .. Klasyfikacja mówi, że istnieje pięć rodzajów tablic - 1. Tablica statyczna 2. Stała tablica dynamiczna stosu 3. Tablica dynamiczna stosu 4. Stała tablica dynamiczna sterty 5. Tablica dynamiczna sterty To jest to, co mogłem zrozumieć z definicji (prawie w każdym artykule na ten temat, z którym się spotkałem) . **Tabela statyczna —** zakresy indeksów dolnych są _statycznie powiązane_, a alokacja pamięci jest statyczna. Zrozumiałem, że miejsce na tablicę jest przydzielane w pamięci w czasie kompilacji (przed uruchomieniem). **Stała tablica dynamiczna stosu -** zakresy indeksów dolnych są _statycznie powiązane_ , ale alokacja odbywa się w _czasie opracowywania podczas wykonywania_. Teraz nic nie zrozumiałem. Co oznaczają _frazy pisane kursywą_ **Dynamiczna tablica stosu -** zakresy indeksów dolnych są _dynamicznie powiązane_ , a alokacja pamięci jest dynamiczna „podczas wykonywania”. Po związaniu pozostają stałe przez cały okres istnienia zmiennej. Nie rozumiem, co to znaczy być „związanym”? Powinienem być w stanie zrozumieć pozostałe dwie definicje, jeśli rozumiem te trzy. Wiem , że proszę dużo . Dzięki :) Oto link, który ostatnio natknąłem się na przydatny w tym temacie . Wszystkich zainteresowanych tym tematem polecamy . :)


title: Dlaczego dostępność jest ważna?

text: Wydaje się, że jest to obecnie całkiem poważna sprawa, a doświadczenie w przekształcaniu witryn internetowych, aby były bardziej dostępne, wydaje się być powszechnym kryterium pracy. Moje pytanie brzmi, dlaczego jest to ważne? Czy to kwestia prawna? Czy mogę zostać pozwany, jeśli moja strona internetowa nie spełnia pewnych standardów dostępności? Jeśli tak, jakie prawo bym złamał? Czy jest to kwestia moralna/etyczna? Czy wszyscy ludzie, niezależnie od tego, czy są półniewidomi, czy używają Pentium 2 do przeglądania Internetu, powinni mieć prawo dostępu do właściwych informacji? Czy jest to problem z umiejętnościami użytkownika? Czy jest wystarczająco dużo użytkowników w tych mniejszościowych kategoriach, że warto zainwestować czas, aby obsłużyć tych użytkowników. Czy jest to problem z utrzymaniem? Czy aplikacje, które są bardziej dostępne, są ogólnie łatwiejsze w utrzymaniu? A może jest to coś zupełnie innego?


title: Pasywne sposoby uczenia się nowej technologii?

text: Niedawno, po zakupie smartfona, odkryłem podcasty. To super, bo spędzam czas dojeżdżając do pracy i zazwyczaj byłby to strata czasu. Trzeba przyznać, że to dość lekkie rzeczy, głównie wiadomości i opinie. Nie sądzę, że mógłbym się skoncentrować, gdyby próbowali wyjaśnić za pomocą próbek kodu itp. Ale uważam, że nawet samo poznanie istnienia jakiejś nowej technologii, a może nawet rozpoznanie jakiegoś nowego żargonu, jest korzystne, przynajmniej daje mi początek jeśli zdecyduję się zajrzeć dalej. Co więcej, jest to przyjemne i łatwe. Zastanawiam się więc, czy ktokolwiek może wymyślić inne pasywne sposoby uczenia się lub poznawania nowych technologii, które nie wymagają dużego wysiłku i najlepiej można je zrobić w „martwym” czasie?


title: Wzorzec jednostki pracy/repozytorium z poradą dotyczącą wstrzykiwania zależności

text: Zajmuję się tworzeniem serii klas repozytoriów oraz klasy UnitOfWork (plus oczywiście jej interfejs IUnitOfWork). Używam Castle Windsor, który wstrzykuje zależności za pośrednictwem konstruktorów. Moja warstwa biznesowa zawiera klasy, takie jak „CustomerBusinessLogic”, z metodami takimi jak RetrieveCustomer, SaveCustomer itp. Te z kolei używają UOW do wykonywania operacji na bazie danych. Usiłuję znaleźć sposób/gdzie klasa BLL powinna uzyskać instancję UOW. Nie wydaje się właściwe wstrzykiwanie go do ctr, ponieważ jednostka pracy jest dokładnie tym - jednostką pracy! Myślę, że indywidualna metoda (LoadCustomer, SaveCustomer) powinna być odpowiedzialna za instancję UOW na czas jej działania. Jednak robienie tego oznacza uciekanie się do lokalizatora usług, który jest antywzorcem. Sugestie mile widziane!


title: Nowa nazwa testów jednostkowych

text: Nigdy nie lubiłem testów jednostkowych. Zawsze myślałem, że zwiększa to ilość pracy, którą musiałem wykonać. Okazuje się, że dotyczy to tylko rzeczywistej liczby linii kodu, które piszesz, a ponadto jest to całkowicie równoważone wzrostem liczby linii użytecznego kodu, który możesz napisać w ciągu godziny za pomocą testów i programowania sterowanego testami. Teraz uwielbiam testy jednostkowe, ponieważ pozwalają mi napisać użyteczny kod, który dość często działa za pierwszym razem! (pukaj w drewno) Odkryłem, że ludzie niechętnie przeprowadzają testy jednostkowe lub rozpoczynają projekt z rozwojem opartym na testach, jeśli są w ściśle określonych ramach czasowych lub w środowisku, w którym inni tego nie robią, więc nie robią tego. Coś w rodzaju kulturowej odmowy choćby próbowania. Myślę, że jedną z najpotężniejszych rzeczy w testowaniu jednostkowym jest pewność, że możesz podjąć się refaktoryzacji. Daje również nowo odkrytą nadzieję, że mogę przekazać swój kod komuś innemu do refaktoryzacji/ulepszenia, a jeśli moje testy jednostkowe nadal działają, mogę bez obaw korzystać z nowej wersji biblioteki, którą zmodyfikowali. Myślę, że to ten ostatni aspekt testowania jednostkowego, który potrzebuje nowej nazwy. Test jednostkowy jest bardziej jak kontrakt na to, co ten kod powinien zrobić teraz iw przyszłości. Kiedy słyszę słowo testowanie, myślę o myszach w klatkach, na których przeprowadzono na nich wiele eksperymentów, aby zobaczyć skuteczność danego związku. Nie na tym polega testowanie jednostkowe, nie testujemy innego kodu, aby zobaczyć, które podejście jest najbardziej afektywne, definiujemy, jakich wyników oczekujemy z jakimi danymi wejściowymi. W przykładzie myszy testy jednostkowe bardziej przypominają definicje tego, jak będzie działał wszechświat, w przeciwieństwie do eksperymentów przeprowadzanych na myszach. Czy jestem na haju, czy ktoś inny widzi tę odmowę przeprowadzenia testów i czy uważa, że to podobny powód, dla którego nie chce tego robić? Jakie powody podajesz Ty/inni, aby nie testować? Jak myślisz, jakie są ich motywacje w nie testowaniu jednostkowym? A jako nową nazwę dla testów jednostkowych, która może przezwyciężyć niektóre zastrzeżenia, co z jContract? (Trochę skoncentrowany na Javie, wiem :) lub kontrakty jednostkowe?


title: Pracujące maszyny deweloperów - w jaki sposób są one zazwyczaj standaryzowane lub ograniczane?

text: Mój szef chce wprowadzić nowe wytyczne dotyczące komputerów w naszej firmie. Oznacza to, że środowiska programowe zostaną całkowicie ustandaryzowane za pomocą predefiniowanego zestawu narzędzi. Celem jest, aby wszystkie maszyny były w pełni odtwarzalne i wymienialne. Zastanawiam się, jakie są wytyczne dla komputerów deweloperskich w dużych firmach, takich jak Google czy Microsoft, zwłaszcza w firmach, które są certyfikowane według jakiegoś standardu (np. ISO 9001). Czy pozwalają programistom na instalowanie oprogramowania z Internetu, jeśli potrzebują go do jakiegoś drobnego zadania? (np. narzędzie do porównywania kodu, CygWin, dodatki Windows Service Pack) czy naprawdę chcą wszystkich potrzebnych narzędzi w ustalonym, predefiniowanym środowisku, w którym wszystkie proponowane zmiany muszą być najpierw omówione z administratorem systemu?


title: Zarządzasz stroną internetową z kontrolą wersji?

text: Mała strona internetowa, którą zbudowałem dawno temu, zaczyna się trochę kręcić i zaczynam mieć problemy z wprowadzaniem zmian. Pierwotnie wszystkie strony były .html i edytowałem je i testowałem offline, aby upewnić się, że wszystko działa. Potem zdałem sobie sprawę, jak pomocne są include php, więc zmieniłem wszystko na .php i użyłem include. Bez Apache nie mógłbym już testować offline, więc z Filezillą wybrałbym opcję „wyświetl/edytuj” na plikach, które były już na serwerze, edytuj je, a następnie prześlij ponownie. To właśnie robiłem do tej pory i w większości działało to całkiem nieźle. Po prostu zapisuję plik tymczasowy, który tworzy filezilla i pozwalam mu przesłać go z powrotem na serwer. Wczoraj zdałem sobie sprawę, że jeden z plików javascript, nad którymi pracowałem poprzedniego dnia, został zastąpiony pustym plikiem. Miało to coś wspólnego z wysublimowanym tekstem, który utrzymywał otwarty nieistniejący plik tymczasowy/filezilla przesyłając pusty plik - nie jestem do końca pewien, co się stało, ale nie powinno być możliwe. A teraz muszę zmienić projekt strony, a robienie tego po jednej stronie na raz byłoby zauważalne, więc najpierw muszę to zrobić offline. Chciałbym użyć kontroli wersji i zainstalować Apache, aby móc całkowicie przetestować moją witrynę w trybie offline, ale mam z tym kilka problemów. Po pierwsze, mam forum na stronie. Mógłbym zainstalować mysql i wyeksportować tabele, a następnie zaimportować je offline, ale potem, gdy ludzie tworzą posty na stronie, kopia offline staje się nieaktualna i nie mogę już przesłać jej z powrotem na serwer. Mam też na stronie kilka skryptów Pythona używających WSGI. Ustawienia mojego hosta są bardzo specyficzne, więc gdybym pisał skrypty Pythona offline i upewnił się, że działają, nie wiedziałbym, czy będą działać online. Czy powinienem edytować wszystko w trybie offline i przesłać wszystko z powrotem na serwer, gdy działa? Co się stanie, jeśli skrypt php lub python zostanie wykonany w jeden sposób na moim lokalnym komputerze niż na serwerze?


Czy istnieje licencja Open Source, która pozwala mi zachować prawa do odwołania korzystania z oprogramowania/źródła w dowolnym momencie, z dowolnego powodu i bez ostrzeżenia? Chcę umożliwić innym korzystanie z mojego oprogramowania i kodu źródłowego za darmo, ale jednocześnie chcę mieć możliwość odwołania praw do użytkowania, jeśli nie zgadzam się ze sposobami wykorzystania oprogramowania i/lub źródła.


title: Jak mogę zaktualizować tabelę DB przy użyciu klasy POCO powiązanej w DataGridView?

text: Staram się lepiej wyjaśnić na przykładzie: * tworzę klasę Product z atrybutami takimi jak: private string _ProductCode = ""; [DisplayName("ProductCode")] public String ProductCode { get { return _ProductCode; } ustaw { _KodProduktu = wartość; OnPropertyChanged("Kod Produktu"); } } * klasa Product implementuje interfejsy: INotifyPropertyChanged, IEditableObject * Tworzę klasę ProductList, która posiada następującą właściwość: public List<Product> Products { get; ustawić; } * Wiążę klasę Product w kontrolce DataGridView przy użyciu właściwości DataSource MyGridView.DataSource = ProductList.Products; * Mam tabelę **ProductListTable** na db SqlServer, która ma więcej kolumn niż klasa **Product** * Po wciśnięciu przycisku "Zapisz" na formularzu chciałbym zapisać ProductList na ProductListTable I' m naprawdę mylące co do sposobu naśladowania ... Muszę użyć Link 2 Sql, Entity Framework? Szukam czegoś prostego dla małego projektu, ale używając klas POCO do prezentacji warstwy danych. Teraz, jak mam postępować, aby połączyć klasę z tabelą DB?


title: Czy powinienem napisać test integracyjny, który weryfikuje limity stawek?

text: Ten test wywoływałby usługę sieciową w kółko przez około minutę, aby potwierdzić, że zwracany jest określony kod odpowiedzi, powiadamiając nas o osiągnięciu naszego limitu szybkości. Nie dość, że jest to bardzo powolny test, to jeszcze niczego nie potwierdza i marnuje zasoby. Czuję, że to jest jak potwierdzenie, że wypicie butelki wódki zabije człowieka. Czy naprawdę potrzebujemy na to testu?


title: Jakie jest dobre podejście do niezależnego aktualizowania milionów wierszy?

text: Mam bazę danych MongoDB z milionami użytkowników w kolekcji. Funkcja agregacji zwraca miliony wyników w następującym formacie: Array ( [_id] => Array ( [user] => MongoId Object ( [$id] => 52050d48e654f6342c002d42 ) [send] => 1 [open] => 1 [ kliknij] => 2 ) Teraz muszę zaktualizować odpowiedniego użytkownika o nowe wartości (otwórz/wyślij/kliknij) i dla każdej z nich dodać flagę, opartą na porównaniu wartości ze zmienną X. Jak byłoby dobre podejście do to bez zapętlania wyników (oznacza to ładowanie GB danych do pamięci i wykonywanie milionów aktualizacji/znaleczeń) Dzięki!


title: Najlepszy sposób na naukę Pythona + GUI z platformy .NET

text: Tworzę aplikacje w **C#** / **VB.NET** od około 3-4 lat ( **.NET Framework** v2.0, 3.5, 4). Stworzyłem również kilka aplikacji lub skryptów wiersza poleceń w C i Pythonie pod Linuksem. Czasami muszę tworzyć aplikacje w innych językach, takich jak **Python** , ale ~~problem~~ jest taki, że wiele z tych aplikacji wymaga GUI. Może nie jest to zbyt skomplikowane, ale wymaga kilku okienek z _przyciskami_ , _polami tekstowymi_ , _polami listy_ ,... Jakie książki/wskazówki/samouczki proponujesz mi, abym zaczął pracować z tym językiem i móc wdrażać moje wyniki nie tylko w sieci**? **Uwaga:** Nauka Pythona nie jest tutaj wielkim problemem, ponieważ znam już podstawy. Chcę tylko skupić się na GUI. _Może to pytanie powinno być w interfejsie użytkownika zamiast tutaj? Jeśli tak, przeprowadź migrację :)_


Celem tego pytania nie jest dyskusja nad zaletami tego nad jakimkolwiek innym algorytmem sortującym - z pewnością istnieje wiele innych pytań, które to robią. To pytanie dotyczy nazwy. Dlaczego Quicksort nazywa się „Quicksort”? Jasne, przez większość czasu jest „szybko”, ale nie zawsze. Dobrze znana jest możliwość degeneracji do O(N^2). Istnieją różne modyfikacje Quicksort, które łagodzą ten problem, ale te, które sprowadzają najgorszy przypadek do gwarantowanego O (n log n), nie są już ogólnie nazywane Quicksort. (np. Introsort). Zastanawiam się tylko, dlaczego ze wszystkich znanych algorytmów sortujących, tylko ten zasługuje na miano „szybkiego”, który opisuje nie jak działa algorytm, ale jak szybki (zazwyczaj) jest. Nazywa się to Mergesort, ponieważ łączy dane. Heapsort jest tak nazywany, ponieważ używa sterty. Introsort otrzymał swoją nazwę od „Introspective”, ponieważ monitoruje własną wydajność, aby zdecydować, kiedy przełączyć się z Quicksort na Heapsort. Podobnie dla wszystkich wolniejszych — sortowanie bąbelkowe, sortowanie przez wstawianie, sortowanie przez zaznaczenie itp. Wszystkie są nazwane od sposobu ich działania. Jedyny inny wyjątek, jaki przychodzi mi do głowy, to „Bogosort”, który jest tak naprawdę tylko żartem, którego nikt nie używa w praktyce. Dlaczego Quicksort nie jest nazywany czymś bardziej opisowym, takim jak „Sortowanie partycji” lub „Sortowanie przestawne”, które opisują, co faktycznie robi? Nie chodzi nawet o to, że „dotarłem tu pierwszy”. Mergesort został opracowany 15 lat przed Quicksort. (1945 i 1960 odpowiednio według Wikipedii) Wydaje mi się, że jest to bardziej kwestia historii niż programowania. Jestem tylko ciekaw, skąd się wzięła nazwa - czy to był tylko dobry marketing?


title: Suma dzielników liczb zakresu ~ 10^6

text: Próbowałem znaleźć sumę dzielników liczb do 106. Przypadki testowe są jak rzędu 105. Wykonałem wstępne przetwarzanie, takie jak int divisors(int num) { int sum=0; for(int i=1; i*i<=liczba; i++) suma += (liczba%i)? 0 : ((i*i==liczba)?i :i+liczba/i); suma zwrotu; } Czy jest jakaś lepsza metoda na zrobienie tego samego. Czy powinienem też stworzyć tablicę liczb pierwszych czy coś takiego?


title: Jaki schemat najlepiej opisze sytuację?

text: Pracuję nad oprogramowaniem zintegrowanym z komponentem sprzętowym. Muszę stworzyć prosty diagram, aby wyrazić, że: 1. Pewna aktywność przebiega w cyklu (urządzenie stale monitoruje temperaturę) 2. Gdy temperatura odbiega od wartości bazowej i pozostaje taka przez 10 sekund, funkcja nazywa się Piszę dokument wysokiego poziomu i nie jestem pewien, jak to uchwycić - diagramy UML nie wydają się odpowiednie ... ale może diagram aktywności?


title: strategie zatrzymywania kart z wyciekami pamięci w językach niezarządzanych pamięcią

text: Jeśli chodzi o języki niezarządzane pamięcią, takie jak C, C++ lub Fortran (mój przypadek), coraz trudniej jest śledzić alokację/dealokację pamięci, zwłaszcza gdy własność musi być współdzielona. Zaimplementowałem refcounting dla moich obiektów, ale to jeszcze bardziej komplikuje, ponieważ nie ma miejsca, w którym obiekt zostanie cofnięty. Każdy dekrement odniesienia jest potencjalnym punktem cofnięcia alokacji. Więc teraz jest mi coraz trudniej wyśledzić wycieki pamięci. Zastanawiałem się nad pewnymi ustalonymi technikami radzenia sobie z zarządzaniem pamięcią w językach niezarządzanych pamięcią, oprócz valgrindowania. **Edytuj:** bardziej interesują mnie aktywne strategie programowania (które są ogólne).


title: Logistyka ponownego wykorzystania kodu (OOP)

text: Jednym z głównych punktów stojących za OOP jest ponowne wykorzystanie kodu. Jestem ciekaw, jaka jest rzeczywista logistyka tego i jak radzą sobie z tym inni zarówno w zespole, jak i solo. Na przykład powiedzmy, że masz 5 projektów, nad którymi pracowałeś, a między nimi jest mnóstwo klas, które Twoim zdaniem mogą być przydatne w innych projektach. Jak je przechowujesz? Czy są one po prostu w normalnym repozytorium projektu, czy też wyciągasz odpowiednie klasy i umieszczasz je (tak jak teraz kopie) w innym unikalnym repozytorium źródłowym, które zawiera tylko fragmenty kodu, które są przeznaczone do ponownego użycia? Jak chcesz znaleźć lub nawet wiedzieć, że istnieje dobry fragment kodu, który powinieneś ponownie wykorzystać? Łatwiej jest, jeśli grasz solo, bo pamiętasz, że zakodowałeś coś podobnego, ale nawet wtedy staje się to trochę naciągane. Jeśli w jakiś sposób przechowujesz te fragmenty kodu, czy masz je również zindeksowane i przeszukiwane według tagów lub czegoś takiego. Obawiam się, że sprowadza się to do jakiejś plemiennej wiedzy, że po prostu wiesz, że dla sytuacji A potrzebuję rozwiązania B i mamy dobry kawałek kodu, który już może tutaj pomóc. Trochę gadatliwy, ale mam nadzieję, że dostaniesz to, do czego zmierzam. Jeśli myślisz o lepszym sposobie, aby pytanie było jaśniejsze, proszę o to :) TIA!


title: Co mam zrobić, gdy mój kod pachnie?

text: Jestem początkującym programistą i często kiedy pracuję nad własnymi projektami, zawsze mam wrażenie, że projekt mojego kodu nie jest najlepszy, jaki mógłby być, i nienawidzę tego uczucia. W końcu spędzam czas na szukaniu rzeczy, ale potem łatwo przytłacza mnie wiele szczegółów, takich jak wzorce projektowe do wyboru i kiedy użyć klasy abstrakcyjnej lub interfejsu. Mam spróbować i nauczyć się wszystkiego po trochu na raz?


title: Jaki nieteoretyczny, praktyczny język programowania nie ma zastrzeżonych słów kluczowych?

text: Szukałem _praktycznego_ języka programowania, który nie ma zarezerwowanych słów kluczowych, ale nie udało mi się go znaleźć. Pracuję nad językiem programowania dla własnego podbudowania i rozrywki i nie musiałem jeszcze dodawać żadnych słów kluczowych, to doprowadziło mnie do moich poszukiwań i pytania: nie uważam wygody dla autora kompilatora za ważne do użytkownika końcowego języka. W dzisiejszych czasach komputery są wystarczająco potężne, aby móc wywnioskować znaczenia z kontekstu. Nie więcej niż piszący musi oznaczać rzeczowniki, czasowniki itp. podczas pisania powieści, dlaczego programista miałby oznaczać funkcje i zmienne za pomocą `function x() {}` lub `set x = 1` lub `var x = 1 ` itd; kiedy mogę wywnioskować z kontekstu instrukcji, że jest to deklaracja funkcji lub wywołanie lub że etykieta jest przypisaniem do wartości lub odwołaniem do tej wartości etykiety? Oto konkretny przykład tego, co robi mój obecny parser, nie ma potrzeby stosowania zarezerwowanych słów kluczowych do obsługi typowych rzeczy, które normalnie miałyby mnóstwo _szumu_, takich jak `func` lub `function` lub `dec` lub co nie. _Deklaracja funkcji_ sum3(a,b,c) -> a + b + c. _Wywołanie funkcji_ x = suma3(1,2,3). _Anonimowa funkcja o nazwie x_ x = (a,b,c) -> a + b + c. y = x(1,2,3). **Chciałbym wiedzieć, dlaczego słowa kluczowe są tak ważne dla skutecznego języka programowania?**


title: Pracowałeś w miejscu, które nie wymagało corocznych ocen pracowniczych lub lubi?

text: Samuel Culbert uważa, że są źli. http://online.wsj.com/article/SB122426318874844933.html Zgadzam się – nie ma nic gorszego niż dla kogoś kreatywnego (załóżmy, że jestem) ocenianie w systemie 5-punktowym i przechowywanie go w dziale HR dział. Nie jestem jednak pewien, ile firm faktycznie poszło za jego radą. Czy kiedykolwiek pracowałeś w miejscu, które nigdy nie wymagało?


title: Licencja na oprogramowanie dla instytucji finansowanej ze środków publicznych

text: Jest to prawdopodobnie coś, co powinno się udać do działu prawnego – zakładając, że mają jakiekolwiek przeczucia dotyczące licencjonowania oprogramowania – ale jakiej licencji na oprogramowanie powinienem użyć przeciwko kodowi opracowanemu do użytku w instytucji finansowanej ze środków publicznych (w Wielkiej Brytanii)? W szczególności jest to kod do użytku wewnętrznego dla różnych systemów uniwersyteckich. Uważam, że powinien to być open source – i uważam, że licencja MIT byłaby najbardziej odpowiednia – ale mam wrażenie, że pewne zastrzeżone procedury i zasady, które mogą zostać ujawnione przez kod, _mogą_ być ograniczone. („maj” kursywą, ponieważ nie jestem w 100% pewien: jako organ finansowany ze środków publicznych mam wrażenie, że wszystko, co nie jest sprzeczne z ustawą o ochronie danych z 1998 r., powinno być udostępniane zgodnie z ustawą o wolności informacji 2000.) To jest w dużej mierze dyskusyjne, ponieważ źródło nie zostanie opublikowane publicznie. (Chociaż przypuszczalnie, jeśli ktoś o to poprosi, to jest to dozwolone; podawanie poufnych informacji jest redagowane.) Jednak jestem zainteresowany, aby usłyszeć opinie innych w tej sprawie.


title: Przenosisz logikę biznesową z usług na zajęcia?

text: Mam aplikację Grails z wieloma usługami, które zaczynają się rozrastać. Przepływ w większości moich metod obsługi to 1. Odczyt bazy danych (zwraca DBCursor z MongoDB) 2. Iteracja przez kursor i wykonanie pewnych operacji. 3. Zwróć wyniki z operacji. Zaczynam rozważać przeniesienie logiki z kroku 2 do klas Groovy, aby oczyścić bazę kodu i umożliwić testowanie jednostkowe. Jednak czytając niektóre wytyczne stwierdzają, że większość logiki powinna iść w usługach. Czy przeniesienie tej logiki na zajęcia Groovy jest sprzeczne z najlepszymi praktykami?


title: Czy implementacja nowej funkcji implikuje nową wersję główną?

text: Obecnie pracuję nad nową biblioteką dla żądań internetowych RESTful w Puredata i niedługo wydam wersję 1.0.0. Ta wersja nie zaimplementuje wszystkich czasowników HTTP, tylko GET, PUT, POST i DELETE. W następnej wersji ta biblioteka najprawdopodobniej będzie zawierać inne czasowniki HTTP dla żądań RESTful, PATCH, HEAD, OPTIONS, CONNECT, TRACE. Używam wersjonowania semantycznego dla numerów wersji. W specyfikacji jest napisane: > Mniejsza wersja Y (x.Y.z | x > 0) MUSI zostać zwiększona, jeśli nowa, kompatybilna wstecz > funkcjonalność zostanie wprowadzona do publicznego API. MUSI być > zwiększona, jeśli jakakolwiek funkcja publicznego interfejsu API jest oznaczona jako przestarzała. MOŻE > zostać zwiększona, jeśli w kodzie prywatnym zostaną > wprowadzone istotne nowe funkcje lub ulepszenia. MOŻE zawierać zmiany poziomu poprawek. > Wersja poprawki MUSI zostać zresetowana do 0, gdy podrzędna wersja jest inkrementowana. >> Wersja główna X (X.y.z | X > 0) MUSI zostać zwiększona, jeśli w publicznym API zostaną wprowadzone zmiany niekompatybilne wstecz. MOŻE zawierać drobne zmiany > i poziomu poprawek. Patch i wersja pomocnicza MUSZĄ zostać zresetowane do 0, gdy > wersja główna zostanie zwiększona. Teraz nie jestem pewien, co zrobić po zaimplementowaniu pozostałych czasowników: Z jednej strony funkcjonalność jest wstecznie kompatybilna, ponieważ już zaimplementowana funkcjonalność się nie zmienia. Z drugiej strony funkcjonalność się zmienia, ponieważ wysłanie żądania HEAD nie spowoduje wyświetlenia komunikatu o błędzie na konsoli, ale dane wyjściowe. W pierwszym przypadku potrzebne jest tylko zwiększenie do wersji pomocniczej, w drugim przypadku wersja główna musi zostać zwiększona. Jaka jest właściwa interpretacja w tym przypadku?


title: Radzenie sobie z kierownictwem, które nie widzi wartości w ulepszeniach, które nie są od razu widoczne dla użytkownika

text: Rozumiem presję harmonogramu. Chcesz zadowolić swoich użytkowników, ponieważ to oni są siłą napędową firmy. Jednak prawdą jest również, że pewne zmiany ułatwią wszystko w dalszej części drogi. Niestety kierownictwo w mojej organizacji ma instynktowny opór wobec takich zmian i ten opór jest tak silny, że staje na drodze do długofalowych usprawnień. Na przykład firma Apple niedawno wprowadziła automatyczne zliczanie referencji dla programów iOS. Jest to znaczne ulepszenie w porównaniu z ręcznymi wywołaniami zatrzymania/zwolnienia, z których wcześniej korzystano. Kod jest łatwiejszy do napisania i łatwiejszy w utrzymaniu. Sama wymiana waluty może spowodować pewne awarie. Ale po ich opracowaniu liczba losowych dziwnych awarii prawdopodobnie spadnie. Niedawno wspomniałem mojemu szefowi, że chcę przełączyć się na automatyczne liczenie referencji. Jego odpowiedź była taka, że chciał skoncentrować się na widocznych ulepszeniach. Jest prawdopodobne, że ta odpowiedź była z kolei spowodowana presją, jaką wywiera ponad nim – i prawdopodobnie bezpośrednio ze strony prezesa. Istnieje wiele podobnych przykładów. Wspólnym wątkiem jest to, że coś trzeba naprawić, ale krótkoterminowe koszty naprawy przewyższają krótkoterminowe korzyści, gdzie „krótkoterminowy” jest zdefiniowany jako „w ciągu najbliższych kilku tygodni”. Jak mam poradzić sobie z sytuacją? EDYCJA: Dzięki za odpowiedzi. Niech nadchodzą. Ponieważ jest to istotne w mojej sytuacji, powinienem wyjaśnić, że mój menedżer i dyrektor generalny są programistami – chociaż dyrektor generalny mógł już zapomnieć, jak to jest. Najwyraźniej ich strony programistyczne zostały przytłoczone innymi naciskami.


title: Licencjonowanie kodu systemu operacyjnego, czy można chronić określone bloki kodu?

text: Pracuję nad fragmentem kodu, z którego można korzystać za darmo, ale zakup kodu licencyjnego (lub klucza seryjnego lub innego podobnego terminu) spowoduje usunięcie niektórych reklam. Kod będzie dostępny za darmo jako open source, prawdopodobnie na licencji GPL, ale oczywiście nie chciałbym, aby ludzie bawili się kodem, który weryfikuje kod licencji z zewnętrznym dostawcą. Czy jest jakiś sposób, aby prawnie zabezpieczyć ten fragment kodu przed modyfikacją, a przynajmniej przed dystrybucją po zmodyfikowaniu, pozostawiając resztę kodu „otwartą”?


title: Które zatwierdzenie powinno zamknąć problem na Github, gdy odpowiedzialnych jest wiele zatwierdzeń?

text: Chcę zamknąć problemy na Github za pomocą moich komunikatów o zatwierdzeniu, ale nie jestem pewien, które zatwierdzenie powinno zawierać magiczny ciąg „Zamyka #XXX”, gdy za zamknięcie problemu odpowiada wiele zatwierdzeń. W szczególności zastanawiam się, czy ostatnie zatwierdzenie w mojej gałęzi funkcji (zawsze połączone z `--no-ff`) powinno zamknąć problem, czy też powinienem zamknąć go przez zatwierdzenie scalające, które "podsumowuje" całą funkcję oddział? Czy istnieje standardowy sposób na zrobienie tego, coś zatwierdzonego przez społeczność Git?


title: Używanie zmiennej w kontekście globalnym w aplikacjach internetowych

text: W aplikacji internetowej mam scenariusz, w którym potrzebuję pewnego rodzaju kontekstu globalnego (takiego jak statyczny) dla kilku zmiennych, _tylko dla bieżącego wątku_. Jeśli istnieją 3 różne współbieżne użytkownicy, oczekuję trzech odpowiednich zmiennych globalnego kontekstu dla 3 oddzielnych wątków/sesji. Użycie zmiennej statycznej powoduje, że jej zakres jest globalny dla wszystkich wątków. Czy jest sposób, w jaki mogę to osiągnąć?


title: Dodawanie nowych funkcji do starej aplikacji

text: Napisałem aplikację .NET Windows używając frameworka 3.5. W tamtym czasie wersja 3.5 była bardzo nowa, a ja miałem wiedzę tylko na temat frameworka 2.0. Ze względu na termin nie korzystałem z żadnych nowych funkcji wersji 3.5 i dostarczałem aplikację. Nie było czasu. To już dwa lata i aplikacja. działa dobrze, ale moi klienci zażądali nowych funkcji. Potrzebne jest duże skalowanie. Nowy kod, który do tej pory napisałem, wykorzystuje wiele nowych funkcji .NET 3.5 i koncentruję się na zmniejszeniu nowego rozmiaru kodu. Problem polega na tym, że nowe klasy, które chcę napisać, czasami tworzą nadmiarowe metody do robienia tego samego. Nie naruszam starego kodu. Jak zarządzać? Jeśli zastąpię stare klasy nowymi, ryzykuje to funkcjonalność i wymaga ponownego gruntownego testowania. Jeśli tego nie zrobię, rozmiar projektu się zwiększa.


title: Czy „delty pomijania” są unikalne dla svn?

text: Dobrzy ludzie, którzy stworzyli system kontroli wersji SVN, używają struktury, którą określają jako „pomiń delty”, aby przechowywać wewnętrznie historię wersji plików. Wersja jest przechowywana jako delta w stosunku do wcześniejszej wersji. Jednak wersja N niekoniecznie jest przechowywana jako delta w stosunku do wersji N-1, w ten sposób: 0 <- 1 <- 2 <- 3 <- 4 <- 5 <- 6 <- 7 <- 8 <- 9 Zamiast tego, wersja N jest przechowywana jako delta względem N-f(N), gdzie f(N) jest największą potęgą z dwóch, która dzieli N: 0 <- 1 2 <- 3 4 <- 5 6 <- 7 0 <---- -- 2 4 <------ 6 0 <---------------- 4 0 <----------------- ------------------- 8 <- 9 (Pozornie wygląda to jak lista pomijania, ale tak naprawdę nie jest tak podobne - na przykład delty pomijania nie są zainteresowane wspieraniem wstawiania w na środku listy). Więcej na ten temat możesz przeczytać tutaj. Moje pytanie brzmi: czy inne systemy używają delt pomijania? Czy delty pominięć były znane/używane/opublikowane przed SVN, czy też twórcy SVN sami je wymyślili?


title: Wiele parametrów a pojedynczy parametr (obiekt z wieloma właściwościami)

text: Mam Entity `Student` z następującymi właściwościami - (`name`, `joinedOn`, `birthday`, `age`, `batch`, etc.) oraz funkcję `fetchStudents(<params>)`. Chcę pobierać uczniów na podstawie wielu filtrów. W mojej metodzie mam dwa sposoby przekazywania filtrów. 1. Przekaż wszystkie filtry jako parametry do metody 2. Stwórz klasę StudentCriteria z filtrami jako pola a następnie przekaż obiekt tej klasy Pracując w javie zawsze wybieram drugą opcję ale ostatnio pracuję w php i byłem radził iść z pierwszą drogą. Nie jestem w stanie dowiedzieć się, który sposób jest lepszy w utrzymaniu kodu, możliwości ponownego wykorzystania i wydajności. Dziękuję.


title: jak zintegrować dynamiczne pola i formularze internetowe

text: Staram się znaleźć sposób na zaprojektowanie backendu, który będzie obsługiwał tworzenie niestandardowych formularzy internetowych w locie. Po utworzeniu te formularze zostaną wstrzyknięte do części istniejących stron internetowych. Pomyślnie utworzyłem formularze dynamiczne, ale nie jestem w stanie zrozumieć, w jaki sposób mogę zintegrować te nowo utworzone formularze lub pola niestandardowe z moimi stronami internetowymi, aby obsłużyć na przykład przesyłanie danych do jakiegoś spokojnego interfejsu API lub zunifikowanego interfejsu, który może obsłużyć wszystkie niestandardowych formularzy/pól? Używam backbonejs po stronie klienta, a dla formularzy dynamicznych używam wtyczki backbone.form do tworzenia niestandardowych formularzy i pól w locie. Utrzymuję to na serwerze. Wymyśliłem tę część po wielu badaniach RnD. Mogę wyświetlać te formularze i nowo dodane pola do moich już zbudowanych formularzy na interfejsie użytkownika, używając szkieletu i presistowanego schematu i danych. Ale problem polega na tym, że może być wiele formularzy i wiele pól; pomyśl o tym jako o wielu kartach. Muszę opracować obejście w taki sposób, aby wszystkie moje formularze mogły publikować dane na zunifikowanej/wspólnej/uogólnionej trasie serwera, gdzie mogę nimi manipulować.


title: Jak przechowywać pliki pdf w MySQL, a następnie wyświetlić, otworzyć je za pomocą C#

text: Tworzę aplikację systemu zarządzania pracownikami w c#, stworzyłem formularz dla plików pracowniczych i nie mam pojęcia jak przechowywać pliki pdf w mysql a potem je wylistować i otworzyć w c#.


title: Ciągła integracja/wdrażanie: test na zatwierdzenie, żądanie ściągnięcia, czy co?

text: Czytałem o CI/CD, bardzo mi się podobało, ale mam problem ze szczegółami, ponieważ wszystko, co czytałem, było na wysokim poziomie. Niektórzy autorzy zdawali się sugerować, że w repozytorium (lub gałęzi master?) nie może być żadnych nieudanych zatwierdzeń, więc programista, który dostarcza zły kod, zostałby zatrzymany i nie byłby w stanie stworzyć wielkiego bałaganu. Byłby zmuszony naprawić swój kod, aby testy zaliczyły. Inni wspomnieli, że wyzwalaczem będą żądania ściągnięcia, a nie zatwierdzenia. Szczerze mówiąc, rzadko używałem pull requestów, a poza tym czy nie są one czymś zewnętrznym od git? Nie są one częścią git AFAIK, ale częścią usług, takich jak github, bitbucket itp., więc nie byłem pewien, czy powinienem powiązać mój przepływ pracy z czymś takim. Wszelkie przemyślenia na ten temat bardzo mi pomogą. Proszę również wspomnieć, jakich narzędzi używasz, np. Jenkins, Buildbot itp. Żadne z narzędzi, które wypróbowałem, nie było bardzo przyjaznym IMO. W dokumentach i przykładach brakowało lub były one powiązane z pewnymi technologiami, takimi jak Java lub usługi, takie jak github. Rozważałem nawet zbudowanie własnego, nie powinno być zbyt trudno uzyskać podstawową funkcjonalność. Prawidłowy?


title: Jak tworzyć kontrakty w Pythonie

text: Obecnie uczę się Pythona (z Javy) i mam pytanie dotyczące kontraktów. _Przykład: aplikacja definiuje interfejs, który muszą zaimplementować wszystkie wtyczki, a następnie aplikacja główna może go wywołać._ W Javie: publiczny interfejs IPlugin { public Image Modify(Image img); } public class MainApp { public main_app_logic() { String nazwa_wtyczki = "com.example.myplugin"; IPlugin x = (IPlugin) Class.forName(pluginName); x.modify(niektóreimg); } } Wtyczka implementuje interfejs i używamy odbicia w głównej aplikacji do jego wywołania. W ten sposób istnieje umowa między główną aplikacją a wtyczką, do której obie mogą się odwoływać. Jak zrobić coś podobnego w Pythonie? A także, które podejście jest lepsze? _PS Nie publikuję tego w SO, ponieważ bardziej interesuje mnie filozofia stojąca za tymi dwoma podejściami._


title: Używanie PDO z MVC

text: Zadałem to pytanie na stackoverflow i nie otrzymałem odpowiedzi (zamknięte jako duplikat bez odpowiedzi). Eksperymentuję z OOP i mam następujący podstawowy układ MVC: class Model { // do bazy danych } class View { public function load($filename, $data = array()) { if(!empty($data) ) { wyodrębnij($dane); } require_once('views/header.php'); require_once("widoki/$nazwapliku"); require_once('widoki/stopka.php'); } } Class Controller { public $model; publiczny widok; function __construct() { $this->model = new Model(); $this->view = nowy Widok(); // określ na jakiej stronie jesteśmy $page = isset($_GET['view']) ? $_GET['widok'] : 'dom'; $this->display($page); } public function display($page) { switch($page) { case 'home': $this->view->load('home.php'); przerwanie; } } } Te klasy są zebrane w moim pliku konfiguracyjnym: // rozpocznij sesję session_start(); require_once('Model.php'); require_once('Widok.php'); require_once('Kontroler.php'); nowy kontroler(); Gdzie teraz umieścić kod połączenia z bazą danych i jak przekazać połączenie do modelu? try { $db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_DATABASE.'', DB_USERNAME, DB_PASSWORD); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $err) { die($err->getMessage()); } Czytałem o wstrzykiwaniu zależności, fabrykach i różnych innych wzorcach projektowych mówiących o utrzymywaniu SQL poza modelem, ale to wszystko nad moją głową przy użyciu abstrakcyjnych przykładów. Czy ktoś może po prostu pokazać mi prosty praktyczny przykład?


title: Czy rzeczy zorientowane obiektowo są naprawdę takie ważne?

text: Od lat zajmuję się algorytmami, pisząc skalowalne struktury danych do wyszukiwania w Internecie, na przykład Randomizowane Binarne Drzewa Wyszukiwania dla Auto Rekomendacji, BitMaps, Mądrość Algorytmów opartych na Crowd przy użyciu Wykresów, pisząc kilka interesujących Algorytmów Uczenia Maszynowego, takich jak Clustering, Anomaly Detection, praca nad pobieraniem informacji i tak dalej Jest coś wspólnego w rzeczach, o których wspomniałem powyżej. Wszystkie powyższe rzeczy; każde napisane w języku takim jak C++ wymaga kilku klas. Chodzi mi o to, że są to interesujące problemy, ale nie są skomplikowane, jeśli chodzi o mocno obciążone rzeczy zorientowane obiektowo. Nigdy nie używałem dziedziczenia, rzeczy wirtualnych itp. Chociaż intensywnie korzystałem z programowania generycznego, szablonów i tak dalej. Uwielbiam C++ (- Masywne rzeczy OO, jak lubię to, co mówi Joe Armstrong, twórca Erlanga, w świecie OO jeśli poprosisz o banana, otrzymasz dużą dżunglę wraz z gorylem trzymającym banana). Lubię też kodować w innych językach, takich jak Java, Python. Teraz moje pytanie brzmi: ponieważ cieszę się rodzajem projektów/algorytmów, nad którymi pracuję, czy muszę naprawdę nauczyć się rzeczy OO, czy będę lepszym koderem/projektantem po prostu używając rzeczy takich jak Dziedziczenie, Dynamiczny Polimorfizm (wirtuały)? LUB czy mogę przenieść się do świata programowania funkcjonalnego (do tej pory tego nie robiłem), który przyciąga mnie bardziej, ponieważ mogę po prostu skupić się na zadaniach/algorytmach i nie pozwolić, aby rzeczy OO oparte na Kingdom Of Noun, miały-a-jest-zasadą ja? Krótko mówiąc, czy rzeczy OO mogą mi w ogóle pomóc w projektach/algorytmach, o których wspomniałem powyżej? EDYCJA: Jeden niezwykle interesujący link do dodania tutaj: http://steve-yegge.blogspot.in/2006/03/execution-in-kingdom-of-nouns.html


title: Jak programista może doskonalić swoje umiejętności w sposób niewizualny?

text: Czuję, że kiedy nie piszę, to czytam. Kiedy wracam do domu z pracy programistycznej, piszę i czytam oprogramowanie oraz o oprogramowaniu. Problem w tym, że zarówno czytanie, jak i pisanie wymaga skupienia oczu. To nie działa, kiedy jeżdżę na rowerze, gotuję na zakupy spożywcze. Czasami używam programów do zamiany tekstu na mowę do słuchania blogów, ale czuję, że mogłoby być ich więcej. W jaki sposób programista może dowiedzieć się więcej bez konieczności skupiania wzroku? Jak niewidomi koderzy uczą się rzemiosła?


title: Jakie kroki należy podjąć, aby upewnić się, że Twoje oprogramowanie może być używane przez osoby niepełnosprawne?

text: Chcę mieć pewność, że pisane przeze mnie oprogramowanie może być używane przez osoby z różnymi niepełnosprawnościami, takimi jak ślepota i niezdolność do korzystania z myszy i/lub klawiatury. Niestety nie mam doświadczenia z takimi rzeczami, jak czytniki ekranu lub inne metody, których używają osoby niepełnosprawne, aby ułatwić/umożliwić korzystanie z komputera. Tak naprawdę nigdy nie miałem dużego doświadczenia z niepełnosprawnością i niestety nie znam osób niepełnosprawnych, o które mógłbym zapytać. Zastanawiałem się, co robią inni, aby upewnić się, że ich oprogramowanie jest dostępne dla szerokiego grona osób o różnych umiejętnościach? Wydaje się, że jest to temat, który jest często ignorowany przez programistów i myślę, że to prawdziwy wstyd. Edycja: Jeśli ktoś ma jakieś konkretne informacje związane z tworzeniem pulpitu, oprócz informacji już podanych w poniższych odpowiedziach, byłbym wdzięczny. W szczególności metody, które mają zastosowanie do programowania międzyplatformowego w systemach Windows, Mac OS X i Linux.


title: Tworzenie stron internetowych w systemie Windows, ale w środowisku Linux

text: Robię PHP Development na WAMP, ale czasami nie działa to poprawnie, gdy przesyłam pliki na serwer Linux, wymaga to wielu testów i jest denerwujące. Szukam rozwiązania do programowania PHP w systemie Windows, ale pliki będą synchronizowane z serwerem Linux. Nie chcę używać klientów SFTP/SSH, takich jak WinSCP, do przeglądania lub edycji plików. Kazano mi spojrzeć na włóczęgę, czy jest jakieś inne rozwiązanie?


title: Jak przejrzeć kod, którego nie rozumiesz?

text: Przydzielono mi rolę usprawnienia rozwoju w naszej firmie. Pierwszą rzeczą, którą chciałem zacząć, były przeglądy kodu, ponieważ nigdy wcześniej tego nie robiono. W naszej firmie jest 3 programistów. Jestem programistą stron internetowych, moje znane języki to głównie PHP, ActionScript i JavaScript. Pozostali dwaj programiści piszą wewnętrzne aplikacje w VB.net Od kilku tygodni robimy przeglądy kodu. Trudno mi zrozumieć kod VB. Więc kiedy mówią, co to robi, w większości muszę po prostu wierzyć im na słowo. Jeśli widzę coś, co wygląda nie tak, wyjaśniam swoją opinię i wyjaśniam, jak bym to rozwiązał w jednym ze znanych mi języków. Czasami moje sugestie są mile widziane, ale wiele razy mówi się mi takie rzeczy, jak „to jest najlepszy sposób na zrobienie tego w _tym_ języku” lub „to nie dotyczy _tego_ języka” lub podobne rzeczy tego rodzaju. Może to prawda, ale bez znajomości języka nie jestem pewien, jak potwierdzić lub obalić te twierdzenia. Wiem, że jednym z możliwych rozwiązań byłoby nauczenie się vb, dzięki czemu mogę robić lepsze przeglądy kodu. Naprawdę nie interesuje mnie nauka vb (zwłaszcza, że mam listę innych technologii, których próbuję nauczyć się do własnych projektów) i chciałbym zachować to jako ostateczność, ale jest to opcja. Innym pomysłem, który przyszedł mi do głowy, jest to, że oboje interesują się C#, podobnie jak ja. Jest to powiązane z nimi, ponieważ jest to .net i względem mnie, ponieważ jest bardziej podobne do języków, które znam. Jednak dla nas wszystkich to nowość. Pomyślałem o korzyściach płynących ze współpracy nas wszystkich nad wspólnym projektem C#.net i wzajemnego przeglądania kodu z tego. Wydaje mi się, że istnieje również możliwość wynajęcia konsultanta, który przyjdzie i przekaże nam kilka recenzji kodu. Co poleciłbyś zrobić w tej sytuacji.


title: Czy istnieje korelacja między złożonością kodu a produktywnością programistów?

text: Czy na dłuższą metę warto poświęcić czas na refaktoryzację kodu, jeśli chodzi o produktywność programistów? Wydaje mi się całkiem jasne, że modyfikacja czystego, dobrze zaprojektowanego systemu jest znacznie prostsza i szybsza niż praca na źle zaprojektowanym, ale szukam solidnych dowodów. Czy są jakieś badania na ten temat?


title: czy komentowanie kodu, który skopiowałem z innego miejsca, jest uważane za plagiat?

text: Jeśli splagiatowany kod został skomentowany, ponieważ znalazłem inny sposób rozwiązania problemu, ale zapomniałem usunąć komentarze, czy jest to uważane za plagiat? Użyłem skopiowanego kodu, aby pomóc mi debugować i porównać dane wyjściowe między moim własnym kodem a skopiowanym kodem. W końcowym kodzie zakomentowałem skopiowany kod. Skoro komentarze nie wpływają na działanie kodu, czy komentarze można uznać za plagiat?


title: N hetmanów, X przez Y deska decyzyjna pytanie wywiadu problemowego

text: W dzisiejszym wywiadzie zadano mi następujące pytanie i od tamtej pory o tym myślę. Nie byłem w stanie odpowiedzieć i nie mogłem znaleźć rozwiązania online. Mając szachownicę o wymiarach X na Y i N hetmanów, ustal, czy możliwe jest ułożenie tych hetmanów na szachownicy w taki sposób, aby nie mogły się nawzajem atakować. Plansza 2 x 3 z 2 hetmanami ma rozwiązanie, więc algorytm zwróci prawdę: Q . . . . P: Szukam podejścia programistycznego do tej zagadki, a nie tylko sposobów rozwiązania jej na przykład na papierze.


title: db design: cykliczne referencje dla jednego z wielu przypadków

text: Istnieje wiele pytań dotyczących odwołań cyrkularnych (czy są złe, czy nie), ale to będzie konkretne. Rozważ następujący przypadek. Istnieją dwa modele obrazu i użytkownika. Użytkownicy mają powiązane obrazy i mogą wybrać jedno z nich jako swoje zdjęcie profilowe. Zasadniczo istnieją dwa sposoby modelowania tego (wybaczcie mi pseudo-składnię): 1) Użytkownik: id - klucz podstawowy profile_image - klucz obcy dopuszczający wartość null do obrazu obrazu: id - użytkownik klucza podstawowego - klucz obcy do użytkownika 2) Użytkownik: id - klucz podstawowy Obraz: id - klucz podstawowy użytkownik - klucz obcy do profilu użytkownika - wartość logiczna prawda/fałsz Oba te podejścia mają pewne problemy. **W pierwszym przypadku:** * dobrze znany problem z jajkiem kurzym (np. klucze obce muszą być wyłączone podczas odzyskiwania z kopii zapasowej) * Może się zdarzyć, że obraz profilu wskazuje poza domenę obrazów powiązanych z użytkownikiem * Istnieje nadmiarowość link zależności (czyli jeszcze jedna relacja w porównaniu z pierwszym rozwiązaniem). To będzie miało pewien wpływ na kod aplikacji. * A jeśli później zdecydujemy się na zamówienie zdjęć, w których pierwszym jest zdjęcie profilowe? **Drugi przypadek:** * Występuje niewielka nadmiarowość danych (wiele razy **fałsz** ) * **prawda** może wystąpić więcej niż raz * nieco mniej intuicyjna (przynajmniej dla mnie) Więc moje pytanie brzmi: z tych dwóch rozwiązań jest lepsze/czystsze? Co wolisz i jak radzić sobie z problemami, które ze sobą niosą.


title: Czy te „klasyki” programowania są nadal aktualne i czy powinienem je przeczytać?

text: Natknąłem się na wiele starszych postów, które bardzo polecają następujące książki o programowaniu niezależnym od języka: 1. **Code Complete** Steve McConnel 2. **The Pragmatic Programmer** \- Andrew Hunt i Dave Thomas 3. **Perły programowania ** \- Jon Bentley 4. **Refaktoryzacja** \- Fowler, Beck, Brant, Opdyke, Roberts 5. **Wzorce projektowe** \- Gamma, Helm, Johnson, Vlissides 6. **Nie rób mnie Pomyśl: zdroworozsądkowe podejście do użyteczności w sieci** \- Steve Frug Znalazłem te zalecenia w Coding Horror Jeffa Atwooda i Scotta Hanselmana na blogu, a także w większości te same zalecenia w innych witrynach. Jeśli przeczytam te książki dzisiaj, czy są one nadal aktualne i czy poprawią mój kod, rozszerzą mój umysł, zdolności myślenia i ogólnie uczynią mnie lepszym programistą? Czy niektóre są ponadczasowe, a inne nie? Czy są jeszcze inne genialne książki, których mi brakowało, które przydadzą się dzisiaj?


title: Czy DDD ma sens w przypadku aplikacji, które w większości prezentują dane?

text: Jestem odpowiedzialny za zaprojektowanie dashboardu i front-endu do manipulacji danymi dla bazy danych transakcji sprzedaży i nie jestem pewien, jakiego typu architektury użyć. Baza danych jest zapełniana przez zewnętrzny system ETL. Wymagana funkcjonalność mojej aplikacji jest bardzo prosta; musi wyświetlić kilka alertów o warunkach wyjątków, które wykryje w bazie danych, przedstawić kilka wykresów i tabel oraz kilka podstawowych operacji CRUD na kilku tabelach. Jest bardzo mało wymaganego zachowania; firma będzie korzystać z aplikacji, aby dowiedzieć się o rzeczach, a nie robić rzeczy. Biorąc pod uwagę ten brak zachowania, czy podejście DDD ma sens? Moje obecne myślenie polega na tworzeniu widoków bazy danych w celu enkapsulacji zapytań, których będzie potrzebowała moja aplikacja, opakowaniu tych widoków za pomocą ORM i zleceniu kontrolerowi sieci zapytania do warstwy repozytorium, aby uzyskać obiekt ORM z potrzebnymi danymi. Ten obiekt ORM zostanie następnie przekazany do warstwy prezentacji. To oczywiście tworzy silne sprzężenie między bazą danych, frameworkiem ORM, warstwą prezentacji i moją logiką. Rozsądna ilość logiki znalazłaby się w widokach bazy danych. Czy mogę sprawić, by podejście DDD zadziałało dla tego rodzaju aplikacji, czy istnieje bardziej odpowiedni sposób na zrobienie tego?


title: Macierz tożsamości przy użyciu Fortran 95

text: Poniższy kod podaje macierz tożsamości dowolnej wielkości, jaką użytkownik sobie życzy: macierz tożsamości programu rzeczywista, wymiar(:, :), alokowalna :: I znak:: fmt*8 liczba całkowita :: ms, j print*,'rozmiar matrycy? odczyt*,ms alokuj(I(ms,ms)) I = 0 ! Zainicjuj tablicę. forall(j = 1:ms) I(j,j) = 1 ! Ustaw przekątną. ! I to macierz jednostkowa, pokażmy to: napisz (fmt, '(A,I2,A)') '(', ms, 'F6.2)' ! jeśli uważasz, że użyłeś konwencji (wiersz, kol), ! poniższe spowoduje wydrukowanie transponowanej macierzy (kolumny, wiersze) ! ale I' = I, więc nie jest to ważne tutaj napisz (*, fmt) I(:,:) deallocate(I) koniec programu identitymatrix (koniec kodu) Jestem trochę zdezorientowany tymi dwoma fragmentami kodu? write (fmt, '(A,I2,A)') '(', ms, 'F6.2)' write (*, fmt) I(:,:) Co robi `(A,I2,A)` dokładnie?


title: Jakie argumenty przemawiają za słabym pisaniem?

text: Pojawiło się to w dyskusji z przyjacielem i trudno mi było wymyślić jakieś dobre argumenty. Jakie korzyści daje słabe pisanie na maszynie?


title: Rozproszone biuro, czy jest opłacalne?

text: Bawiłem się myślą, jak zbudowałbym swoją wymarzoną firmę i jak sprawić, by była bardzo atrakcyjna dla świetnych programistów. Gdyby można było zatrudnić kilku "supergwiazdowych" programistów zamiast wielu "dobrych". Osobiście cieszyłbym się swobodą pracy, kiedy tylko zechcę. Mogłem więc podróżować po różnych miastach, jeśli mam na to ochotę i pracować zdalnie, lub po prostu siedzieć w domu, gdy był tryb crunch. Z mojego doświadczenia wynika jednak, że potrzebujesz jakiegoś biura z rówieśnikami, gdzie możesz dyskutować o różnych sprawach i mieć „kulturę” firmy. Powiedzmy, że chciałeś zatrudnić grupę najlepszych talentów programistów, prawdopodobnie z różnych krajów i miast. Jak skonfigurować go, aby konkurować z kampusami? Posiadanie firmy całkowicie pozbawionej biura wydaje się nieco nieoptymalne, prawdopodobnie potrzebujesz przestrzeni biurowej, w której ludzie mogą się spotykać i wybierać do pracy. Myślę, że można by mieć małe biura w różnych krajach i pozwolić ludziom pracować z tych, które wybrali. Programista może wystartować w „trybach kryzysowych”, gdy jest to uzasadnione, ale także pracować z miejsca, gdy potrzebna jest praca zespołowa i twarzą w twarz. Innym modelem byłoby zamiast posiadania własnych biur wynajmowanych w biurach, w których pracują inni programiści. W ten sposób, nawet jeśli w Twoim mieście jest tylko jeden lub dwóch pracowników, nadal możesz znaleźć firmę, jeśli czujesz się "samotny" z pracy zdalnej. Innym pomysłem jest to, że jak tydzień co drugi miesiąc zabierasz cały zespół w to samo miejsce. Co może nie być biurem, ale może być po prostu ciekawym miastem lub atrakcyjnym kurortem i stamtąd współpracować. Jednak ludzie z małżonkami mogą mieć problem z takimi rzeczami. Możesz również mieć sieć mieszkań firmowych w różnych miastach (dla 2-3 osób), zarówno tam, gdzie masz biura, jak i w niektórych innych lokalizacjach, aby programiści, zespoły lub programiści mogli wędrować po okolicy i „zbijać się” razem, jak chcą. Gdyby było to legalne (nie jestem pewien, jak to się różni w zależności od kraju) można by nawet strzelić dwie muchy za jednym razem i mieć połączone biuro/apartamenty w różnych miastach. "Hack Pad: London" "Hack Pad:Berlin" itd. a) Myślę, że moje pytania brzmią, czy taka konfiguracja byłaby opłacalna? Jak można ulepszyć koncepcję? b) Czy znalazłbyś atrakcyjną firmę, która daje Ci taką swobodę, czy może wolisz taką z dużym biurem, do którego chodzisz na co dzień? Zasadniczo więc, co sprawiłoby, że programista „supergwiazdy” wybrałby pracę z taką firmą, zamiast na kampusie google, facebook lub microsoft, gdzie masz zabawę i towarzystwo wielu utalentowanych osób.


title: Własność kodu w wielu zespołach Scrum

text: Jeśli dwa zespoły Scrumowe używają tego samego komponentu oprogramowania, kto jest odpowiedzialny za dostarczenie jasnej wizji architektonicznej tego komponentu i utrzymanie/rozwijanie tej wizji w miarę ewolucji bazy kodu? W Scrumie powinieneś mieć wspólną własność kodu, więc jak upewnić się, że rozwój wykonywany przez Zespół A nie koliduje z rozwojem prowadzonym przez Zespół B?


title: AngularJS: dyrektywy i kontrolery: resolve, loading, reloading

text: Mam pytanie filozoficzne dotyczące AngularJS i dyrektyw, ale poprawna implementacja kolejnego problemu rozwiązuje je. A więc 1. Potrzebuję dyrektywy AngularJS, 2. Ładuje jakieś dane przez _kilka_ (nie jeden!) żądań `$http`, 3. Pokazuje to, 4. Aktualizuje dane (i pokazuje je ponownie) co sekundę, 5. Widok musi pozostać niezmieniony podczas ładowania/przeładowywania danych. Jak mam to zrobić we właściwy sposób? A co jeśli potrzebuję kontrolera, ale nie dyrektywy? (Różnica polega na tym, że kontrolery mają opcje `resolve`, a dyrektywy nie.) PS: Potrzebuję konkretnego schematu lub kodu! Wiem, jakich komponentów (`$http`, `$q` itp.) muszę użyć. Nie wiem, jak to zrobić w **poprawny sposób**!


title: Jak najlepiej zaimplementować K-najbliższych sąsiadów w C# dla dużej liczby wymiarów?

text: Implementuję algorytm klasyfikacji K-najbliższych sąsiadów w C# dla zestawu uczącego i testującego około 20 000 próbek i 25 wymiarów. W mojej implementacji są tylko dwie klasy, reprezentowane przez '0' i '1'. Na razie mam następującą prostą implementację : // testSamples i trainSamples składają się z około 20k wektorów, każdy z 25 wymiarami // trainClasses zawiera 0 lub 1 oznaczającą odpowiednią klasę dla każdej próbki w trainSamples static int[] TestKnnCase(IList<double[ ]> trainSamples, IList<double[]> testSamples, IList<int[]> trainClasses, int K) { Console.WriteLine("Wykonywanie KNN z K = "+K); var TestResults = new int[testSamples.Count()]; var numertestu = testSamples.Count(); var numer_pociągu = trainSamples.Count(); // Zadeklarowanie ich tutaj, abym nie musiał ich ciągle „nować” w pętli głównej, // tylko po to, aby zaoszczędzić trochę narzutu var distances = new double[trainNumber][]; for (var i = 0; i < numerpociągu; i++) { odległości[i] = new double[2]; // W tym miejscu będzie przechowywana odległość i indeks } // Wykonywanie KNN ... for (var tst = 0; tst < numer_testu; tst++) { // Dla każdej próbki testowej oblicz odległość od każdej próbki uczącej Parallel.For(0 , trainNumber, trn => { var dist = GetDistance(testSamples[tst], trainSamples[trn]); // Przechowywanie odległości oraz indeksowanych odległości[trn][0] = dist; distances[trn][1] = trn ; }); // Sortuj odległości i weź górne K (?Co się dzieje w przypadku wielu punktów w tej samej odległości?) var voteDistances = distances.AsParallel().OrderBy(t => t[0]).Take(K); // Wykonaj 'głosowanie większością', aby sklasyfikować próbkę testową var yea = 0.0; zmienna nay = 0,0; foreach (var voter in voteDistances) { if (trainClasses[(int)voter[1]] == 1) tak++; inaczej nie++; } if (tak > nie) wyniki testu[tst] = 1; w przeciwnym razie wyniki testu[tst] = 0; } zwróć wyniki testu; } // Oblicza i zwraca kwadrat odległości euklidesowej między dwoma wektorami static double GetDistance(IList<double> sample1, IList<double> sample2) { var distance = 0.0; // załóżmy, że próbka1 i próbka2 są poprawne, tzn. mają tę samą długość for (var i = 0; i < próbka1.Liczba; i++) { var temp = próbka1[i] - próbka2[i]; odległość += temp * temp; } odległość powrotu; } Wykonanie tego zajmuje trochę czasu. W moim systemie ukończenie zajmuje około 80 sekund. Jak mogę to zoptymalizować, jednocześnie zapewniając skalowanie do większej liczby próbek danych? Jak widać, próbowałem użyć PLINQ i równoległych pętli for, które pomogły (bez nich zajęło to około 120 sekund). Co jeszcze mogę zrobić? Czytałem o tym, że drzewa KD są ogólnie wydajne dla KNN, ale każde źródło, które czytałem, stwierdzało, że nie są one wydajne dla wyższych wymiarów. Znalazłem również tę dyskusję o przepełnieniu stosu na ten temat, ale wygląda na to, że ma 3 lata i miałem nadzieję, że ktoś dowie się o lepszych rozwiązaniach tego problemu. Spojrzałem na biblioteki uczenia maszynowego w C#, ale z różnych powodów nie chcę wywoływać kodu R lub C z mojego programu C#, a niektóre inne biblioteki, które widziałem, nie były bardziej wydajne niż kod, który napisałem. Teraz próbuję tylko wymyślić, jak sam mógłbym napisać najbardziej zoptymalizowany kod do tego. Nie mogę zmniejszyć liczby wymiarów za pomocą PCA lub czegoś takiego. Dla tego konkretnego modelu wymagane jest 25 wymiarów.


title: Dotrzymać terminu czy mniej błędów?

text: W idealnym świecie lepiej jest dotrzymać terminu z mniejszą liczbą błędów. Ale z twojego doświadczenia, które jest bardziej preferowane/akceptowalne: 1. Dotrzymaj terminu, ale ma wiele błędów, ponieważ programista śpieszy się do rzeczy 2. Mniej błędów, ale nie do końca dotrzymaj terminu, ponieważ programista jest bardzo rygorystyczny w pisaniu kodu


title: Niewielkie rozszerzenie składni przygotowanych instrukcji SQL. Potrzebuje porady

text: W mojej bibliotece abstrakcji bazodanowej rozszerzam składnię wyrażeń przygotowanych w SQL tak, aby podpowiadała parserowi z oczekiwanym typem literału. Traktuję to jako bardzo istotne ulepszenie, moje rozumowanie możesz przeczytać tutaj. Jeśli chcesz zakwestionować sam pomysł, daj mi znać w komentarzach - zamiast mieszać tutaj, chciałbym zacząć od innego pytania. Porada, której chcę, dotyczy składni. Nie znam wszystkich języków i dialektów oprócz php i mysql i może już istnieje rozwiązanie ogólnego przeznaczenia, o którym nie wiem. Jeśli nie - to chcę poznać Twoją osobistą opinię lub sugestię. W tej chwili obsługiwane są tylko pozycyjne symbole zastępcze. Jednak wiele razy proszono mnie o dodanie wsparcia dla wymienionych. Nie mogę jednak zdecydować, którą składnię wybrać. Obecnie zaznaczam konwencjonalny znak zapytania pojedynczą literą, tj. `?s` \- string, `?i` \- int, `?n` \- nazwa (identyfikator) i tak dalej. Jednak dla nazwanego symbolu zastępczego (styl `:name`) jedyną rozsądną opcją dla mnie jest i:name lub, jeśli zdecyduję się dodać więcej szczegółowych modyfikatorów, nawet int:name, więc zapytanie będzie wyglądać tak: SELECT * FROM ident:table WHERE id IN (int:id) Pytanie brzmi: czy widzisz jakieś wady takiej składni? Masz propozycję innego stylu? Czy uważasz, że w ogóle jest czytelny? Kolejne pytanie dotyczy powtarzania rzeczy. W tej chwili mam dwa symbole zastępcze dla tablic - `?a` dla listy ciągów rozdzielanych przecinkami i `?u` dla par `?n=?s`. Już od dawna mnie wkurza, że taka składnia jest zbędna, ale niewystarczająca. Co zrobić, jeśli potrzebuję zestawu identyfikatorów oddzielonych przecinkami? A może nawet złożone stwierdzenie, takie jak cała klauzula WARTOŚCI? Za pomocą pewnego rodzaju operatora powtórzeń mogę znacznie poprawić tworzenie zapytań SQL. Oto przykłady tego, o czym myślę: SELECT * FROM table WHERE id IN([?i]) SELECT [?n] FROM table INSERT INTO table VALUES [(?i,?s,?s,?s)] UPDATE table SET [?n=?s] Jak widać, do oznaczenia powtórzenia używam nawiasów kwadratowych. Jednak nadal nie jestem pewien, czy powinienem ich używać. Pierwszym zarzutem jest to, że będą kolidować ze składnią identyfikatora serwera SQL. Dalej jest raczej filozoficzna - to kolejny element składni i chcę wprowadzić jak najmniej zmian w składni. Ponadto ta składnia będzie wymagała znacznie bardziej skomplikowanej logiki parsowania, której również staram się unikać. Tak więc - inną opcją jest po prostu rozszerzenie zbioru typów, albo o odrębne symbole zastępcze, takie jak `?k` dla listy liczb, `?o` dla listy identyfikatorów, albo z dodaniem modyfikatora single=letter do istniejącego typu jak `?as` (lub `?astr` lub `astr:name`) jest tablicą ciągów, `?an` i tym podobnych. Jest jeszcze jedna opcja - automatyczne wykrywanie powtórzeń. Jeśli mamy skalar - sformatuj go jako pojedynczą wartość. Jeśli nadchodzi tablica - sformatuj jako listę oddzieloną przecinkami. Jednak wiele osób uważa takie podejście za niedopuszczalne, ponieważ może prowadzić do nieprzewidywalnych wyników i błędnych (choć nadal bezpiecznych) zapytań. Nadal mam wątpliwości, czy mogę wybrać tę drogę.


title: Uzyskiwanie dostępu do prywatnej tablicy, gdy mam metodę rozszerzającą

text: Próbuję stworzyć kilka klas danych dla mojej gry w C#/XNA, która zasadniczo byłaby otoczką wokół `T[,]`: public interface IGrid<T> gdzie T : struct { Point Size { get; } T this[int x, int y] { get; ustawić; } } Na przykład mogę mieć obiekt Heightmap, który jest zasadniczo `IGrid<float>`, lub mogę mieć obiekt Level.TileData, który jest `IGrid<byte>` lub `IGrid<int>`. Mogą to być całkowicie oddzielne klasy z określonymi metodami pomocniczymi itp. Stworzyłem również małą bibliotekę rozszerzeń, która działa konkretnie na dowolnej tablicy dwuwymiarowej: public static class Transformations { static T[,] Transpose(ta wartość T[,]); statyczny T[,] FlipHorizontal(ta wartość T[,]); statyczny T[,] FlipVertical(ta wartość T[,]); statyczny T[,] RotateClockwise(ta wartość T[,]); statyczny T[,] RotateCounterClockwise(ta wartość T[,]); } Jednakże, kiedy faktycznie zaimplementuję `IGrid<T>`, napotykam mały problem projektowy. Ponieważ tablica zapasowa byłaby prywatna/chroniona, żaden kod klienta, który faktycznie używa `IGrid<T>` nie będzie mógł użyć mojej biblioteki rozszerzeń. Według CA1819 i bloga Erica publiczne ujawnianie tablicy (nawet za pośrednictwem właściwości!) jest złym pomysłem, ponieważ byłoby w pełni modyfikowalne. Sugerowanym obejściem jest sklonowanie tablicy, a następnie ujawnienie jej jako typu niezmiennego (co oznacza, że nadal nie mam tablicy, na której można korzystać z biblioteki). Czy zastanawiam się nad rzeczami, czy jest tu jakieś eleganckie rozwiązanie? Bardzo podoba mi się pomysł wykorzystania indeksatorów do odczytu/zapisu danych na obiekcie, ale w niektórych sytuacjach _mogę_ chcieć pracować z całą tablicą naraz.