title: Zewnętrzne repozytorium przeniesione z Sourceforge (SVN) do GitHub, co teraz?

text: Otrzymujemy główną wersję biblioteki kodu JEDI od jakiegoś czasu, używamy jej tylko trochę, więc nigdy nie zawracaliśmy sobie głowy zarządzaniem, którą wersję otrzymujemy. Problem polega na tym, że wydają się być teraz całkowicie odłączone od SVN, a my włączyliśmy je do naszego repozytorium jako zewnętrzny, a teraz mój serwer kompilacji to kaput. Oczywistą rzeczą do zrobienia byłoby po prostu pobrać zip i utworzyć nowe repozytorium na moim serwerze SVN i używać go zamiast tego, aktualizując, kiedy mam na to ochotę. Ale czy istnieje lepsze rozwiązanie? Używamy Tortoise SVN jako klienta SVN. (Przy okazji, to dość dziwne, że JCL zmieniło się na Git po świetnej integracji z Delphi IDE, prawda?)


title: Kroki w kierunku TDD

text: Potrzebuję porady, aby podjąć kroki związane z TDD. Jak myślimy w kategoriach interfejsów do wszystkiego, kiedy piszemy kod? Większość książek o testach mówi ci, jak pisać testy. Ale chcę książkę, która mówi, jaki jest dobry sposób na pisanie kodu pod kątem TDD


title: Czy można napisać system operacyjny w C?

text: Jakiś czas temu zobaczyłem komentarz do pytania Stack Overflow, który mnie zaskoczył: > Nikt nie może napisać systemu operacyjnego w C. To niemożliwe. To, co można > zrobić, to napisać system operacyjny w języku opartym na C/podobnym do C, który > dodaje/definiuje znaczną ilość niestandardowych możliwości poza C > rdzeniem. Czy warto zdefiniować C tak wąsko? Ludzie mówią, że Linux, sterownik GPU lub system wbudowany został „napisany w C”, a nie „napisany w C-z pewnymi rozszerzeniami, aby przystosować sprzęt”. Czy jest to niewłaściwe?


title: 3-poziomowy błąd projektowy zorientowany obiektowo?

text: Przechodzę szkolenie w mojej nowej pracy, aby używać dobrego projektowania obiektowego z 3-poziomowym stylem programowania. Mój przełożony mówi, że mam problem z projektem z moim kodem: class Program { public static void Main() { UserInputValidator Validater = new UserInputValidator(); int logSelected = -2; Console.Write("\nŚcieżka do pliku: "); string filePath = Konsola.ReadLine(); while (logSelected != -1) { Console.WriteLine("\n" + "WYBIERZ MENU OPCJI"); Konsola.WriteLine("-------------------------------------"); Console.Write("\n" + /* Wyświetl tutaj menu opcji z kilkoma opcjami */ "9 ) Exit\n\n"); Konsola.WriteLine("-------------------------------------"); logSelected = Convert.ToInt32(Console.ReadLine()); Validater.ValidateOptionsMenu(logSelected, filePath); } } public void DisplayMessage(string message) { Console.WriteLine(message); } } Validator.ValidateOptionsMenu() obsługuje logikę uruchamiania procesu w zależności od wybranej opcji. Jest to aplikacja 3-warstwowa z warstwą prezentacji, biznesu i dostępu do danych. Program znajduje się w warstwie Prezentacja, a inne warstwy używają kodu podobnego do poniższego, aby wyświetlić komunikat: Program program = new Program(); program.DisplayMessage(wiadomość); Muszę zrozumieć, dlaczego jest to zła praktyka - mój przełożony mówi, że klasa Program uruchamia tylko aplikację, tak jak klasa App w WPF. Musi mieć tylko jedną odpowiedzialność. Interakcja z użytkownikiem (moje menu opcji) jest delegowana do innej klasy. Trudno mi zrozumieć mojego przełożonego i nie wiem, jak to naprawić. Czy ktoś może mi pomóc zrozumieć?


title: Jak mogę przezwyciężyć źle ustrukturyzowany model tworzenia oprogramowania?

text: Dołączyłem do firmy, nad którą obecnie pracuję jako świeżo upieczony. Ze względu na ograniczoną liczbę wykwalifikowanych osób w tworzeniu oprogramowania GIS, a ponieważ byłem jednym z nich, zostałem bezpośrednio zatrudniony jako Project Manager. Byłem dość dobrze zaznajomiony z Javą i GIS i przeprowadziłem zmotywowane badania nad usługami opartymi na lokalizacji, ale nie z zarządzaniem projektami i tworzeniem oprogramowania strukturalnego. To było rok po ukończeniu przeze mnie specjalności z geologii, aw poprzednim roku pracowałem jako pracownik naukowy na uniwersytecie. Dzięki zainteresowaniu w pracy pojawiła się szansa i ostatecznie zostałem odpowiedzialny również za dział Business Intelligence firmy. Firma we mnie uwierzyła. Ja sam studiowałem koncepcje hurtowni danych i BI, a także udało mi się połączyć GIS z BI. Również obecnie pracuję z dwoma programistami nad naszym narzędziem BI w C# WPF, gdzie również czasami pełnię rolę programisty (co lubię). Bardzo mocno starałem się zaadaptować dobre metodologie tworzenia oprogramowania ze zwinnym zarządzaniem projektami, ale nie było to zbyt skuteczne. Poza tym, chociaż wierzę w dobrze zaprojektowany kod, jeśli chodzi o produkt, z powodu braku wiedzy technicznej, którą posiada mój CEO (który jest bezpośrednio nade mną), zwykle nie otrzymuję potrzebnej do tego ilości czasu. Potrzebny czas jest znacznie zwiększony z powodu braku wiedzy specjalistycznej, którą posiadamy również w konkretnym języku kodowania jako całości (na przykład WPF w przeciwieństwie do Javy). Nie ma również systemu kontroli wersji. Mam dosyć tego, jak wszystko się układa, ponieważ nie jest to ustrukturyzowane i większość czasu spędzam na myśleniu o tym, jak ustrukturyzować rzeczy. Mam nadzieję, że ludzie z dobrym doświadczeniem zawodowym będą w stanie pomóc mi przezwyciężyć tę sytuację.


title: W ilu językach programowania programista ma być ekspertem?

text: Czy większość programistów specjalizuje się w jednym stosie, pozostawiając inne rzeczy, czy też są ekspertami w wielu językach jednocześnie? Jeśli jest więcej niż jeden, ile jest standardem? Przez eksperta mam na myśli coś więcej niż tylko znajomość składni języka - ekspert zna wystarczająco dużo standardowych bibliotek, narzędzi, środowisk i składni, aby móc pisać nietrywialne programy bez konieczności ciągłego sprawdzania lub czytania książek/poradników.


title: Dzielenie aplikacji Rails/Ruby na wiele serwerów

text: Niedawno przenieśliśmy dużą aplikację na dwie maszyny, na których działa ten sam kod. I. Maszyna A * Serwer sieciowy dla aplikacji publicznych * Odbiera połączenia zwrotne od naszego ESP * Obsługuje kilka dużych zadań związanych z przetwarzaniem list (przesłane arkusze kalkulacyjne z danymi) II. Maszyna B * Zarządza ogromnym zestawem zadań (w tle), ale przede wszystkim koncentruje się na tworzeniu i tworzeniu biuletynów * Uruchamia całą integrację z naszą platformą NetSuite * Uruchamia wszystkie zadania konserwacji systemu (czytaj: DB) Dla mnie, posiadanie tych dwóch aplikacji uruchamiających ta sama baza kodu (duża, monolityczna aplikacja Railsowa) wydaje się „niewłaściwa”. Zastanawiam się, czy ktoś ma radę, jak lepiej rozbić kod dla tych dwóch aplikacji. Chociaż oboje potrzebują tej samej bazy danych i ostatecznie tego samego kodu modelu, maszyna B nie potrzebuje kontrolerów i widoków, a uruchamianie aplikacji Rails z pełnym stosem do jej zadań wydaje się marnotrawstwem. Kilka rzeczy przyszło mi do głowy, ale nie jestem pewien, czy próbuję rozwiązać problem, który nie istnieje: * Podziel modele na podmoduł w git i dołącz do obu aplikacji * Zbuduj Mahcine B aplikacja w zwykłym Ruby lub lżejszym frameworku, takim jak Sinatra (gdzie mogłem użyć ActiveRecord z Sinatrą w combo z podmodułem na folder modelu). Jestem nowy w tym scenariuszu i doceniam wszelkie opinie i wskazówki! Dziękuję Ci.


title: jak skomplikowany powinien być konstruktor

text: Rozmawiam ze współpracownikiem o tym, ile pracy może wykonać konstruktor. Mam klasę B, która wewnętrznie wymaga innego obiektu A. Obiekt A jest jednym z kilku elementów, których klasa B potrzebuje do wykonania swojej pracy. Wszystkie jego metody publiczne zależą od wewnętrznego obiektu A. Informacje o obiekcie A są przechowywane w bazie danych, więc próbuję sprawdzić poprawność i uzyskać je, wyszukując je w bazie danych w konstruktorze. Mój współpracownik zwrócił uwagę, że konstruktor nie powinien robić wiele poza przechwytywaniem parametrów konstruktora. Ponieważ wszystkie metody publiczne i tak zawodziłyby, gdyby obiekt A nie został znaleziony przy użyciu danych wejściowych do konstruktora, argumentowałem, że zamiast pozwalać na utworzenie instancji i później zawieść, lepiej jest wrzucić konstruktor na początku. Nie wszystkie klasy to robią, ale odkryłem, że konstruktor StreamWriter zgłasza również, jeśli ma problem z otwarciem pliku i nie opóźnia walidacji do pierwszego wywołania Write. Co myślą inni? Używam C#, jeśli to robi jakąkolwiek różnicę. Czytanie Czy jest jakiś powód, aby całą pracę nad obiektem wykonywać w konstruktorze? Zastanawiam się, czy pobranie obiektu A przez przejście do DB jest częścią „każdej innej inicjalizacji niezbędnej, aby obiekt był gotowy do użycia”, ponieważ jeśli użytkownik przekazałby nieprawidłowe wartości do konstruktora, nie byłbym w stanie użyć żadnej z jego publicznych metod. > Konstruktorzy powinni tworzyć instancje pól obiektu i wykonywać wszelkie inne > inicjalizacje niezbędne do przygotowania obiektu do użycia. Ogólnie oznacza to, że konstruktorzy są mali, ale są scenariusze, w których wymagałoby to > znacznej pracy.


title: Jaka jest korzyść z tego, że operator przypisania zwraca wartość?

text: Rozwijam język, który zamierzam zastąpić zarówno Javascript, jak i PHP. (Nie widzę z tym żadnego problemu. To nie jest tak, że żaden z tych języków nie ma dużej bazy instalacyjnej.) Jedną z rzeczy, które chciałem zmienić, było przekształcenie operatora przypisania w polecenie przypisania, usuwając możliwość korzystania zwróconej wartości. x=1; /* Zadanie. */ if (x==1) {} /* Porównanie. */ x==1; /* Błąd lub ostrzeżenie, jeszcze nie zdecydowałem. */ if (x=1) {} /* Błąd. */ Wiem, że oznaczałoby to, że te jednowierszowe funkcje, które ludzie C tak uwielbiają, przestałyby działać. Doszedłem do wniosku (z niewielkimi dowodami poza moim osobistym doświadczeniem), że w zdecydowanej większości przypadków miało to miejsce, tak naprawdę miała to być operacja porównawcza. Albo to jest? Czy są jakieś praktyczne zastosowania wartości zwracanej przez operatora przypisania, których nie można by w prosty sposób przepisać? (Dla każdego języka, który ma taką koncepcję.)


title: Podpisywanie i certyfikaty aplikacji na iOS

text: Aby podpisać aplikację dla Apple App Store, musimy stworzyć certyfikat, zapisując plik żądania certyfikatu z `keychain`, a następnie przesłać go do Apple Store. Zastanawiałem się, co zawiera ten plik żądania certyfikatu? Czy certyfikat zawiera jakiekolwiek informacje (np. odcisk palca) dotyczące systemu operacyjnego lub sprzętu?


title: Jak śledzić certyfikaty SSL usług stron trzecich?

text: Ostatnio certyfikat SSL usługi Windows Azure Storage nieoczekiwanie wygasł, a ponieważ wiele zależnych usług domyślnie „odmawiało połączenia z witryną z wygasłym certyfikatem SSL”, stało się to poważnym problemem. Teraz certyfikat SSL dowolnej usługi internetowej może zostać pobrany przez każdego w dowolnym momencie w celu weryfikacji. Zdjęcie pochodzi z pytania, do którego prowadzi łącze: ![certyfikat wygasł](http://i.stack.imgur.com/xebIt.png) Oznacza to, że informacje były dostępne przez cały czas dla „każdego, kogo może to dotyczyć” i każdy użytkownik usługi mógł zauważyć zbliżającą się datę wygaśnięcia i na przykład opublikować wiadomość na forach Microsoft, zanim będzie za późno. Jednak nie mogę znaleźć żadnych informacji o tym, jak takie przypadki są zwykle obsługiwane, z wyjątkiem tego pytania dotyczącego robienia tego w kodzie. Czy istnieje jakaś najlepsza praktyka w zakresie walidacji certyfikatów SSL usług stron trzecich? Jakie narzędzia są zazwyczaj używane?


title: Testowanie kompetencji Git

text: Do drobnych zadań zatrudniam wielu programistów. Bardzo jasno określam, że zadania można wykonać tylko poprzez wykonanie pull requesta na GitHubie. Niestety, wielu programistów nie zna Gita i często programiści nie mogą ukończyć projektu z powodu braku zrozumienia/chci nauki Gita, nawet po podjęciu się programowania zadania. To źle zarówno dla mnie, jak i dla programistów. Czasami spieram się, dlaczego nieefektywne jest to, że po prostu wysyłają mi plik zip zawierający kod. Dlatego szukam usługi online, która zaświadcza, że programiści wiedzą, jak wykonać pull request, więc nie marnuję ich ani mojego czasu. Certyfikat powinien być bezpłatny dla koderów, ale może mnie kosztować. Ważne jest, aby kurs koncentrował się dokładnie na tym, co jest potrzebne do wykonania czystego żądania ściągnięcia, więc jego przejście nie powinno zająć więcej niż 5 minut. Czy coś takiego istnieje?


title: Jaka jest różnica między Times a Dup w asemblerze?

text: W bootloaderze przedostatnia linia to: > TIMES 510-($-$$) db 0 Teraz, czy to polecenie również zrobi to samo: > db 510-($-$$) DUP (0) Jeśli nie, dlaczego? Wiem, co robi `TIMES`, ale nie wspomniano o tym w mojej książce x86 autorstwa Mazidi (Pearson Publication). Jakiś pomysł dlaczego? A co dokładnie oznacza znak `$`? Różne witryny mają różne informacje o `$`. I czy wiersz `TIMES 510-($-$$) db 0` jest absolutnie konieczny, nawet jeśli mój kod bootloadera ma rozmiar 512 bajtów? Czy ktoś może mi pomóc z tymi pytaniami?


Jak poprawnie dołączyć oświadczenia o prawach autorskich do dołączonych bibliotek? Mam program, który korzysta z bibliotek, które są na licencji GPL i MIT (zarówno łącznie na obu, tylko tylko MIT). Jak określić to u góry połączonego i zminimalizowanego pliku? Obecnie mam to: Mój program (GPL) Copyright 2009-2013, Ja jQuery (GPL/MIT) Copyright 2005, 2012 jQuery Foundation, Inc. i inni współtwórcy Inna biblioteka (MIT) Copyright 2013, inna osoba Ten plik jest częścią mojego programu. Mój Program jest wolnym oprogramowaniem: możesz go redystrybuować i/lub modyfikować zgodnie z warunkami Powszechnej Licencji Publicznej GNU opublikowanej przez Free Software Foundation, w wersji 3 tej Licencji lub (według Twojego wyboru) dowolnej późniejszej wersji. Mój Program jest rozpowszechniany z nadzieją, że będzie przydatny, ale BEZ ŻADNEJ GWARANCJI; bez dorozumianej gwarancji PRZYDATNOŚCI HANDLOWEJ lub PRZYDATNOŚCI DO OKREŚLONEGO CELU. Więcej szczegółów znajdziesz w Powszechnej Licencji Publicznej GNU. Powinieneś otrzymać kopię Powszechnej Licencji Publicznej GNU wraz z Moim Programem. Jeśli nie, zobacz <http://www.gnu.org/licenses/>. ...kod jQuery... ...mój kod... ...jakiś kod innych bibliotek...


title: Jak mogę wyraźnie oddzielić pierwszy otwarty kod samouczka od zwykłego kodu wyświetlania w środowisku OOP?

text: Mam architekturę MVC i mam ukończone podstawowe widoki. Teraz muszę dodać do projektu pierwszy tryb samouczka użytkownika. Nie chcę dodawać sprawdzania stanu pierwszego użytkownika we wszystkich widokach, które tego potrzebują, ale jedyną alternatywą, o jakiej mogę pomyśleć, jest podklasowanie wszystkiego i używanie tych podklas przy pierwszym otwarciu. Czy istnieje standardowa lub powszechnie stosowana praktyka dodawania wsparcia dla samouczków itp. bez robienia bałaganu? EDIT: Nie było jasne w moim pytaniu. Mówię o samouczkach, które użytkownik napotyka podczas pierwszego korzystania z aplikacji – w naszym przypadku chcemy dodać efekty wizualne, aby skierować jego uwagę na kluczowe elementy interfejsu użytkownika. Napisałem „pierwszy stan użytkownika”, aby oznaczać, że przechowujemy stan o liczbie użyć na lokalnym komputerze i używamy go do określenia, czy wyświetlanie jest konieczne. Zwykle dodawałbym jakiś kod przypadku krawędzi do widoków, powiedzmy, jeśli User.firstUse() arrowView.show();, ale zastanawiałem się, czy istnieje czystszy sposób na oddzielenie tego rodzaju kodu od zwykłego kodu.


title: Jak nauczyć się nie pisać „sprytnego” kodu?

text: Czy znasz to uczucie, kiedy po prostu _musisz_ pochwalić się tą nową sztuczką z „Wyrażeniem” lub uogólnić trzy różne procedury? Nie musi to być na skalę Architecture Astronaut i faktycznie może być pomocne, ale nie mogę nie zauważyć, że ktoś inny zaimplementowałby tę samą klasę lub pakiet w bardziej przejrzysty, prosty (a czasem nudny) sposób. Zauważyłem, że często projektuję programy, **rozwiązując problem** , czasem celowo, a czasem z nudów. W obu przypadkach zazwyczaj szczerze wierzę, że moje rozwiązanie jest krystalicznie czyste i eleganckie, dopóki nie zobaczę dowodów przeciwnych, ale zwykle jest za późno. Jest też część mnie, która preferuje nieudokumentowane założenia do powielania kodu, a spryt do prostoty. > Co mogę zrobić, aby **oprzeć się pokusie napisania „sprytnego” kodu** i kiedy > powinien zadzwonić dzwonek, że **robię to źle**? Problem staje się jeszcze bardziej naglący, ponieważ teraz pracuję z zespołem doświadczonych programistów, a czasami moje próby pisania inteligentnego kodu wydają się głupie nawet dla mnie, po pewnym czasie rozwiewają iluzję elegancji.


title: Technologia animacji atomów

text: Chciałbym zrobić animację dyfuzji molekularnej. Mam jakiś plik CSV lub binarny z danymi do stworzenia sceny 3D z atomami. Musi to być szybka animacja z różnymi widokami kamer, a przezroczystość zależy od energii atomu. Ponieważ regularnie koduję w C#, mam zamiar wybrać XNA (później Mono.XNA). Czy to najlepiej pasuje? Czy jest coś dobrego, co zmniejsza ilość kodu? Czy ktoś miał problem z przeniesieniem animacji XNA do Mono.XNA?


title: Szczegółowa książka o C++ dla programisty znającego już C i programowanie obiektowe?

text: Znam (w pewnym stopniu) kilka języków, w tym C, Java i Python. Jestem też (trochę) zaznajomiony ze Scala i Scheme, a ponadto umiem czytać (ale nie pisać) Assembler x86. Powiedzmy, że chcę nauczyć się C++, co to jest dobra książka, która nie uczy mnie, czym jest klasa, nie uczy mnie dziedziczenia, polimorfizmu lub luźno powiązanych klas, ani nie uczy mnie innych podstaw, tylko języka C++ ( a także jak napisać _idiomatic_ kod C++, a nie np. Javę ze składnią C++) i jego standardową bibliotekę? **Uwaga:** "Szczegóły" użyte w tytule oznacza, że nie próbuje opisać C++ na 100 stronach, chcę poznać szczegóły języka. Oczywiście mistrzostwo bierze się z praktyki, ale nie chcę uczyć się z książki tylko odrobiny C++, ale nauczyć się go dość dokładnie.


title: Co to znaczy upubliczniać kod C++ jako API C i jakie są zalety tego robienia?

text: Często słyszę, jak ludzie mówią, że programiści C++ powinni udostępniać publiczne API swojej biblioteki/produktu jako API C. Co to oznacza i jakie są tego zalety?


title: Rekurencja bez silni, liczb Fibonacciego itp.

text: Prawie każdy artykuł na temat rekurencji, jaki mogę znaleźć, zawiera przykłady silni lub liczb Fibonacciego, które są następujące: 1. Matematyka 2. Bezużyteczne w prawdziwym życiu Czy są jakieś interesujące niematematyczne przykłady _kodu_ do nauczania rekurencji? Myślę o algorytmach typu „dziel i zwyciężaj”, ale zwykle obejmują one złożone struktury danych.


title: Testowanie: deterministyczne czy niedeterministyczne?

text: Czy lepiej jest mieć albo zestaw testów deterministycznych, w wyniku którego te same testy następują po sobie * zestaw testów niedeterministycznych, który potencjalnie obejmuje więcej przypadków? **Przykład:** piszesz zestaw testów do testowania funkcjonalności kontrolera w aplikacji MVC. Kontroler wymaga danych aplikacji z bazy danych jako danych wejściowych podczas testu. Można to zrobić na dwa sposoby: * Kodujesz na stałe, które wiersze z testowej bazy danych są wybierane jako dane wejściowe (np. wiersz 10 i 412) * Używasz generatora liczb losowych, aby pseudolosowo wybrać dane z bazy danych (dwa wiersze wybierany przez generator liczb losowych) Pierwszy jest deterministyczny: każde uruchomienie testu dla tej samej wersji kodu powinno dać ten sam wynik. Drugi jest niedeterministyczny: każde uruchomienie zestawu testów ma możliwość uzyskania innego wyniku. Losowo wybrane dane mogą jednak być lepszą reprezentacją przypadków brzegowych danych. Może lepiej symulować użytkownika karmiącego nasze kontrolery nieprzewidywalnymi danymi? Jakie są powody, aby wybrać jedną z nich?


title: Jak manipuluje się niezmiennymi zestawami

text: Podczas pracy z niezmiennym zestawem lub mapą, jak te, które można znaleźć w wielu funkcjonalnych językach programowania, operacje, które w przeciwnym razie zmodyfikowałyby kontener, generują zamiast tego nowy kontener. Wiem, że większość operacji na listach w językach funkcjonalnych nie skutkuje utworzeniem kopii listy, a jedynie zmianą kolejności wskaźników. Dlatego praca z listami jest niezwykle wydajna. Jestem ciekaw, czy niezmienne mapy są podobne, czy po każdej operacji tworzona jest zupełnie nowa mapa. Pytam, ponieważ biblioteka, którą napisałem, manipuluje wieloma mapami i jestem ciekaw, czy zobaczę wzrost wydajności, jeśli przejdę na mapy niezmienne. Obecnie po prostu zapętlam moją mapę, dodając lub odrzucając pary klucz/wartość, gdy idę.


title: Podejście do aplikacji raportowania MVVM ? Warstwa dostępu do danych?

text: Próbuję podążać za wzorcem MVVM w aplikacji raportowania/statystyki, którą tworzę w C#/WPF. Stworzyłem wiele klas modeli, aby mieć właściwości jako punkt wyjścia. Niektóre z tych modeli są tworzone w celu enkapsulacji różnych statystyk, dzięki czemu mogę prezentować dane, które można odnieść do siebie. Myślę, że następnym krokiem jest utworzenie warstwy dostępu do danych z klasami i metodami, aby połączyć się z bazą danych i pobrać wartości w celu wypełnienia tych modeli. Myślałem o stworzeniu klasy przekazującej połączenie i zapytania. Następnie inne klasy dla każdego konkretnego zestawu danych, których będę potrzebować do modeli. (konstruowanie zapytań do przekazania) Z tego, co rozumiem, będę wywoływać te metody warstwy dostępu do danych z modelu widoku, aby wypełnić instancje moich modeli. Które przedstawię z widokiem. Czy moje podejście teoretycznie jest właściwym standardowym sposobem podejścia do tego problemu? Jakieś sugestie? Lub materiał referencyjny?


title: Gwarancja lub klauzula gwarancyjna na złamanie kodu

text: Czy powinienem zagwarantować lub dodać klauzulę gwarancyjną do mojej umowy w przypadku złamania kodu lub wystąpienia anomalii poza ręką klienta lub działaniem Boga? Jeśli tak, co powinien powiedzieć ten język?


title: Jak poprawić moją zdolność do szybkiego manipulowania kodem, a nie wpm?

text: Widziałem tutaj kilka pytań dotyczących pisania bezwzrokowego i słów na minutę, ale nie o poprawę umiejętności manipulowania tekstem za pomocą skrótów klawiaturowych, powiązań itp. Próbowałem umieścić ** ściągawkę skrótów klawiaturowych ** obok mojego monitora, ale ja nigdy nie mogę włączyć ich do mojego „przepływu”. Próbowałem również metody **'po prostu użyj vi i nie dotykaj myszy'**, ale to tylko pomaga mi nawigować po kodzie, a nie edytować. Wolałbym używać jakiejś aplikacji (lub gry) do nauki manipulacji tekstem. Ale wygląda na to, że nic takiego nie istnieje (pomysł na aplikację?). Jestem też otwarta na inne propozycje.


title: Korzystasz z pewnego rodzaju kontroli wersji podczas pracy w pojedynkę iz małymi projektami?

text: Bardzo często pracuję nad małymi projektami tylko dla siebie. Pracuję na jednej maszynie, ale ostatnio myślałem o zastosowaniu pewnego rodzaju kontroli wersji. Przyniosłoby to pewne korzyści, jak na przykład: * Nie muszę już dbać o lokalną kopię zapasową * Błędy można łatwo cofnąć * Historia może być utrzymywana Z drugiej strony ma to również pewne wady, takie jak na przykład: * Wymagane są dodatkowe zasoby * Czas na konfigurację, przyzwyczajenie się itp. Czy z Twojego doświadczenia wynika, że warto używać kontroli wersji, gdy pracujesz sam?


title: Jak długo trwa stopień naukowy Comp Sci?

text: Ciągle słyszę od ludzi, że jeśli nie zostanę programistą zaraz po ukończeniu studiów, mój dyplom będzie bezużyteczną kartką papieru, twierdzą, że stanie się nieaktualny. Trudno mi w to uwierzyć, biorąc pod uwagę, że to, czego uczono mnie w dość dobrej szkole, od jakiegoś czasu jest standardową praktyką. Czy to jest prawdziwa wiara w przemyśle? Że jakoś po roku czy dwóch staję się mniej pożądana, mimo że absolwenci, którzy przychodzą po mnie, mają w zasadzie identyczne wykształcenie.


title: Testowanie jednostkowe C# w jednym projekcie

text: W porządku, więc robię mój pierwszy "prawdziwy" projekt C#. Śmiałam się, dobrze się bawię, ładny, mały język, który tu mam, dość łatwy w użyciu, la ti da. Potem dochodzę do tego, że zdaję sobie sprawę, że nie ma prostego sposobu na skonfigurowanie klas zaprzyjaźnionych do testów jednostkowych. Dobrze. To niefortunne. Przekopuję się i stwierdzam, że mogę przeskoczyć przez niektóre płonące obręcze i wystawić wszystko na inny zespół za pomocą: [assembly: InternalsVisibleTo("AssemblyName")] Ale ... to jest dość niewielka aplikacja wewnętrzna, którą właśnie przechodzę do jednego pliku binarnego i tak naprawdę nie gwarantuje wielu zestawów. Jakie inne opcje - jeśli w ogóle - oferuje C#?


title: Ile różnych konfiguracji jest używanych do testów oprogramowania?

text: Ten artykuł pokazuje, że w przypadku aplikacji na Androida programiści używają od 30 do 50 różnych urządzeń do testów zgodności. Próbowałem znaleźć informacje o testach aplikacji na "klasycznych" komputerach, na przykład gry PC lub aplikacje biznesowe zorientowane na grafikę: ile różnych konfiguracji sprzętowych jest zazwyczaj testowanych w tym obszarze?


title: Rozdzielenie autoryzacji ról i bazy danych

text: Coś naprawdę przeszkadza mi w sposobie, w jaki autoryzacja jest wykonywana za pomocą ról w ASP.NET MVC. Zwykle robi się to tak, że masz tabelę Użytkownicy i tabelę Role. Użytkownik może mieć wiele ról. Następnie dekorujesz swoje kontrolery/akcje atrybutem authorize, który mówi, którym rolom chcesz zezwolić na dostęp do kontrolera/akcji: [Authorize(Roles = "Admin")] public ActionResult AdminOnlyAction() { } Problem polega na tym, że twój kod jest uzależniony od danych w bazie danych. Oczywiście możesz na początku aplikacji zasiać bazę danych potrzebnymi rolami, jeśli ich nie ma, ale nadal istnieje delikatna zależność od danych w bazie danych (np. mogą zostać usunięte, przemianowane itp. itp.). Posiadanie wyliczenia lub podobnego z poziomami ról zamiast przechowywania ich w bazie danych wydaje się rozsądne, ale nadal budzi we mnie kwaśne wrażenie. Czy istnieje elegancka alternatywa, na którą nie trafiłem?


title: Jak i na co powinienem testować (jednostkowe) w tej metodzie?

text: Jestem stosunkowo nowy w testowaniu jednostkowym i mam zapytanie o to, co / jak powinienem testować określoną metodę. Dla poniższej (psudo-c#) metody, którą stworzyłem (nie jest to przykład z życia), co byś przetestował? Początkowo myślałem o przetestowaniu wyjścia z wariacjami słownika pól formularzy, np. prawidłowe, nieprawidłowe, brakujące wartości. Zastanawiam się jednak również, w jaki sposób można przetestować, aby upewnić się, że wartości obiektów zostały zmienione na poprawną wartość i że próbowano wysłać poprawną wiadomość e-mail (oczywiście obie usługi mogą/mogłyby zostać wyszyte). Mam nadzieję, że to, o co proszę, ma sens, doceniam to subiektywne pytanie, a odpowiedzi mogą brzmieć „to zależy” ;) public bool ProcessInput(Dictionary<string, string> formFields, ObjService objService, EmailService emailService) { try { // Pobierz mój identyfikator obiektu int objId; if(!int.TryParse(formField["objId"], out objId) { return false; } // Zaktualizuj mój obiekt — czy walidowałbyś zapisanie względem bazy danych, czy fikcyjnej bazy danych pamięci? var myObj = objService.Find(objId ); myObj.Name = formField["objName"]; objService.Save(myObj); // Wyślij wiadomość e-mail - jak przetestować, aby upewnić się, że treść, odbiorca itp. są poprawne? ), "Hello World"); return true; } catch(Exception ex) { return false; } }


title: Co zrobić z błędami, które się nie powtarzają?

text: Mam testera, który podczas testowania będzie miał błąd (na razie ok), ale potem często go zgłasza od razu. My (twórcy) później okazuje się, że tester nie próbował odtworzyć problemu i (na zapytanie) nie może znaleźć sposobu, aby to się powtórzyło. Teraz to nadal są błędy, nie chcę ich ignorować. Ale bez kroków powtórzeniowych utknąłem. Czasami istnieje ślad stosu (choć często nie jest to przydatne, ponieważ jest to kompaktowy framework i nie ma numerów wierszy). Ale kiedy jest taki, mogę wziąć ślad stosu, złamać kod i zacząć zgadywać, ale to nie prowadzi do testowalnych "poprawek". Co robisz w takich scenariuszach?


title: Programowanie w czasie kryzysu

text: Mam trudności z przekształceniem tego w właściwe pytanie, ale oto… Niektórzy z was mogli słyszeć o powodzi, która ma miejsce w Queensland w Australii. Cóż, jestem teraz na wewnętrznych przedmieściach Brisbane; Od wtorku rzeka powoli podpływa do mojego domu. Kiedy wyszedłem dziś rano do pracy, znajdowało się dwadzieścia metrów w dół drogi, kiedy normalnie jest to kilometr. W ciągu kilku godzin od wybuchu katastrofy rząd miał już kilka całkiem dobrych aplikacji internetowych, dzięki którym ludzie mogą uzyskać informacje o tym, co się dzieje i gdzie przewiduje się wzrost powodzi. Stworzyli również bazę danych, w której ludzie mogą wyszukiwać miejsca pobytu krewnych lub mogą zarejestrować swoją lokalizację, aby inni mogli ją zobaczyć. Czy ktoś był wcześniej zaangażowany w rozwój tego typu projektów? Interesujące jest to, że mogli wyprodukować to oprogramowanie w ciągu mniej niż jednego dnia, kiedy przeciętny dom deweloperski mógł w najlepszym razie zająć tygodnie. Czym różnił się od „normalnego” projektu? Jakieś inne myśli?


title: Czy jest to legalne, abym współpracował z oprogramowaniem open source podczas pracy?

text: Pracuję dla dużej korporacji i chcę zachować świeżość swoich umiejętności. Myślę, że przyczynienie się do projektu open source pomogłoby, zwłaszcza jeśli kiedykolwiek będę chciał pracować w startupie. Słyszałem, że duże firmy często posiadają pracowników rozwojowych wykonywanych poza pracą. Czy mogę ponieść konsekwencje prawne, przyczyniając się do projektu open source bez powiadomienia mojego pracodawcy? Czy mógłbym narazić projekt open source na ryzyko, gdybym przyczynił się do niego będąc zatrudnionym? Gdybym powstrzymał się od wnoszenia wkładu z powodów prawnych i złożyłem wniosek do innej firmy, w której spodziewane jest doświadczenie w programowaniu open source, czy zrozumieją, czy moja aplikacja trafi do kosza?


title: Język programowania najbardziej odpowiedni dla sektora finansowego?

text: Jestem studentem pierwszego roku w college'u i robię podwójną specjalizację z inżynierii oprogramowania / finansów. Sam uczę się programowania i mam już dobrą znajomość php. Zastanawiałem się, jaki jest według was najbardziej odpowiedni język programowania do użytku w bankowości finansowej/inwestycyjnej? Przeczytałem ten wątek: Książki o tworzeniu oprogramowania dla rynków finansowych/banków inwestycyjnych Chcę rozpocząć naukę/czytanie języka (podstawy, a nie sprawy finansowe/ilościowe), aby stworzyć podstawy dla przyszłych rzeczy finansowych/ilościowych.


title: Czy Rails 3 jest gotowe do użycia w produkcji?

text: Chcę uzyskać migawkę Rails 3 w tym momencie. Zaraz zaczynamy nowy długoterminowy projekt i zastanawiam się, czy R3 jest gotowy do rzeczywistego użycia. Lub, jeśli nadal jest wiele nierówności do odpracowania. Np. Widziałem pytania o jego kompatybilność z Pasażerem. (?) Dziękuję!


title: Dlaczego potrzebujemy jednorazowego prototypowania?

text: Co to jest jednorazowy model prototypowy i dlaczego go potrzebujemy? Czym różni się od prototypowania ewolucyjnego?


title: Jak licencja MongoDb definiuje użycie „komercyjne” i „niekomercyjne”?

text: Mam pytanie dotyczące użycia "komercyjnego" i "niekomercyjnego", również z wykorzystaniem MongoDb. Wyobraźmy sobie, że mamy stronę bez modelu biznesowego, strona zyskuje na popularności, ale wciąż nie ma przychodzących pieniędzy. Czy w tym momencie mówimy o niekomercyjnym? A kiedy strona zacznie zarabiać, czy można w tym momencie zdecydować się na licencję komercyjną? Dzięki za pomoc.


title: Dostęp do plików cookie w ramach klasy HTTP

text: Mam klasę HTTP, która ma metodę Get i Post. Jest to prosta klasa, którą stworzyłem, aby hermetyzować żądania Post i Get, dzięki czemu nie muszę powtarzać kodu get/post w całej aplikacji. W C#: class HTTP { private CookieContainer cookieJar; private String userAgent = "..."; public HTTP() { this.cookieJar = new CookieContainer(); } public String get(String url) { // Wykonaj żądanie pobrania. Zwróć JSON } public String post(String url, String postData) { // Wykonaj żądanie postu. Zwróć JSON } } Utworzyłem właściwość CookieJar, ponieważ chcę zachować wartości plików cookie przez całą sesję. Jeśli użytkownik jest zalogowany na Twitterze za pomocą mojej aplikacji, każde moje żądanie (czy to otrzymane, czy opublikowane) chcę użyć plików cookie, aby pozostały zalogowane. To i tak podstawa. Ale nie chcę zwracać ciągu we wszystkich przypadkach. Czasami mogę potrzebować pliku cookie, wartości nagłówka lub czegoś innego z żądania. Idealnie chciałbym móc to zrobić w moim kodzie: Cookie cookie = http.get("http://google.com").cookie("g_user"); Ciąg g_user = cookie.wartość; lub String source = http.get("http://google.com").body; _Moje pytanie_ — Aby to zrobić, muszę mieć klasę Get i klasę Post, które są zawarte w klasie HTTP i są dostępne za pośrednictwem akcesorów? W ramach klasy Get i Post miałbym wtedy metodę Cookie, właściwość body i wszystko, co jest potrzebne. Czy powinienem również użyć interfejsu, czy utworzyć klasę Request i rozszerzyć ją na Post i Get, aby wspólne metody i właściwości były dostępne dla obu klas? A może myślę całkowicie źle?


title: Klient JavaScript do komunikacji z serwerem WCF z wiązaniem WebSockets

text: Jestem podekscytowany możliwościami komunikacji dupleksowej z WebSocketami między przeglądarką internetową a serwerem WWW. Widzę, że WCF dla .NET 4.5 obsługuje teraz powiązanie WebSockets i wiem, że istnieje interfejs API JavaScript do korzystania z obiektów WebSockets. Jednak nie rozumiem, jak mają one ze sobą współpracować. Tak, możesz poradzić sobie z przekazywaniem nieprzetworzonych wiadomości za pomocą interfejsu API JS, ale wydaje się, że nie ma żadnej biblioteki JS do wykonywania RPC opartych na protokole SOAP zgodnych z WCF. Czy ktoś z was wie, czy istnieją jakieś biblioteki umożliwiające przeglądarce internetowej wywoływanie usługi WCF przy użyciu protokołu WebSockets?


title: Czy wszystkie języki funkcyjne używają wyrzucania śmieci?

text: Czy istnieje język funkcjonalny, który pozwala na użycie semantyki stosu - automatyczne deterministyczne niszczenie na końcu zakresu?


title: Czy istnieje dobry przykład kodu Pythona do testowania jednostkowego interfejsu API?

text: Czy znasz jakiś dobry przykład kodu testów jednostkowych Pythona do testowania interfejsu API? Dziękuję! **Aktualizacja** : * Znalazłem to bardzo interesujące pytanie: http://stackoverflow.com/questions/7336101/testing-rest-api-with-database-backend * Szczególnie szukam przykładów do testowania API CRUD


title: Asymptotyczny czas działania pętli for

text: Mam pytanie, na które potrzebuję odpowiedzi: > Jaki jest asymptotyczny czas wykonywania następującego fragmentu kodu? > > > if (N < 1000) > for (int i = 0; i < N; i++) > for (int j = 0; j < N; j++) > A[i] = j; > else > for (int i = 0; i < N; i++) > A[i] = i; > > > 1. logarytmiczny w N > 2. liniowy w N () > 3. liniowo-rytmiczny w N > 4. kwadratowy w N > A poprawny wynik to „ _2. liniowy w N_ ”, którego nie mogę zrozumieć dlaczego, ponieważ o ile rozumiem, chcemy zaakceptować najgorszy przypadek>najlepszy przypadek. Najgorszym przypadkiem jest to, że zostanie uruchomiona instrukcja if, a czas będzie wtedy kwadratowy w N. Zdaję sobie sprawę, że próbujemy znaleźć jakąś średnią z większej liczby prób, ale skąd mam wiedzieć, jaka jest wartość N ? Jeśli N jest naprawdę wysokie (10000), jest to oczywiście stwierdzenie else, które jest uruchamiane przez większość czasu. Ale czy możemy to założyć, czy coś źle zrozumiałem?


title: Wdrażanie nowoczesnej aplikacji internetowej z Web API na starych usługach

text: Moja firma ma wiele usług WCF, które mogą, ale nie muszą, zostać zastąpione w najbliższej przyszłości. Stara aplikacja internetowa jest napisana w WebForms i komunikuje się bezpośrednio z tymi usługami poprzez SOAP i zwraca `DataTables`. Teraz projektuję nową nowoczesną aplikację internetową w nowoczesnym stylu, klienta AngularJS, który komunikuje się z ASP.NET Web API za pośrednictwem JSON. Interfejs API sieci Web następnie komunikuje się z usługami WCF za pośrednictwem protokołu SOAP. W przyszłości chcę, aby Web API obsługiwał wszystkie żądania i przechodził bezpośrednio do bazy danych, ale ponieważ logika biznesowa zaimplementowana w usługach WCF jest skomplikowana, przepisanie i zastąpienie jej zajmie trochę czasu. **Przejdź do problemu:** staram się w niedalekiej przyszłości ułatwić zastąpienie usług WCF innym miejscem do przechowywania danych, np. inny punkt końcowy, baza danych lub cokolwiek innego. Chcę również ułatwić testowanie jednostkowe logiki biznesowej. Dlatego ustrukturyzowałem Web API z "warstwą repozytorium" i "warstwą usług". Warstwa repozytorium ma bezpośrednią komunikację z magazynem danych (usługa WCF, baza danych lub cokolwiek), a warstwa usług następnie używa repozytorium ("Wstrzykiwanie zależności") do pobierania danych. Nie obchodzi go, skąd bierze dane. Później mogę kontrolować i strukturyzować dane zwracane z magazynu danych (DataTable do POCO) i testować logikę w warstwie usług za pomocą jakiegoś pozornego repozytorium (przy użyciu Dependency Injection). Poniżej znajduje się kod wyjaśniający, dokąd z tym zmierzam. Ale moje pytanie brzmi, czy to wszystko ma sens? Czy robię to zbyt skomplikowane i czy można to w jakikolwiek sposób uprościć? Czy ta prostota sprawia, że jest to zbyt skomplikowane do utrzymania? **Moim głównym celem** jest jak najłatwiejsze późniejsze przejście na inny nośnik danych, np. ORM i być w stanie przetestować logikę w warstwie usług. A ponieważ większość logiki biznesowej jest zaimplementowana w tych usługach WCF (i zwracają tabele DataTables), chcę mieć kontrolę nad danymi i strukturą zwracaną do klienta. Każda rada jest bardzo ceniona. **Aktualizacja 14.08.20** Stworzyłem fabrykę repozytoriów, aby wszystkie usługi współdzieliły repozytoria. Teraz łatwo jest zasymulować repozytorium, dodać je do fabryki i utworzyć dostawcę korzystającego z tej fabryki. Wszelkie porady są mile widziane. **Chcę wiedzieć, czy komplikuję sprawy bardziej niż powinny.** Wygląda to tak: **1. Repository Factory** public class RepositoryFactory { private Dictionary<Type, IServiceRepository> repozytoria; public RepositoryFactory() { this.repositories = new Dictionary<Type, IServiceRepository>(); } public void AddRepository<T>(IServiceRepository repozytorium) gdzie T : class { if (this.repositories.ContainsKey(typeof(T))) { this.repositories.Remove(typeof(T)); } this.repositories.Add(typeof(T), repozytorium); } public dynamic GetRepository<T>() { if (this.repositories.ContainsKey(typeof(T))) { return this.repositories[typeof(T)]; } throw new RepositoryNotFoundException("Nie znaleziono repozytorium dla " + typeof(T).Name); } } _Nie przepadam za `dynamicznymi`, ale nie wiem jak inaczej pobrać to repozytorium._ **2. Repozytorium i usługa** // Interfejs repozytorium usług // Wszystkie interfejsy repozytorium rozszerzają ten publiczny interfejs IServiceRepository { } // Interfejs repozytorium faktur // Ułatwia późniejsze mockowanie repozytorium na publicznym interfejsie IInvoiceServiceRepository : IServiceRepository { List<Invoice> GetInvoices( ); } // Repozytorium faktur // Łączy się z jakimś magazynem danych w celu pobrania faktur public class InvoiceServiceRepository : IInvoiceServiceRepository { public List<Invoice> GetInvoices() { // Pobierz faktury skądś // Może to być WCF, baza danych lub cokolwiek innego using(InvoiceServiceClient proxy = new InvoiceServiceClient()) { return proxy.GetInvoices(); } } } // Usługa faktur // Usługa obsługująca komunikację z rzeczywistym lub pozorowanym repozytorium public class InvoiceService { // Fabryka repozytorium RepositoryFactory repoFactory; // Domyślny konstruktor // Domyślnie łączy się z rzeczywistym repozytorium public InvoiceService(RepositoryFactory repo) { repoFactory = repo; } // Funkcja serwisowa pobierająca wszystkie faktury z jakiegoś repozytorium (mock lub real) public List<Invoice> GetInvoices() { // Zapytanie o repozytorium return repoFactory.GetRepository<IInvoiceServiceRepository>().GetInvoices(); } }


title: Wspólny plik nagłówkowy dla C++ i JavaScript

text: Mam aplikację, która uruchamia zaplecza serwera C++ i JavaScript na kliencie. Chciałbym zdefiniować pewne ciągi tylko raz, dla obu fragmentów kodu. Na przykład mogę mieć klasę CSS "row-hover" - chcę zdefiniować tę nazwę klasy w jednym miejscu tylko na wypadek, gdybym później ją zmienił. Czy istnieje prosty sposób na dołączenie lub odczytanie jakiegoś wspólnego pliku definicji zarówno w C++, jak i JavaScript? Idealnie jako etap kompilacji / wstępnego przetwarzania, ale każde schludne podejście dobre.


title: Proszenie ludzi o wyłączenie Javy ze względów bezpieczeństwa - co dalej z deweloperem?

text: Nie wiem, jak najlepiej nadać temu tytuł, więc wybacz mi, jeśli brzmi to dziwnie. Widziałem to pytanie zadane w IT Security i innej witrynie proszącej ludzi o wyłączenie Javy z ich systemu lub przeglądarki, ponieważ jest podatna na ataki. Jako miłośnik Javy, chociaż obecnie robię C#, chciałbym nadal robić więcej Javy w przyszłości, ale ta wiadomość nadaje złe imię starej, dobrej Javie. Czy nie odciągnęłoby to programistów takich jak ja od Javy? Czy nie oznaczałoby to złego imienia Java wśród programistów i potencjalnych klientów?


title: Co oznacza termin „szybki obserwator”?

text: W ciągu ostatnich kilku dni kilka razy słyszałem określenie „szybki obserwujący”. Jest używany w kontekście nierozwiązanego błędu/problemu, który (podobno) zostanie szybko naprawiony i zaimplementowany. Czy to jakiś nowy korporacyjny żargon? Jestem świadomy strategii szybkiego podążania lub strategii drugiego ruchu (opisanej w tym artykule w Wikipedii), ale nie ma to zastosowania w kontekście.


title: Automatyczne propagowanie zmian

text: Podczas pracy nad wieloma podobnymi projektami często pojawiają się zmiany, których nie można wyodrębnić do biblioteki, ale należy je zastosować do większości projektów. Mam na myśli zmiany, takie jak zmodyfikowana struktura katalogów, jakaś wspólna konfiguracja, podobny kod interfejsu użytkownika itp. Najbardziej podstawową strategią jest skopiowanie nowego projektu z ostatniego ukończonego i wyrzucenie logiki biznesowej. Problem polega na tym, że ulepszenia w najnowszym projekcie nie cofają się do starszych. Nieco lepszą strategią jest utworzenie repozytorium wzorcowego, klonowanie z niego każdego nowego projektu. Następnie bity wielokrotnego użytku można wydobyć z najnowszego projektu do szablonu, a następnie przenieść do starszych projektów. Oczywiście scalanie może być skomplikowane, ale ta strategia działała całkiem nieźle. Przeforsowanie zmian to jednak wciąż zbyt wiele pracy. Czy istnieje strategia automatyzacji propagacji _niektórych_ zmian w wielu projektach?


title: Podejmowanie decyzji w Scrumie a utrzymywalność i czas rozwoju?

text: Rozumiem, że to pytanie może budzić kontrowersje. W pewnym sensie jest to druga strona pytania „Biznes próbuje podejmować decyzje techniczne”. W Scrumie zespół programistów ma być wspólnie odpowiedzialny za podejmowanie decyzji projektowych i technicznych oraz na poziomie kodu, aby spełnić wymagania klienta. Istnieje podział odpowiedzialności i władzy między właścicielem produktu, który definiuje historie i nadaje im priorytety, komunikując się z interesariuszami, a zespołem, który decyduje _jak_ wdrożyć historie. Myślę, że jest to motywowane przekonaniem, że ponieważ programiści są dobrze zaznajomieni z kodem, który do tej pory napisali, oraz wszystkimi informacjami, które zapamiętali lub zanotowali na temat projektu, będą musieli ponieść konsekwencje złych decyzji, gdy będą musieli modyfikować kod w przyszłości, są najlepiej przygotowani do podejmowania decyzji projektowych. A jeśli z perspektywy czasu zdadzą sobie sprawę, że podjęli złą decyzję, będzie to dla nich bardzo cenne doświadczenie edukacyjne i nie będą mogli obwiniać kierownictwa za to, co poszło nie tak. Teoretycznie się z tym wszystkim zgadzam. Ale (by pobawić się w adwokata diabła) widzę kilka sytuacji, w których przestrzeganie tej zasady _dosłownie_ mogłoby być złym pomysłem: lub zostaną zwolnieni po wysłaniu tego projektu, lub przeniosą się do innego projektu i istnieje _całkowicie oddzielny_ zespół, który zajmie się "opieką nad kodem". (Dobrym przykładem może być: typowy rządowy projekt komputeryzacji zlecony na zewnątrz). Tak więc, z któregokolwiek z tych powodów, zespół w większości nie jest ludźmi, którzy będą wykonywać rzeczywistą konserwację. 2. Albo zespół programistów to _wszyscy_ niedoświadczeni programiści, którzy tak naprawdę nie mają jasnego pojęcia o problemach z utrzymaniem, które mogą być spowodowane niechlujnymi praktykami programistycznymi lub złymi decyzjami projektowymi. Chociaż mają motywację _teoretycznie_ do robienia właściwych rzeczy, bodziec ten jeszcze nie działa, ponieważ nie zostały wypalone wystarczająco dużo razy (lub nie uznają związku między niechlujnymi praktykami kodowania a spaleniem). 3. Zespół programistów _lubi_ popełniać duże błędy i pracować w szalonych godzinach, aby je naprawić lub obejść, ponieważ (a) są pracoholikami, (b) lubią marnować czas na pisanie standardowego kodu lub używanie jakiegoś złego starego frameworka, ponieważ daje im to poczucie bezpieczeństwo pracy lub (c) sprawia, że wyglądają lub czują się bohaterami. 4. Zespół lubi nieskończenie wymieniać rowery, omawiać niekończące się różne kombinacje pomysłów lub dodawać „wewnętrznie widoczne funkcje”, które mają niską wartość, podczas gdy firma naprawdę ich potrzebuje, aby dostarczać wartość szybciej i dalej, wystarczająco dobre jest dobre wystarczająco! W organizacji mogą być inni, którzy mogą wnieść szereg przydatnych danych wejściowych do decyzji projektowych i technicznych: bardziej doświadczeni programiści; Deweloperzy poliglota; Specjaliści, w tym DBA (którzy niekoniecznie muszą być w zespole scrumowym); Menedżerowie, którzy mogą być cyniczni i zbyt wiele razy widzieli zbyt ambitne lub błędne architektury. Ale nie chodzi tylko o pozyskiwanie informacji od ludzi z cennym doświadczeniem. Co więcej, czy nie jest czasem fundamentalnie konieczne, aby kierownictwo (na dowolnym poziomie) było w stanie powiedzieć „Nie, ten sposób realizacji byłby złym pomysłem. Zrób to w ten sposób” lub przynajmniej „Nie, możesz spróbować później, jeśli jest czas, ale czy na początku rób to w ten prostszy sposób”? Wydaje mi się, że Scrum jest pod tym względem zbyt idealistyczny. Wiem, że tak się oczywiście dzieje, ale stwierdzenie, że z powodu tej ingerencji „twoja organizacja nie wykonuje Scruma” sugeruje, że „robienie Scruma” nie jest w takich przypadkach pożądane!


title: Dystrybucja detektorów zdarzeń w rozproszonej architekturze zorientowanej na usługi

text: Mam architekturę usług złożoną z usług, które obsługują wspólne obszary aplikacji. Przykładowe usługi to: * AccountService (zarządza kontami klientów w systemie) * BillingService (rozlicza klienty za skonfigurowane produkty) * UserService (zarządza użytkownikami i grupami w ramach danego klienta) * NotificationService (wysyła powiadomienia za pośrednictwem poczty e-mail/SMS/push /dowolna metoda, gdy zachodzą pewne zdarzenia) Mam klaster ActiveMQ, w którym wypycham zdarzenia do działania... co prowadzi do pytania... Gdzie jest właściwe miejsce, aby umieścić detektor komunikatów, który reaguje na zdarzenie na potrzeby wysyłasz powiadomienie? Prostym przykładem byłoby: „Chcę powiadomić właściciela konta za pośrednictwem poczty e-mail, gdy nowy użytkownik zostanie dodany do jego konta”. Czy ten odbiornik powinien znajdować się w NotificationService (która ma być wysoce ogólna) lub w UserService (gdzie akcja jest wykonywana), czy w całkowicie oddzielnej usłudze, która działa jako rodzaj routera?


title: Kontrakty terminowe/monady vs wydarzenia

text: W środowisku aplikacji, w którym wpływ na wydajność można zignorować (maksymalnie 10-20 zdarzeń na sekundę), **co jest bardziej konserwowalne i elastyczne w użyciu jako preferowany środek komunikacji między modułami — zdarzenia lub Futures/Promises/Monads**? Często mówi się, że zdarzenia (pub/sub, mediator) pozwalają na luźne sprzężenie, a tym samym - łatwiejszą w utrzymaniu aplikację... Moje doświadczenie temu zaprzecza: gdy masz ponad 20 zdarzeń - debugowanie staje się trudne, podobnie jak refaktoryzacja - bo bardzo trudno zobaczyć: kto, kiedy i dlaczego używa czego. Obietnice (koduję w Javascript) są znacznie brzydsze i głupsze niż Eventy. Ale: możesz wyraźnie zobaczyć połączenia między wywołaniami funkcji, dzięki czemu logika aplikacji staje się prostsza. Czego się boję. jednak jest to, że Promises przyniesie ze sobą więcej twardych połączeń… p.s: odpowiedź nie musi być oparta na JS, mile widziane są doświadczenia z innych języków funkcjonalnych.


title: Najlepszy sposób na przedstawienie raportu z kodem

text: Obecnie jestem na kursie statystycznym na uniwersytecie. Musimy przedstawić raporty z ustaleń wraz z użytym kodem. Zastanawiam się, jak najlepiej przedstawić ten kod w raportach. Oddzielna strona z odniesieniem do raportu lub w treści. Albo coś innego? Dziękuję


title: Minimalizacja drobnych błędów w kodowaniu

text: Podczas kodowania robię sporo małych błędów (takich jak ustawianie nawiasu kątowego w złym kierunku). Dodaje to sporo czasu do mojego kodowania, ponieważ muszę kilkakrotnie debugować i poprawiać błędy. Czy masz jakieś rady, jak powstrzymać te błędy wkradające się?


title: Kontrola wersji i osobisty plik konfiguracyjny

text: Nasz projekt używa pliku konfiguracyjnego specyficznego dla użytkownika. Ten plik nie jest obecnie objęty kontrolą wersji, ponieważ jest inny dla każdego użytkownika. Problem polega na tym, że za każdym razem, gdy programista dodaje nowy moduł wymagający konfiguracji lub zmienia nazwę istniejących modułów, inni programiści otrzymują błędy, ponieważ ich prywatne pliki konfiguracyjne nie są aktualizowane. Aby rozwiązać ten problem, pomyśleliśmy o pracy z dwoma plikami konfiguracyjnymi: domyślnym/globalnym plikiem konfiguracyjnym, który będzie podlegał kontroli wersji i będzie regularnie aktualizowany przez każdego programistę, który doda nowy moduł, oraz prywatnym plikiem konfiguracyjnym, który zostanie zachowany kontroli wersji i będzie zawierać tylko zmiany specyficzne dla użytkownika. Jednak nadal wydaje się to rozwiązaniem doraźnym. Czy możesz zaproponować lepsze rozwiązanie? Czym zajmują się profesjonaliści?


title: Co zrobić po przeczytaniu książki dla początkujących o C#?

text: Mam 16 lat i w przyszłości chcę dostać pracę w dziedzinie programowania. Ponieważ będę aplikować na zagraniczną uczelnię, chcę sama zacząć programować i zdobywać doświadczenie, zarówno po to, aby zwiększyć swoje szanse na dobrą edukację, jak i na późniejsze zatrudnienie. W zeszłym roku nauczyłem się Javy, ale wszelkie motywacje, które zdobyłem, skończyły się po skończeniu książki i wykonałem tylko podstawową pracę nad projektem, który sam wymyśliłem, zanim utknąłem i porzuciłem go. W tym roku postanowiłem nauczyć się C#. Moja wiedza o Javie, jakkolwiek by nie była, pomogłaby mi zebrać i zapamiętać więcej informacji z książki dla początkujących, a ponieważ rok nieaktywności bez większego wcześniejszego doświadczenia i tak gwarantuje ponowne przeczytanie, pomyślałem, że równie dobrze mógłbym nauczyć się czegoś innego, jeszcze -podobny język, w przeciwieństwie do przechodzenia przez moją Javę HF po raz drugi. Wziąłem „C# 3.0 A Beginner's Guide” Herba Schildta i skończyłem go. Jednak nie mam pojęcia, co teraz zrobić. Wymyślić losowy projekt i pracować nad nim (potencjalnie wybierając coś znacznie przekraczającego moje ograniczone możliwości)? Poczytaj o bardziej zaawansowanych tematach (chociaż nie mam żadnego praktycznego doświadczenia)? Nie wiem, co zrobić, aby stać się zdolnym programistą po przeczytaniu książki dla początkujących.


title: Czy można napisać program, który przesyła dźwięk z jednego komputera przez kartę dźwiękową innego?

text: Mam przypadek, w którym muszę użyć karty dźwiękowej jednego komputera do odtwarzania dźwięku, ale chcę, aby dźwięk był generowany na innym komputerze, który jest w tej samej sieci co drugi. W idealnym przypadku program, który to robi, działałby tylko na komputerze, który generował dźwięk, chociaż jestem prawie pewien, że nie jest to możliwe w oparciu o badania, które przeprowadziłem. Cokolwiek z tym zrobię, jednak rozwiązanie musiałoby być takie, aby komputer faktycznie odtwarzający dźwięk był bezpieczny. Dzięki za wszelkie uwagi.


title: Jak wygląda system płatności Androida?

text: Słyszałem, że Apple płaci deweloperom ryczałtami (zapomniałem jak często) za pobranie ich aplikacji. Moje pytanie brzmi, czy Google działa w ten sam sposób z Androidem? Jeśli nie, w jaki sposób obsługują swój system płatności? To także pytanie poboczne, ale w jaki sposób Apple i Google zdobywają pieniądze z innych krajów? Czy automatycznie przeliczają to za Ciebie i odcinają się od wymiany waluty, czy to Twoja praca?


title: Nauka PHP OOP

text: Koduję PHP od około 2 lat i wydaje mi się, że bardzo dobrze rozumiem podstawowe części PHP, tj. * Funkcje * instrukcje foreach/IF * sesje/pliki cookie * POST/GET Między innymi. Chcę teraz przejść do nauki OOP PHP, więc nauczenie się korzystania z klas i uczynienie z tego naprawdę wartościowej umiejętności. Mam jedno wymaganie, źródło musi być szanowanym źródłem, które nie uczy programistów złych nawyków. Mam książkę: PHP i MySQL Web Development. Jednak mimo tego, że jest to przydatne, chciałbym mieć źródło online. Chciałbym się dowiedzieć od osób z doświadczeniem w OOP PHP, jak i gdzie uczyli się OOP PHP. Oczywiście robiąc, ale naprawdę doceniłbym wspaniałe zasoby, które pomogą mi w tym procesie.


title: Railsy: kontrolery vs modele, które powinny obsługiwać manipulację plikami

text: Ten post Jamisa Bucka o utrzymywaniu szczupłych kontrolerów Rails zawsze utkwił mi w pamięci. Mam aplikację, w której plik zip składający się z pliku XML i niektórych obrazów jest przesyłany i używany do tworzenia modelu (głównie z pliku xml, który wskazuje na obrazy). Czy cały kod zajmujący się rozpakowywaniem plików z archiwum i przenoszeniem ich w odpowiednie miejsce powinien trafiać do kontrolera czy do modelu? Dziękuję!


title: Czy posiadanie interfejsu z jedną kartą ma sens?

text: To jest bardziej pytanie dotyczące projektowania stron internetowych / doświadczenia użytkownika, ale ponieważ programrs.stackexchange.com jest bardziej oparte na opiniach, zamieściłem to tutaj - Czy ma sens posiadanie pojedynczej zakładki w aplikacji internetowej? Nie widzę powodu, aby mieć zakładkę, jeśli nie możesz przejść do niej z innej zakładki. Mój premier domaga się jednej karty. Szczerze myślę, że mój PM podejmuje okropne decyzje dotyczące projektu (nie mamy oficjalnego projektanta) i ostatecznie stracimy klientów. Projekt aplikacji został wykonany na początku lat 2000 i pokazuje (tabele HTML, dużo inline css, itp.). Obawiam się, że jeśli nie zaktualizujemy go, aby dopasować go do oczekiwań aplikacji tej dekady, to po prostu wyłączy naszych potencjalnych klientów. Aplikacja jest aplikacją biznesową, którą sprzedajemy potencjalnym klientom. Jesteśmy małą firmą - nasz zespół do tej aplikacji to 6 (3 programistów, 2 qa (jeden to pm) i jeden z partnerów firmy). Opinia wszystkich ma znaczenie (tak mi powiedziano), ale jeśli ktoś nie zgadza się z premierem (kto nie może zrobić nic złego), robi się wściekły... a ja gadam. Więc moje pytanie pozostaje - jakie są Twoje przemyślenia na temat jednej zakładki?


title: Czy lepiej dokumentować funkcje w pliku nagłówkowym czy w pliku źródłowym?

text: W językach, które rozróżniają plik "źródłowy" i "nagłówkowy" (głównie C i C++), czy lepiej dokumentować funkcje w pliku nagłówkowym: _(ukradzione z CCAN)_ /** * time_now - zwraca aktualny czas * * Przykład: * printf("Teraz wynosi %lu sekund od epoki\n", (long)time_now().tv_sec); */ struct timeval time_now(void); czy w pliku źródłowym? _(kradzione z PostgreSQL)_ /* * Konwertuje znak UTF-8 na punkt kodowy Unicode. * To jest jednoznakowa wersja pg_utf2wchar_with_len. * * Nie ma tu sprawdzania błędów, c musi wskazywać na wystarczająco długi ciąg. */ pg_wchar utf8_to_unicode(const unsigned char *c) { ... Zauważ, że niektóre rzeczy są zdefiniowane tylko w nagłówku, takie jak struktury, makra i `statyczne funkcje inline`. Mówię tylko o rzeczach, które są _declared_ w pliku nagłówkowym i _defined_ w pliku źródłowym. Oto kilka argumentów, które mogę wymyślić. Skłaniam się ku dokumentowaniu w pliku źródłowym, więc moje argumenty "Pro-header" mogą być nieco słabe. Pro-header: * Użytkownik nie potrzebuje kodu źródłowego, aby zobaczyć dokumentację. * Źródło może być niewygodne, a nawet niemożliwe do zdobycia. * Dzięki temu interfejs i implementacja są od siebie oddalone. Pro-source: * Sprawia, że nagłówek jest znacznie krótszy, dając czytelnikowi widok modułu jako całości z lotu ptaka. * Łączy dokumentację funkcji z jej implementacją, dzięki czemu łatwiej jest zobaczyć, że funkcja robi to, co mówi, że robi. Odpowiadając, uważaj na argumenty oparte na możliwościach narzędzi i „nowoczesnych środowisk IDE”. Przykłady: * Pro-header: Zwijanie kodu może ułatwić nawigację po komentowanych nagłówkach, ukrywając komentarze. * Pro-source: funkcja cscope `Znajdź tę definicję globalną` przenosi cię do pliku źródłowego (gdzie jest _definicja_), a nie do pliku nagłówkowego (gdzie jest _deklaracja_). Nie mówię, żeby nie wysuwać takich argumentów, ale pamiętaj, że nie każdy czuje się tak komfortowo z narzędziami, których używasz, jak Ty.


title: Licencja na darmową, ale zamkniętą aplikację źródłową

text: Opracowałem prostą aplikację, którą chcę udostępnić za darmo, ale nie planuję wydawania kodu źródłowego. Chcę, aby aplikacja była swobodnie dostępna, ale nie chcę, aby ktokolwiek ją sprzedawał lub dokonywał inżynierii wstecznej. Licencja MIT wygląda prosto i ładnie, ale pozwala również każdemu ją sprzedać. Czy jest jakaś odpowiednia dla mnie licencja, czy powinienem po prostu zmodyfikować licencję MIT?


title: Jak zarządzać systemem ocen mojej aplikacji internetowej?

text: Tworzę stronę internetową, na której użytkownicy będą oceniać posty innych użytkowników według ich przydatności. Posty będą dotyczyć wyłącznie produktów - telefonów komórkowych, tabletów i innej osobistej elektroniki użytkowej. Chcę mieć pewność, że nie ma trollingu ani oszczerstw, więc potrzebuję systemu, który zapewni, że dobre oceny postów będą prawdziwe, a nie tylko od osób zatrudnionych przez firmy zajmujące się tymi produktami, lub że złe oceny nie będą od konkurentów firmy tego produktu. Podoba mi się system StackOverflow upvotes i downvotes. Ale to wymaga dużego umiaru i szczerze mówiąc, nie mam na to środków. Mam na myśli, że społeczność SO ma wielu zaufanych modów i administratorów, ale na mojej stronie na początku tylko ja i mój przyjaciel, którzy tworzą tę stronę, bylibyśmy tymi, którym można ufać, aby zachować tylko legalne posty i legalne oceny w naszej bazie danych, aby opinia publiczna mogła je oceniać. EDYCJA 1: Jednym z rozwiązań, które mam na myśli, jest włączenie przycisku Facebook Like jako jedynego sposobu na „zagłosowanie” posta. W ten sposób wykorzystanie autentyczności użytkowników oferowanych przez Facebooka (przynajmniej w pewnym stopniu) przyniosłoby mi korzyść. Liczyłam liczbę polubień i zapisywałam je jako głosy za konkretnym postem. Nie byłoby jednak głosów przeciw. Myślę, że przechowanie współczynnika „X użytkowników uznało to za przydatne” jako `Widzowie, którzy polubili ten post`/`Całkowita liczba przeglądających tego posta`


title: Czy kontroler powinien przekazywać dane do widoku we wzorcu MVC?

text: Dość często pracuję z ASP.NET MVC (i innymi internetowymi implementacjami MVC), ale jest to coś, czego nigdy nie byłem pewien: Czy kontroler i widok powinny się komunikować? Oczywiście kontroler powinien wybierać, którego widoku użyć, ale co mam na myśli, czy kontroler powinien przekazywać dane do widoku? Moim zdaniem, jeśli widok oczekuje danych od kontrolera, to są one skutecznie powiązane ze sobą jako para (kontroler, widok). Zamiast tego zazwyczaj widok komunikuje się z samym modelem i jest niezależny od jakiegokolwiek kontrolera. Czy mam właściwe podejście, czy jest to przypadek braku jednej prawidłowej odpowiedzi? Czy odpowiedź zmienia się podczas pracy w sieci w porównaniu z innymi środowiskami? Czy odpowiedź zmienia się, gdy masz koncepcję widoku silnie typizowanego (jak w ASP.NET MVC), czy nie?


title: Podklasa ma tylko metody bez zmiennych

text: Czy można mieć podklasę, która nie deklaruje własnych zmiennych (zmiennych instancji) i dziedziczy po superklasie lub klasie bazowej? Ma metody i jest kilka powszechnych metod, które pomija, ale nie ma własnych zmiennych. Czy mogę mieć podklasy, które definiują tylko zachowanie, czy czegoś mi brakuje? Chcę podzielić na podklasy, aby oddzielić logikę moich klas. Mam klasę `Medication` i chcę podklasę do `DailyMedication` , `WeeklyMedication`, ale wszystkie moje zmienne instancji mam w `Medication`, ponieważ nie mam żadnych specyficznych dla tych klas. Chcę, aby podklasy dzieliły logikę, ponieważ mam za dużo warunków w kodzie. Nazwa MedicationEntity dawka dni tygodnia //w przypadku dziennych i miesięcznych jest to null dni miesiąca //w przypadku tygodniowych i dziennych jest to zerowa częstotliwośćType //Dzienne lub tygodniowe lub miesięczne itd. EDYTUJ: Chcę tworzyć podklasy, ponieważ wszystkie te klasy mają inną logikę . Mam wyliczenie „częstotliwości” (dla Daily, Weekly itp.) w mojej klasie „Leki”, a to się pogarsza, ponieważ muszę umieścić wszystkie kontrole w moim kodzie dla tych typów częstotliwości tak, jakby częstotliwość była taka, niż to zrobić i jeśli codziennie niż to robić, ponieważ teraz chcę usunąć te warunki przełączania. 1) Proszę również zasugerować dobry pomysł, ponieważ dni tygodnia mają wartość null, jeśli częstotliwość jest dzienna lub miesięczna. Ale muszę wysłać null na serwer. Więc gdzie mogę umieścić dni tygodnia, jeśli mam podklasę, ponieważ nie ma wartości null tylko w przypadku częstotliwości tygodniowej, ale jako muszę wysłać null do serwera w żądaniu dla wszystkich innych częstotliwości. Czy powinienem umieścić `dni powszednie` w podklasie, jeśli tak, niż jak wysyłać null do serwera, jeśli częstotliwość jest codziennie, ponieważ `DailyMedication` nie ma informacji o `dni powszednie`.


title: Wytyczne dotyczące umieszczania metod API?

text: Czy są jakieś wytyczne dotyczące umieszczania metod w API, gdy umieszczenie nie jest oczywiste? Przykład: mam klasy `A` i `B` oraz metodę `X`. Wykonywaną pracę można sformułować na dwa sposoby: 1. `A robi X z B` 2. `B robi X z A` Biorąc pod uwagę dwa sposoby wyrażenia tego, nie jest jasne, czy `X` należy do `A` czy „B”. **Czy istnieją wytyczne dotyczące umieszczania metody w tym scenariuszu?** * * * Aby uzyskać bardziej konkretny przykład, pomyśl o użytkowniku (`A`), zdarzeniu (`B`) i czynności rejestracji (` X`). Użytkownik może zarejestrować się w wydarzeniu („A robi X z B” ) lub wydarzenie może dodać użytkownika do listy rejestracji („B robi X z A”).


title: Własność czy metoda pozyskiwania informacji o kolekcji?

text: Załóżmy, że mam klasę `MyList`, która rozszerza `ObservableCollection<MyObject>`, gdzie `MyObject` ma właściwość `Boolean`Enabled`. Powiedzmy, że chcę, aby liczba obiektów „MyObject” miała właściwość „Enabled” równą „true”. Czy należy to zdefiniować jako właściwość czy metodę? W klasie `MyList` powinienem użyć: public int GetNumEnabledMyObjects(){ return this.Count(o => o.Enabled == true); } lub public int NumEnabledMyObjects { get { return this.Count(o => o.Enabled == true); } } Spojrzałem na właściwości a metody w wytycznych projektowych MSDN i skłaniam się ku metodzie, ponieważ może być uważana za wystarczająco kosztowną.


title: Zwróć interfejs lub klasę

text: Załóżmy, że mam metodę public List<User> GetBatchOfUsers(IEnumerable<int> userIDs) { List<User> users = new List<User>(); // niektóre rzeczy z bazy danych zwracają użytkowników; } Przeczytałem, że lepiej byłoby zwrócić interfejs (albo `IList` lub `IEnumerable`) zamiast zwracać `List`. Niektóre argumenty, które słyszałem, aby to zrobić, to to, że ukrywa dane i daje programiście API elastyczność zmiany wewnętrznej reprezentacji danych w późniejszym terminie. Moją obawą przed zwróceniem `IEnumerable` jest utrata funkcjonalności, takich jak dostęp losowy i właściwość `Count`. Wiem, że zaakceptowanie `IEnumerable` jako parametru ma sens, ponieważ daje konsumentowi największą elastyczność w przesyłaniu danych do mojej metody, minimalistyczny zestaw wymagań do działania metody. Jaka jest najlepsza praktyka dla typu zwrotu?


title: Rozwiązania dla asynchronicznego ponownego wejścia C# 5

text: Coś mnie więc męczyło w związku z nową obsługą async w C# 5: Użytkownik naciska przycisk, który uruchamia operację asynchroniczną. Połączenie wraca natychmiast, a komunikator znów zaczyna działać - w tym sedno. Aby użytkownik mógł ponownie nacisnąć przycisk - powodując ponowne wejście. A jeśli to jest problem? W demach, które widziałem, wyłączają przycisk przed wywołaniem `await` i włączają go ponownie później. Wydaje mi się to bardzo delikatnym rozwiązaniem w rzeczywistej aplikacji. Czy powinniśmy zakodować jakąś maszynę stanów, która określa, które kontrolki muszą być wyłączone dla danego zestawu uruchomionych operacji? Czy jest jakiś lepszy sposób? Kusi mnie, aby po prostu pokazać modalne okno dialogowe na czas operacji, ale to trochę jak używanie młota kowalskiego. Czy ktoś ma jakieś błyskotliwe pomysły? * * * EDYCJA: Myślę, że wyłączenie kontrolek, które nie powinny być używane podczas działania operacji, jest kruche, ponieważ myślę, że szybko stanie się skomplikowane, gdy masz okno z wieloma kontrolkami. Lubię prostotę, ponieważ zmniejsza to ryzyko błędów, zarówno podczas początkowego kodowania, jak i późniejszej konserwacji. Co zrobić, jeśli istnieje zbiór kontrolek, które powinny być wyłączone dla określonej operacji? A co, jeśli wiele operacji działa jednocześnie?


title: Jaka jest różnica między WTFPL, CC0 i domeną publiczną?

text: Jaka jest różnica między WTFPL (tekst NSFW), CC0 a domeną publiczną? Czy w gruncie rzeczy są tym samym?


title: Wzorce logowania serwisowego

text: Czy istnieją jakieś niezawodne strategie implementacji mechanizmu logowania, który umożliwi dostęp do aplikacji w celach konserwacyjnych? Podobnie jak niektóre routery, które mają listę domyślnych loginów, z których mogą korzystać technicy. Ale sposób, w jaki robią to routery, jest niepewny i zastanawiałem się, czy istnieją lepsze sposoby na wdrożenie tego rodzaju kontroli dostępu. EDYCJA: Oto możliwe rozwiązanie, które wymyśliłem. Wygeneruj listę haseł dla danego przedziału czasowego, powiedzmy miesiąca, z innym hasłem na każdy dzień. Ta lista istniałaby w oprogramowaniu w postaci zaszyfrowanej. Technicy obsługi technicznej mieliby dostęp do tej listy, a jej użycie byłoby rejestrowane, abyśmy wiedzieli, kiedy zablokować dostęp, jeśli nieupoważniony personel otrzyma kopię listy i użyje jej do zalogowania się. Okresowe aktualizacje odnowiłyby tabelę haseł aplikacji.


title: Problem dotyczący zasady DRY i polimorfizmu

text: Mam klasę, która jest w 99% identyczna z jej odpowiednikiem. Przykładowy kod wygląda poniżej: public abstract class BaseClass { void Method1() { } void Method2() { } void Method3() { } public void MainMethod(List<Object1> listObject) { Method1(); Metoda2(); Metoda3(); Metoda4(); } abstract internal void Metoda4(); } public zapieczętowana klasa DerivedClass : BaseClass { wewnętrzne przesłonięcie void Method4() { throw new NotImplementedException(); } } public class BaseClass2 { void Method1() { } void Method2() { } void Method3() { } public void MainMethod2(List<Object2> listObject) { Method1(); Metoda2(); Metoda3(); } } Jak widać, BaseClass i BaseClass2 są prawie identyczne z Method1 ... Method3. Czy istnieje lepsza alternatywa, której można użyć, aby zminimalizować powielanie kodu. * * * Początkowo zacząłem ten polimorfizm jako materiał zachęcający, mam ponad 11 klas pochodnych na BaseClass, a z powodu drugiej implementacji MainMethod2 utknąłem z duplikacją kodu. Po prostu nie mogę wymyślić żadnego sprytnego sposobu, aby się z tego wydostać. * * * **Aktualizacja:** To pytanie może składać się z dwóch części: **1. Jak uniknąć powielania kodu?** Rozwiązałem to, używając z powodzeniem kompozycji, jak sugerują wspaniałe odpowiedzi poniżej. **2. Jak uniknąć nieszczelnych abstrakcji?** Z tym ciągle walczę...


title: Zmuszanie użytkowników do korzystania z Javascript

text: Jest to bardziej pytanie typu biznesowego / etycznego, które zawiera zasady programowania. Jako programista będę więc sprzedawał aplikację internetową opartą na bazie danych na lokalnym uniwersytecie. Obecnie pracuję nad programem i natrafiam na kilka problemów, które można łatwo rozwiązać za pomocą javascript. Teraz wiem, że niektórzy ludzie w ogóle nie używają javascriptu, więc chciałem wiedzieć, czy wymuszenie użycia javascriptu (tylko dla interfejsu użytkownika, a nie funkcjonalności stron) byłoby złe w aspekcie etycznym/zawodowym/biznesowym? - Naprawdę nie mogę znaleźć wiele informacji na ten temat. Mój sposób myślenia o tym jest taki, że skoro jest to aplikacja intranetowa, której uczelnia aktywnie chce i rozumie funkcje, które są dostarczane z aplikacją, nie powinno to stanowić problemu, prawda? * * * Chcę tylko stwierdzić, że obecnie aplikacja nie jest intensywnie javascriptem, ale nie ma tam wielu rzeczy, które byłyby „łatwiejsze” z javascriptem lub po prostu poprawiały wygląd interfejsu użytkownika. Chciałbym również podkreślić, że funkcjonalność będzie oparta na PHP i niezależna od Jquery.


title: Kod wdrożenia ASP.NET?

text: Mam pytanie dotyczące przesyłania strony asp.net na prawdziwy serwer WWW. Jakiego typu pliki zostaną przesłane, czy są to pliki ASP.NET, czy zestawy? Aby było bardziej jasne, jeśli ktoś uzyskał dostęp do mojego ftp i pobrał wszystkie pliki, czy będzie mógł je edytować?


Jak radzisz sobie z błędami użytkowania podczas pisania opakowań dla interfejsów API? Czy zakładasz, że użytkownik używa go prawidłowo i piszesz opakowanie tak, aby wywołało serwer i pozwolił serwerowi zwrócić błąd? A może sprawdzasz brakujące parametry i zwracasz błąd? Jeśli tak, w jaki sposób przekazujesz błąd? ciąg znaków lub kod błędu?


title: Techniczny powód, dla którego musisz użyć Class::static_method() zamiast Class->static_method() w PHP

text: Chciałbym wiedzieć, czy istnieje techniczna przyczyna, dla której projektanci PHP zdecydowali się wywołać metodę statyczną za pomocą `Class::static_method()` zamiast `Class->static_method()` (jak każda inna metoda). Czy zmiana składni odzwierciedla jakieś wymagania techniczne? Pytam o to, ponieważ składnia każdego innego znanego mi języka do wywoływania metody jest zawsze taka sama, niezależnie od tego, czy jest statyczna, czy nie.


title: Jak radzić sobie z kolegą z zespołu, który raczej ma swoje pomysły projektowe niż dobre pomysły

text: W naszym zespole mamy sytuację, w której jeden członek preferuje własne pomysły bez względu na to, jakie ma problemy. W konfrontacji z problemami dotyczącymi konkretnego projektu, który wykonał - ten kolega z drużyny może stać się bardzo opiekuńczy i nie dostrzega problemów. W rezultacie jest to poważny problem z projektowaniem oprogramowania dla naszego zespołu, ponieważ w końcu część projektu kolegi z zespołu przejdzie do projektu końcowego, co spowoduje uszkodzenie naszego oprogramowania. Czy powinniśmy porozmawiać z kolegą z drużyny o jego ogólne zachowanie? Czy powinniśmy iść do szefa i powiedzieć mu, że nie możemy sobie z tym poradzić i szkodzi to naszemu projektowi?


title: Jakie usługi umożliwiają znalezienie kogoś konkretnego, z którym można następnie uruchomić własne oprogramowanie peer-to-peer?

text: Jeśli dasz ludziom oprogramowanie typu peer to peer (takie jak aplikacja z gniazdami sieciowymi, jeśli część peer to peer zostanie zaimplementowana, ale może to być cokolwiek), pierwszym krokiem dla niektórych rodzajów aplikacji jest znalezienie konkretnej osoby i próba nawiązania z nią połączenia. Jeśli żadne z was nie ma identyfikatora URI (i wie, co to jest), potrzebujecie osoby trzeciej, która zajmie się znalezieniem siebie nawzajem i weryfikacją waszych tożsamości. Po tym trzecia strona nie jest potrzebna, ponieważ idziesz równorzędnie. Mógłbym oczywiście napisać to oprogramowanie strony trzeciej i umieścić je na stronie internetowej, ale wtedy musiałbym napisać to oprogramowanie strony trzeciej i umieścić je na stronie internetowej (lub serwerze, który nie jest stroną internetową, jeśli tego chcę to zrobić). Czy ktoś oferuje tę usługę? Idealnie jako strona internetowa i oczywiście najlepiej za darmo.


title: DDD – pytania bez odpowiedzi nowicjusza

text: Postanowiłem użyć DDD w jednym z moich domowych projektów, aby dowiedzieć się, o co tyle zamieszania! Zacznę od stwierdzenia, że to (DDD) jest sposobem pisania oprogramowania, widziałem dziwne wzorce i konwencje, ale DDD jest naprawdę najbardziej naturalnym sposobem pisania kodu. Interesujące punkty, które zauważyłem, zaczynając od DDD: * Mogę teraz śnić o kodzie bez przypominania o ograniczeniach nałożonych na nas przez bazy danych. Utrzymujące się dane zajmują teraz tylne miejsce podczas opracowywania złożonego systemu (może to wrócić, aby mnie ugryźć) * Czuję dużo bliżej biznesu i problemu biznesowego * Dyskusje między tobą a klientem są teraz prowadzone na neutralnym gruncie * Dyskusje między programistami są zgodne z kodem * Nauczyłem się kochać refaktoryzację (lepiej pogodź się z tym już teraz) Pytanie 1: Czy podmiot może wykonywać wywołania repozytorium? Na przykład, jeśli chcesz sprawdzić, czy dane pole jest unikatowe w systemie, czy powinieneś napisać usługę domeny, czy może encja może wywołać repozytorium? Pytanie 2: Jaka jest najlepsza praktyka walidacji nowego podmiotu? Czy powinieneś mieć funkcję Validate(), czy też walidację można przeprowadzić w konstruktorze? Twoje przemyślenia na ten temat?


title: Rozmowa kwalifikacyjna dla Trainee Programmer, jak zwiększyć szanse na sukces?

text: Mam dzisiaj pierwszą rozmowę kwalifikacyjną w sprawie pracy programisty (za kilka godzin!) i chciałabym uzyskać poradę. **Nazwa stanowiska to Trainee Programmer i dotyczy bezpiecznej firmy poligraficznej.** Wiele znalazłem w Internecie o programowaniu rozmów kwalifikacyjnych, ale ponieważ jest to rola Trainee, nie mam pojęcia, czego się spodziewać. Wiem, że firma preferuje Javę i C#, a ja mam o nich trochę wiedzy, ale moim głównym językiem jest C++. **Chciałbym:** * Kilka wskazówek, czego można się spodziewać po tym wywiadzie dla stażysty. * Wskazówki, jak zwiększyć swoje szanse.


title: Czy interfejs List jest nieszczelną abstrakcją?

text: Jeśli mam zmienną zawierającą `Listę`, może ona zawierać obiekty wielu różnych typów, np. „ArrayList” lub „LinkedList”. Różnica między `LinkedList` a `ArrayList` jest dość duża. Zachowanie dużych O metod znacznie się różni. Na przykład sortowanie `List`, a następnie używanie jej do wyszukiwania binarnego jest w porządku dla `ArrayList`, ale nie miałoby sensu w przypadku `LinkedList`.


title: Kiedy używać interfejsów (testy jednostkowe, IoC?)

text: Podejrzewam, że popełniłem tutaj szkolny błąd i szukam wyjaśnienia. Wiele klas w moim rozwiązaniu (C#) - odważę się powiedzieć większość - skończyło się na napisaniu odpowiedniego interfejsu. Np. interfejs „ICalculator” i implementująca go klasa „Calculator”, chociaż nigdy nie zastąpię tego kalkulatora inną implementacją. Ponadto, większość z tych klas znajduje się w tym samym projekcie co ich zależności - tak naprawdę muszą być tylko "wewnętrzne", ale ostatecznie stały się "publiczne" jako efekt uboczny implementacji ich odpowiednich interfejsów. Myślę, że ta praktyka tworzenia interfejsów do wszystkiego wynikała z kilku fałszów: 1) Początkowo myślałem, że interfejs jest niezbędny do tworzenia mocków testów jednostkowych (używam Moq), ale od tamtej pory odkryłem, że klasa może być wykpiwany, jeśli jego elementy są `wirtualne` i ma konstruktor bez parametrów (popraw mnie, jeśli się mylę). 2) Początkowo myślałem, że interfejs jest niezbędny do zarejestrowania klasy z frameworkiem IoC (Castle Windsor), np. Container.Register(Component.For<ICalculator>().ImplementedBy<Calculator>()... kiedy w rzeczywistości mógłbym po prostu zarejestrować konkretny typ przeciwko sobie: Container.Register(Component.For<Calculator>().ImplementedBy< Kalkulator>()... 3) Używanie interfejsów, np. parametrów konstruktora do wstrzykiwania zależności, skutkuje „luźnym sprzężeniem". Czy zwariowałem na punkcie interfejsów?! Zdaję sobie sprawę ze scenariuszy, w których "normalnie" używałbyś interfejs, np. eksponowanie publicznego API, czy dla rzeczy takich jak „wtyczkowalna” funkcjonalność.Moje rozwiązanie ma małą liczbę klas, które pasują do takich przypadków użycia, ale zastanawiam się, czy wszystkie inne interfejsy są niepotrzebne i należy je usunąć? ) powyżej, czy jeśli miałbym to zrobić, nie naruszyłbym "luźnego połączenia"? **Edytuj** :- Po prostu bawię się z Moq i wydaje się, że wymaga to, aby metody były _public_ i wirtualne oraz miały konstruktora _public_ bez parametrów, aby móc je kpić. Czyli wygląda na to, że nie mogę wtedy mieć klas wewnętrznych?


title: Repozytoria organizacji Github, problemy, wielu programistów i rozwidlenie — najlepsze praktyki przepływu pracy

text: Dziwny tytuł, tak, ale myślę, że mam trochę gruntu do omówienia. Mamy konto organizacji na githubie z prywatnymi repozytoriami. Chcemy wykorzystać natywne funkcje github dotyczące problemów/żądań ściągania (żądania ściągania są w zasadzie _dokładnie_ tym, czego chcemy, jeśli chodzi o przeglądy kodu i dyskusje o funkcjach). Znaleźliśmy centrum narzędzi firmy defunkt, które ma fajną małą funkcję, która umożliwia przekonwertowanie istniejącego problemu na żądanie ściągnięcia i automatyczne powiązanie z nim bieżącego oddziału. Zastanawiam się, czy najlepszą praktyką jest, aby każdy programista w organizacji rozwidlał repozytorium organizacji, aby wykonał swoje funkcje / poprawki błędów / itp. Wydaje się to być całkiem solidnym przepływem pracy (ponieważ jest to w zasadzie to, co robi _każdy_ projekt open source na github), ale chcemy mieć pewność, że możemy śledzić problemy i pobierać żądania z JEDNEGO źródła, repozytorium organizacji. Mam więc kilka pytań: 1. Czy podejście fork-per-developer jest w tym przypadku odpowiednie? Wygląda na to, że może to być trochę przesada. Nie jestem pewien, czy potrzebujemy forka dla każdego programisty, chyba że przedstawimy programistów, którzy nie mają bezpośredniego dostępu do push i potrzebują przeglądu całego swojego kodu. W takim przypadku chcielibyśmy wprowadzić taką politykę tylko dla tych programistów. Więc co jest lepsze? Wszyscy programiści w jednym repozytorium czy fork dla wszystkich? 2. Czy ktoś ma doświadczenie z narzędziem do piasty, a konkretnie z funkcją pull request? Jeśli zrobimy fork-per-developer (lub nawet dla mniej uprzywilejowanych deweloperów), czy funkcja pull request w hubie będzie działać na żądaniach pull z głównego repozytorium nadrzędnego (repozytorium organizacji?), czy też będzie działać inaczej? **EDYTUJ** Zrobiłem kilka testów z problemami, rozwidleniami i żądaniami ściągnięcia i znalazłem to. Jeśli utworzysz problem w repozytorium swojej organizacji, a następnie rozwidlej repozytorium z organizacji na własne konto github, dokonaj zmian, połącz z gałęzią główną swojego forka. Przy próbie uruchomienia `hub -i <problem #>` pojawia się błąd, `Użytkownik nie ma uprawnień do modyfikowania sprawy`. Więc najwyraźniej ten przepływ pracy nie zadziała.


title: Jeśli wydam program na licencji GPL, czy muszę to robić dalej?

text: Rozważmy następujący scenariusz: * Tworzę program FooSuite, który używa biblioteki QuuxTools na licencji GPL * Wydaję program FooSuite 1.0 na licencji GPL Później odkryłem, że z jakiegoś powodu muszę udzielić licencji na program na innych warunkach. Stąd: * usuwam zależność od GPL za pomocą QuuxTools, albo... * przepisując program, aby nie używał już tej biblioteki * uzyskując inną licencję na QuuxTools (jeśli jest podwójna licencja; patrz PyQt) * Wypuszczam FooSuite 1.1 na podstawie licencji innej niż GPL. Jednak _FooSuite 1.1 jest nadal dziełem pochodnym od FooSuite 1.0_. Rozumiem, że robienie tego, co zrobiłem przez nieznajomych, nie jest legalne, ale czy ja sam – jako właściciel FooSuite – jestem wolny od tego ograniczenia?


title: Edytor Java/IDE dla początkujących?

text: W dzisiejszych czasach uczę niektórych początkujących podstaw Java i muszą zobaczyć wyniki swoich małych programów, takich jak Hello world itp. Potrzebuję podstawowego edytora, który zawiera podświetlanie kodu i zawiera kompilator, aby mogli szybko uruchomić i zobaczyć rezultatem ich programów. Co byś polecił?


title: Tłumaczenie zmiennych na język angielski

text: Niedawno natknąłem się na kod, w którym nazwy zmiennych są po francusku, nie mogłem użyć google translate, ponieważ tylko część kodu wymaga tłumaczenia, a kopiowanie i wklejanie każdej ze zmiennych do translatora nie byłoby praktyczne. Jak mogę łatwo przetłumaczyć nazwy zmiennych? jakiego tłumacza mogę użyć? Oto kilka francuskich, które próbowałem przetłumaczyć. #include <stdio.h> int main() { unsigned int nombre; niepodpisany int dzielnik; niepodpisany int spoczynek; for (liczba = 2; nazwa != 0; nazwa++) { for (dzielnik = 2, reszta = 1; (dzielnica < nazwa) && (powrót > 0; podział++) { reszta = nazwa % dzielnik; } if (reste > 0) { printf("%d\n", nombre); }         }              zwrócić; } Ale kiedy próbowałem przetłumaczyć kod za pomocą google translate, dostałem złe tłumaczenie. # include stdio.h int main () { unsigned int number; dzielnik int bez znaku; niepodpisany int lewy; for (liczba = 2, liczba = 0;! liczba + +) { for (dzielnik = 2, lewo = 1, (dzielnik <liczba) && (reszta> 0) + + dzielnik) { reszta = liczba% dzielnik; } if (left> 0) { printf ("% d \ n", liczba); }         }              zwrócić; }


title: uczyć czy nie uczyć GUI dla początkujących w CS

text: Od prawie roku prowadzę kurs OOP. Założeniem szkoły jest wykorzystanie Javy poprzez wykorzystanie NetBeans do części programistycznej. Widziałem następujące scenariusze: * Uczniowie są przytłoczeni ilością informacji o różnych kontrolkach do użycia, więc stracili koncentrację na nauczanym paradygmacie programowania (w naszym przypadku OOP) * Opierają się na swojej pamięci, głównie różnych Narzędzia Java GUI Czy najlepszym podejściem do nauczania tematów OOP jest korzystanie wyłącznie z konsoli i z niewielkim lub bez użycia interfejsu GUI Net Beans? Czy to może pomóc uczniom w skupieniu się bardziej na logice programu i nauczeniu się, jak wykonywać szybkie testy? Dziękuję


title: Czy można dodać czas na „nieoczekiwane opóźnienia” do szacowanego czasu?

text: Dostałem swój pierwszy kontrakt (hura, samozatrudnienie!) i firma prosi o wycenę czasu. Programiści są notorycznie kiepscy w szacowaniu czasu i wiem, że wcześniej śmiesznie się myliłem. Jest to stała stawka, więc nie martwię się o ładowanie. Martwię się tylko o zarządzanie oczekiwaniami. Do tej pory wyszczególniłem pracę, którą muszę wykonać, oszacowałem czas, jaki to zajmie, a następnie znacznie go uzupełniłem. Jednak nadal się tym denerwuję. Czy dopuszczalne jest pisanie na czas w przypadku „nieoczekiwanych opóźnień”? Oszacowałem 4 tygodnie i chciałbym dodać piąty tydzień na problemy, o których nie pomyślałem. Czy to jest coś, co robią ludzie? Czy wzdrygałbyś się, gdyby ktoś podał ci oszacowanie z tym w nim?


title: Pamięć zapamiętywania

text: Zapamiętywanie to zdecydowanie potężna technika. Ale programowanie dynamiczne jest nieco lepszym IMO, ponieważ nie wiąże się z obciążeniem pamięci (w programie rekurencyjnym parametry zajmują pamięć i ta pamięć rośnie, gdy wchodzimy głębiej w rekursję). Ale pod względem szybkości oba są dość równe. Ale zdecydowanie zapamiętywanie jest o wiele prostsze niż programowanie dynamiczne. Moje pytanie: Czy można w jakiś sposób używać memoization bez ograniczenia pamięci?


title: W jaki sposób uczenie maszynowe jest włączane do projektowania wyszukiwarek?

text: Obecnie buduję małą wewnętrzną wyszukiwarkę opartą na Apache Lucene. Jego cel jest prosty - na podstawie kilku słów kluczowych zasugeruje artykuły pisane wewnętrznie w naszej firmie. Używam dość standardowej punktacji TF-IDF jako podstawowej metryki i zbudowałem na niej własny mechanizm punktacji. Wszystkie te wydają się działać znakomicie, z wyjątkiem kilku narożnych przypadków, w których ranking wydaje się pomieszany. Planuję więc dodać mały link Relevant/Not Relevant do strony wyników wyszukiwania, aby użytkownicy mogli kliknąć jeden z nich w zależności od ich postrzegania, czy dany wynik powinien zostać uwzględniony w pierwszej kolejności. # Mój pomysł 1. Potraktuj te Odpowiednie/Nieistotne jako etykiety i utwórz dane treningowe. 2. Użyj tych danych do uczenia klasyfikatora (takiego jak SVM) 3. Włącz ten model do wyszukiwarki, tj. każdy nowy wynik przejdzie przez klasyfikator i otrzyma etykietę informującą, czy jest odpowiedni, czy nie. Takie podejście wydaje mi się intuicyjne, ale nie jestem pewien, czy sprawdzi się w praktyce. Mam dwa konkretne pytania: 1. Jakie wszystkie funkcje powinienem wyodrębnić? 2. Czy istnieje lepszy sposób na zintegrowanie komponentu uczenia maszynowego z wyszukiwarką? Moim ostatecznym celem jest „nauczenie się” funkcji rankingu w oparciu zarówno o logikę biznesową, jak i opinie użytkowników.


title: Czy większa inwersja zależności zawsze jest lepsza?

text: Czy jest jakaś sytuacja w przemysłowym programowaniu obiektowym, w której nie należy stosować zasady odwracania zależności?


title: Jakie dane powinien zawierać QR-Code, aby służyć zarówno mojemu, jak i zewnętrznemu czytnikowi QR-Code

text: Moja aplikacja internetowa wykorzystuje kody (w postaci `http://www.url.com/code/105820582020204`), które chcę zakodować jako QR-Code. Zakładam, że tak wygenerowany QR-Code zostanie zeskanowany zarówno przez osoby korzystające z mojej aplikacji mobilnej (i dołączonego wbudowanego skanera QR-Code) jak i przez zewnętrzne, zewnętrzne skanery. Jakie dokładnie dane powinienem zakodować, aby obsłużyć oba z nich — sam kod czy pełny adres URL? Pierwszy scenariusz kończy się niepowodzeniem z zewnętrznym czytnikiem kodów QR. Odkoduje kod QR do długiej liczby i nie będzie miał pojęcia, co ma z nim zrobić. Tylko moja własna aplikacja mobilna skaner kodów QR będzie wiedziała, że powinna wymieniać dane z serwerem za pomocą zdekodowanego kodu. W drugim scenariuszu zakładam, że zewnętrzny czytnik kodów QR otworzy cały adres URL, więc całość będzie działać zgodnie z założeniami, podczas gdy mój włączony czytnik kodów QR w aplikacji wyodrębni sam kod z adresu URL, a także będzie w stanie użyj go (tak jak w pierwszym scenariuszu). Tak więc drugi scenariusz wydaje się być jedynym, który obsługuje oba rodzaje czytników QR-Code. Problem w tym, że przeczytałem w tej odpowiedzi, że nie powinienem kodować całych adresów URL w generowanych QR-Kodach.


title: Konfiguracja wysokiego poziomu wstrzykiwania konstruktora w C++

text: Moje pytania dotyczą w szczególności wstrzykiwania zależności za pośrednictwem konstruktora. Rozumiem plusy i minusy wzorca lokalizatora usług, wstrzykiwania konstruktora/ustawiającego i ich smaki, jednak jest coś, czego nie mogę ominąć po wybraniu czystego wstrzykiwania konstruktora. Po przeczytaniu wielu materiałów o testowalnym projekcie, w tym dokładnej lekturze bloga Miško Hevery'ego (a konkretnie tego posta), znalazłem się w następującej sytuacji: Załóżmy, że piszę program w C++ i poprawnie wstrzyknąłem swoje zależności za pomocą ich konstruktorów. Dla czytelności nadałem sobie obiekt wysokiego poziomu, który ma pojedynczą funkcję Execute() wywoływaną z main: int main(int argc, char* argv[]) { MyAwesomeProgramObject object(argc, argv); return object.Execute(); } Obowiązkiem Execute() jest po prostu podłączenie wszystkich wymaganych obiektów i uruchomienie obiektu najwyższego poziomu. Obiekt najwyższego poziomu wymaga kilku zależności, a te obiekty wymagały kilku obiektów i tak dalej, i tak dalej, co oznacza funkcję, która wygląda tak: MyAwesomeProgramObject::Execute() { DependencyOne one; Zależność Dwa dwa; ZależnośćTrzy trzy; MidLevelOne mid_one(jeden); MidLevelTwo mid_two(dwa, trzy); // ... MidLevelN mid_n(mid_dependencyI, mid_dependencyJ, mid_dependencyK); // ... HighLevelObject1 high_one(mid_one, mid_n); HighLevelObject2 wysoki_dwa (średni_dwa); Obiekt ProgramObject (wysoki_jeden, wysoki_dwa); return obiekt.Go(); } Z tego, co zaczerpnąłem z bloga Miško (a prosiłbym go, ale doszedł do wniosku, że nie będzie miał czasu, aby do mnie wrócić), jest to jedyny sposób na zaspokojenie czysto konstruktorskiego wstrzykiwania zależności. We wspomnianym poście na blogu stwierdza, że powinniśmy mieć fabryki na poziomie życia obiektu, ale zasadniczo to właśnie robi Execute, dzięki czemu mój kod wygląda identycznie jak w jego przykładzie: AuditRecord audit = new AuditRecord(); Baza danych = nowa Baza danych(audyt); Captcha captcha = nowa Captcha(); Authenticator Authenticator = nowy Authenticator(baza danych, captcha, audyt); LoginPage = nowy LoginPage(audyt, uwierzytelnianie); ## Pytania: * Czy to standardowe podejście? * Czy jest to wzorzec, którego nie znam (wygląda na podobny do context.xml Mavena)? * Czy w przypadku czystego wstrzyknięcia konstruktora ponoszę koszty alokacji „z góry”?


title: Czy kiedykolwiek istniał poważny nacisk na częściowe zajęcia w java?

text: czy kiedykolwiek była jakaś poważna próba/żądanie wprowadzenia klas częściowych w stylu C# do języka Java? opuszczony JCP? ognista wojna na liście mailingowej? byle co? czy też nigdy tego nie zasugerowano?


title: Nauka Smalltalka jako programista Java

text: Jestem programistą Java, który chce się uczyć smalltalk. Od teraz pracuję w środowisku Pharo. Szczerze mówiąc, próba przejścia z Javy na Smalltalk przyprawia o ból głowy. Chciałbym nauczyć się Smalltalka za pomocą dostępnej bazy kodu, ale uważam, że nie ma wielu przykładowych projektów Smalltalk dostępnych w sieci. Czy są jakieś konkretne strony internetowe, które wymagają nauki Smalltalk (Pharo) na podstawie kilku prostych przykładów? Obecnie korzystam z pomocy doktora Pharo By Example, ale czuję, że to po prostu dla mnie za mało. Szukam więcej przykładów kodu w Smalltalk.


title: Jakie są zalety posiadania wbudowanego typu danych w formacie wymiany danych nad jego brakiem?

text: Ze względu na wymagania projektu musieliśmy opracować format wymiany danych z wbudowanymi typami danych. Format dobrze służył celowi w ramach tego projektu. Ale zastanawiałem się, czy ma to jakieś zalety posiadania wbudowanego systemu typów (int, long, bool, string itp.) W bardziej ogólnym zakresie wymiany danych? Weźmy za przykład XML. Bardzo dobrze służył temu celowi, ale gdyby XML miał wbudowany system typów danych (zapomnij o schemacie dtd/xml), czy miałby to dodatkową zaletę niż obecnie? np. zazwyczaj używamy xml do serializacji, podczas operacji, gdybyśmy byli w stanie przechowywać typ danych wraz z danymi, czy byłoby to bardziej pomocne?


title: Potrzebujemy DVS. Potrzebują repozytorium SVN. Co powinniśmy zrobić?

text: Jesteśmy zespołem dwóch osób, które potrzebują systemu wersjonowania dla swojego projektu uniwersyteckiego. Z powodu problemów administracyjnych oceniający muszą zarejestrować się na stronie, która obsługuje tylko SVN; jednak nie możemy zobowiązać się do SVN z wnętrza uniwersytetu, ponieważ wymagane protokoły są odfiltrowywane przez proxy (w tym rozszerzenia HTML, które umożliwiłyby sprawdzanie SVN przez HTTP). Westchnienie. Czy możliwe jest posiadanie repozytorium hg dla siebie, które następnie można przekonwertować na SVN w celu hostingu na tej stronie? * * * **Proszę zauważyć, że praktycznie wszyscy studenci dojeżdżają na uniwersytet,** więc „nie możemy zobowiązać się z uczelni, więc nie możemy tego zrobić” nie jest tak mocnym argumentem, jak mogłoby się wydawać.


title: Mierzenie ryzyka zmian w kodzie źródłowym?

text: Mój przełożony poprosił mnie o napisanie estymacji godzin pracy oraz szacowania ryzyka zmian w kodzie źródłowym dla określonego zadania. O ile pierwszy nie stanowi dla mnie problemu, a w sieci jest wiele zasobów, o tyle nie mogę sobie wyobrazić drugiego. Poprosiłem już o jaśniejszy opis szacowania ryzyka i otrzymałem odpowiedź, że należy stwierdzić ryzyko związane z potrzebą „następnych zmian w kodzie w związku z dokonanymi zmianami” oraz „potencjalną utratą stabilności całego oprogramowania”. Jak mogę podejść do tego zadania (zasady kciuka, dokumenty dotyczące szacowania ryzyka, ...)?


title: Jakie są dobre zasoby projektowe systemu informacyjnego?

text: Po zajęciach na temat systemów informatycznych chcę znaleźć dodatkowe zasoby do nauki różnych wzorców, koncepcji i przykładów ich implementacji. Kurs koncentrował się na Zasadach architektury aplikacji korporacyjnych Martina Fowlera i miał projekt, który próbował wdrożyć niektóre z nich. Zasadniczo, gdzie mogę dowiedzieć się więcej o projektowaniu i wdrażaniu systemów informatycznych?


title: Algorytm wybierania sekwencyjnych podtablic z tablicy

text: Rozwiązałem swój problem za pomocą prostych zagnieżdżonych pętli i porównań, ale zastanawiam się, czy istnieje dobrze znany algorytm wyboru, który rozwiąże mój problem. Powiedzmy, że mam tablicę, taką jak [1, 10, 250, 9, 8,8, 249, 249, 248, 247, 2, 4, 9, 10, 9, 7, 6] Muszę znaleźć podtablice [6 ,7,8,9,10] [8,9,10] [247, 248, 249, 250] Podtablice powinny mieć min. Rozmiar 3 długości. Nie chcę rozwiązania, ale podobny algorytm pomógłby mi zrefaktoryzować mój kod. Obecnie robię to z zagnieżdżonymi pętlami i przy użyciu kolekcji buforów.


title: Jak najlepiej przygotować się do egzaminów certyfikacyjnych typu CSDA?

text: Jestem zainteresowany przystąpieniem do egzaminu IEEE CSDA. Jakie są lepsze, indywidualne strategie uczenia się praktyk inżynierii oprogramowania w ramach przygotowań do egzaminu?


title: Czy klient rabbitmq może mieć własną wymianę i kolejkę w samym środowisku klienta?

text: Czy możliwe jest utworzenie wymiany i kolejki w środowisku klienta przez klienta? Poniżej znajduje się cytat z http://blog.dtzq.com/2012/07/amqp-exchanges-and- rabbitmq.html > Klienci AMQP mogą swobodnie tworzyć własne giełdy lub korzystać z predefiniowanych > domyślnych. Czy wymiana i kolejka może być tylko na serwerze, na którym jest broker?


title: Jak działa okno potwierdzenia użytkownika?

text: Skąd klient wie, że ma wysłać żądanie do serwera tylko wtedy, gdy wynik w polu potwierdzenia jest prawidłowy i pozostać na stronie, jeśli zostanie anulowany? Czy ten mechanizm jest inny w ASP.Net i ASP.Net MVC? Chcę poznać wewnętrzne działanie, gdy użytkownik kliknie OK/anuluj, co dzieje się wewnętrznie. Skąd przeglądarka dowiaduje się, że musi przejść do wywołania serwera lub zamknąć się i nic nie robić? To, co do tej pory zbadałem, mówi mi, że na stronie formularzy internetowych właściwość Page.IsValid jest w jakiś sposób odpowiedzialna za to, że przeglądarka określa wynik. Czy jest to poprawne? Co się dzieje z MVC?


title: Open source: jaka jest definicja „pracy pochodnej” i jak wpływa ona na copy-left?

text: Jestem twórcą oprogramowania komercyjnego i chcę korzystać z otwartego oprogramowania w moim własnym oprogramowaniu. Jak rozumiem koncepcję copy-left, wykorzystuje ona prawa autorskie oryginalnych autorów, aby zapewnić, że ich ostateczni użytkownicy końcowi (w tym moi klienci) nie są pozbawieni korzyści płynących z oryginalnego dzieła, które pierwotni autorzy składników systemu operacyjnego przeznaczyli dla nich mieć. Rozumiem również, że istnieje zachęta do tworzenia większej ilości wolnego oprogramowania i często stwierdzam, że strony, które wyjaśniają i zalecają różne warunki licencji, mieszają legalność z ideologią. Wszystko, o co proszę, to wyraźny obraz. Osoby, które chcą tworzyć system operacyjny wyłącznie dla innych projektów systemu operacyjnego, powinny mieć na to pozwolenie. Ludzie, którzy chcą udostępniać kod, aby ktokolwiek mógł go użyć, powinni mieć do tego prawo. Ponadto istnieje wiele roszczeń, które nie mają precedensu prawnego i nie są tak jednoznaczne, jak chcieliby tego autorzy witryn zainteresowania OS. A wszyscy wiemy, że kod to nie tylko kod. Jest różnica pomiędzy: * Kopiowaniem czyjegoś kodu źródłowego do twojego kodu źródłowego. * Korzystanie z biblioteki skompilowanej bez zmian z github. * Używanie biblioteki skompilowanej z lokalnie zmienionej wersji z github. Załóżmy, że korzystam z biblioteki open source do uzyskiwania dostępu do arkuszy kalkulacyjnych Excel. Sensowne jest, abym wniósł wstecz poprawki błędów/dodatki itp., które miały cokolwiek wspólnego z ogólnym problemem dostępu do arkuszy kalkulacyjnych programu Excel. Ma to na celu stworzenie wtyczki do programu Excel dla aplikacji, która już akceptuje XML, SQL db itp. jako alternatywne mechanizmy wprowadzania tych samych danych. ** Czy oznacza to, że aplikacja jest uważana za „pochodną”, nawet jeśli nie rozszerza się na problematyczną domenę importowania arkuszy Excela? **


title: Co sprawia, że tworzenie oprogramowania Agile jest tak atrakcyjne?

text: Zwinne tworzenie oprogramowania staje się w dzisiejszych czasach całkiem zabawnym hasłem. Jako programista rozumiem pragmatyczną wartość rozwoju iteracyjnego, ale (najczęściej) nie jest to wybór programistów, aby przyjąć podejście Agile do tworzenia oprogramowania. To odgórny wybór zarządzania! Niezależnie od tego, czy jest to kryształ, metody zwinne, dsdm, rup, xp, scrum, fdd, tdd, możesz to nazwać. To nie jest wybór programisty. Dla wszystkich menedżerów, **jakie są największe powody, dla których decydują się na rozwój zwinny**, skoro (z mojego doświadczenia) większość menedżerów nie dotknęła nawet fragmentu kodu w swoim życiu!


title: Dlaczego nie-programistom tak trudno jest zrozumieć wersjonowanie?

text: W przeszłości pracowałem z projektantami, licencjatami i kierownikami projektów, którzy regularnie tworzą artefakty projektowe, ale bardzo dobrze rozumieją pojęcie wersjonowania. Kiedy próbuję im to wytłumaczyć (nawet w najprostszej formie wielu różnie nazwanych plików), wydają się mieć pewien rodzaj mentalnej blokady. Jak myślisz, dlaczego tak jest?


title: Zabezpieczam się na przyszłość podczas nauki programowania

text: Chcę nauczyć się programować w sposób „przyszłościowy”, jeśli chcesz. Podczas gdy Windows dominuje na rynku systemów operacyjnych dla komputerów stacjonarnych (na razie), oczywiście jest dużo wartości w nauce jego języków/frameworków/API i tak dalej – może to ulec zmianie w miarę pojawiania się nowych urządzeń lub gdy Windows strzela sobie w stopę (ponad -przyjazne podglądy Windows 8 nie wyglądają zbyt atrakcyjnie...). Czy miałbym rację myśląc, że posiadanie solidnej wiedzy na temat C/C++ dla logiki back-endu/programowania niskopoziomowego i tym podobnych, w połączeniu z niezwykle przenośnym językiem, takim jak Java dla GUI itd., byłaby dobrą podstawą do tworzenia oprogramowania? które okażą się przydatne na większości systemów? - Mówię o komputerach stacjonarnych, tabletach, telefonach.