title: Jak dobrze zdefiniowane powinno być oprogramowanie przed rozpoczęciem kodowania?

text: Chciałem wiedzieć, jak dobrze ludzie ogólnie definiują oprogramowanie, zanim faktycznie zaczną kodować i jak dobrze to dla nich działa? Mam na myśli definiowanie przypadków użycia, analizę ryzyka, rysowanie diagramów klas itp. Wiem, że dobrze jest mieć wystarczająco dobre wyobrażenie o tym, jaki będzie produkt końcowy, aby móc uniknąć ryzyka w przyszłości, ale ważne jest również, aby nie zdefiniować produktu tak dobrze, aby trudno było dostosować się do zmian. Inne bardziej szczegółowe pytania to prawdopodobnie: 1. **Jaki procent czasu projektu jest zwykle spędzany na etapach planowania przed rozwojem?** 2. **Czy masz pewne mierzalne kryteria, które starasz się spełnić przed rozpoczęciem kodowania lub czy bardziej instynktowne?** 3. **Czy tworzysz diagramy wszystkich klas przed rozpoczęciem kodowania, czy raczej starasz się stworzyć dynamiczny projekt od samego początku, oczekując, że wszystko się zmieni?** Jakieś doświadczenia, którymi chcesz się podzielić byłoby wspaniale!


title: Jakie zadanie powierzył wolontariuszom Dijkstra, o czym wspomniał w swoim artykule „Pokorny programista”?

text: W artykule Dijkstry „Humble Programmer” wspomina, że dał niektórym ochotnikom problem do rozwiązania: > „Przeprowadziłem mały eksperyment programistyczny z naprawdę doświadczonymi > ochotnikami, ale pojawiło się coś zupełnie niezamierzonego i całkiem nieoczekiwanego. > Żaden z moich wolontariuszy nie znalazł oczywistego i najbardziej eleganckiego rozwiązania. Po bliższej analizie okazało się, że ma to wspólne źródło: ich pojęcie powtarzania było tak ściśle powiązane z ideą powiązanej kontrolowanej zmiennej, która miała zostać wzmocniona, że byli mentalnie zablokowani przed zobaczeniem oczywistego. Ich rozwiązania były mniej wydajne, niepotrzebnie trudne do zrozumienia > i znalezienie ich zajęło im bardzo dużo czasu”. Jaki problem sprawił Dijkstra wolontariuszom? Jakie były rozwiązania?


title: Jak uświadomić członkom mojego obiektu warstwy dostępu do danych ich rodzeństwo?

text: Mój zespół ma obecnie projekt z obiektem dostępu do danych złożonym w następujący sposób: public abstract class DataProvider { public CustomerRepository CustomerRepo { get; zestaw prywatny; } public InvoiceRepository InvoiceRepo { get; zestaw prywatny; } public InventoryRepository InventoryRepo { get; zestaw prywatny; } // kilka bardziej podobnych do powyższych } Mamy klasy nieabstrakcyjne, które dziedziczą po DataProvider, a typ "CustomerRepo", który zostaje utworzony, jest kontrolowany przez tę klasę potomną. public class FloridaDataProvider { public FloridaDataProvider() { CustomerRepo = new FloridaCustomerRepo(); // pochodzi z bazy CustomerRepository InvoiceRepo = new InvoiceRespository(); InventoryRepo = nowy InventoryRepository(); } } Naszym problemem jest to, że niektóre metody w danym repozytorium naprawdę skorzystałyby na dostępie do innych repo. Podobnie jak metoda wewnątrz InventoryRepository musi uzyskać dostęp do danych klienta, aby wykonać pewne ustalenia, więc muszę przekazać odwołanie do obiektu CustomerRepository. Jaki jest najlepszy sposób, aby te „rodzeństwo” repozytoriów były świadome siebie nawzajem i miały możliwość wywoływania swoich metod w razie potrzeby? Praktycznie wszystkie inne repozytoria skorzystałyby na przykład z posiadania CustomerRepo, ponieważ jest to miejsce, z którego wybierane są nazwy/telefony/itd., a te elementy danych należy dodać do różnych obiektów, które są zwracane z innych repozytoriów. Nie mogę po prostu odświeżyć zwykłego obiektu "CustomerRepository" wewnątrz metody w innym repozytorium, ponieważ może to nie być podstawowy CustomerRepository, który faktycznie musi zostać uruchomiony.


title: Jak postępować, gdy otrzymasz ostatnie ostrzeżenie?

text: Jestem programistą, obecnie pracuję nad tworzeniem stron internetowych. Jesteśmy małą firmą, zespołem składającym się z 2 osób, programisty i projektanta i nie mamy nikogo, kto by testował nasze aplikacje. Od zeszłego tygodnia jakoś pośpieszyłem się dokończyć zadanie w ramach projektu zaprogramowanego przez kogoś innego i wypuściłem je z błędem, którego nie widziałem. Dzisiaj dostałem ostatnie ostrzeżenie i jeśli pojawi się jakieś wydanie z błędem to zostanę zwolniony. Czy jest to wystarczająco sprawiedliwe, aby zostać zwolnionym, ponieważ wydania z błędami bez żadnych testerów w pobliżu, czy naprawdę powinienem poprawić swoje umiejętności testowania?


title: Czy systemy kontroli wersji są formą wzorca projektowego?

text: Mam problem ze zrozumieniem, czym jest wzorzec projektowy, a czym nie, szczególnie w odniesieniu do systemów kontroli wersji, takich jak CVS i Git. Czy „push, pop, stack” to „wzorzec projektowy”? Jeśli tak, czy CVS to ten sam wzorzec projektowy? > ...klienci łączą się z serwerem w celu "wyewidencjonowania" > kompletnej kopii projektu, pracy nad tą kopią, a następnie "odprawienia" swoich zmian. Jeśli tak dla obu, to czy DVCS, takie jak Git, to inny wzorzec? Który? Jeśli to nie są wzorce projektowe, dlaczego tak nie jest? Jak powinny się nazywać?


title: Jak język [X] obsługuje nieokreślone formy, takie jak 0^0?

text: Gdy x dochodzi do 0, granice x^0 i 0^x idą odpowiednio do 1 i 0. Niektórzy twierdzą, że najlepsza wartość 0^0 zależy od kontekstu, inni twierdzą, że wartość 0^0 powinna wynosić 1. Jestem zainteresowany tym, co mówią implementatorzy języka. Wydaje się, że nie ma konsensusu. Na przykład w ActiveState Perl 5.12.0: C:\>perl -e "print 0**0" 1 Podczas gdy w Mathematica 6.0: In[1]:= 0^0 Podczas oceny In[1]:= Moc: :indet: Napotkano nieokreślone wyrażenie 0^0. >> Out[1]= Nieokreślony Chciałbym również poznać Twoją opinię na ten temat: Co powinno być 0^0? A także, czy kiedykolwiek wprowadziłeś błąd do programu, który pisałeś (lub miałeś trudności z debugowaniem programu) z powodu sposobu, w jaki twój język obsługuje nieokreślone formularze?


title: Jak komunikują się dwie aplikacje?

text: Powiedzmy, że mam stronę PHP z interfejsem kalkulatora, ale chcę przenieść sumę do Windows Calculator.exe, a następnie otrzymać odpowiedź z aplikacji z powrotem na moją stronę PHP. Jak to zrobić? Rozumiem, że sumę można łatwo zrobić w PHP i nie ma sensu używać innej aplikacji, ale zastanawiałem się tylko, jak to będzie zrobione i będzie to pomocne w moim następnym projekcie. Nie mogłem znaleźć żadnych aktualnych pytań, ale kryteria wyszukiwania nie są łatwe! Dziękuję


Ostatnio zrobiłem program. Zapomniałem skasować 2 linijki kodów. Ten błąd kosztował mnie 800 dolarów dziennie każdego dnia. Programowałem w PHP. Jeśli użytkownik korzysta z proxy, przekierowuje go w inne miejsce. Użycie debuggera było niemożliwe, ponieważ część kodu zawiera ioncube. Ponieważ program po prostu przekierowuje gdzie indziej bez względu na wszystko, trudno jest zobaczyć, która część kodu jest wykonywana. Wszędzie więc umieszczam mnóstwo informacji o debugowaniu. Pomyślałem, że i tak je usunę. Najbardziej naturalnym sposobem debugowania jest oczywiście umieszczenie informacji debugowania w pliku. Problem w tym, że często używam proxy. Więc po zmianie programu często muszę pobierać plik tekstowy z filezilla. Często plik tekstowy nie pokazuje tego, co moim zdaniem powinien pokazywać. W końcu zdecydowałem się po prostu wyświetlić błąd w sieci. Rozważałem posiadanie trybu debugowania. Jednak obawiam się, że zapomnę usunąć informacje debugowania. Rozważałem posiadanie trybu debugowania, jeśli użytkownik robi na przykład ?debuggingmode=1. Miałem jednak paranoję, że mój konkurent w jakiś sposób może odgadnąć tajne słowo kluczowe. Usunąłem większość informacji debugowania. Zapomniałem usunąć jeden i ten pojawia się tylko wtedy, gdy użytkownicy korzystają z proxy z właściwego kraju. Okazuje się, że nie mam pełnomocnika z właściwego kraju i nie zdawałem sobie z tego sprawy. Po 24 godzinach pracy programu wrzuciłem to na moją główną domenę. Mój konkurent, używający proxy, zobacz kod debugowania. Skopiował pomysł i tak straciłem 800 dolarów dziennie. Z perspektywy czasu naprawdę trudno mi zobaczyć, gdzie popełniłem błąd. Byłem bardzo ostrożny. A jednak tak się stało. Jak bezpiecznie debugować aplikację internetową PHP bez ujawniania sekretów konkurencji?


title: dlaczego nie ma operatora mocy w java / c ++?

text: Chociaż istnieje taki operator - ** w Pythonie, zastanawiałem się, dlaczego java i c++ też go nie mają. Łatwo jest zrobić taki dla klas, które definiujesz w C++ z przeciążaniem operatorów (i wierzę, że jest to możliwe również w javie), ale kiedy mówimy o typach prymitywnych, takich jak int, double i tak dalej, będziesz musiał użyć biblioteki funkcja jak Math.power (i zwykle trzeba rzucić oba, aby podwoić). Dlaczego więc nie zdefiniować takiego operatora dla typów pierwotnych?


title: Czy wystarczy zastosować testy akceptacyjne i integracyjne zamiast testów jednostkowych?

text: Krótkie wprowadzenie do tego pytania. Używam teraz TDD, a ostatnio BDD od ponad roku. Używam technik, takich jak kpina, aby sprawniej pisać moje testy. Ostatnio rozpocząłem osobisty projekt, aby napisać dla siebie mały program do zarządzania pieniędzmi. Ponieważ nie miałem starszego kodu, był to idealny projekt na początek z TDD. Niestety nie doświadczyłem tak bardzo radości z TDD. To nawet tak bardzo zepsuło mi zabawę, że zrezygnowałam z projektu. Jaki był problem? Cóż, zastosowałem podejście podobne do TDD, aby testy / wymagania ewoluowały w projektowaniu programu. Problem polegał na tym, że ponad połowa czasu programowania jak na pisanie/refaktoryzację testów. Więc w końcu nie chciałem wprowadzać więcej funkcji, ponieważ musiałbym dokonać refaktoryzacji i napisać do wielu testów. W pracy mam dużo starszego kodu. Tutaj piszę coraz więcej testów integracyjnych i akceptacyjnych oraz coraz mniej testów jednostkowych. Nie wydaje się to złym podejściem, ponieważ błędy są najczęściej wykrywane przez testy akceptacyjne i integracyjne. Pomysł polegał na tym, że w końcu mógłbym napisać więcej testów integracyjnych i akceptacyjnych niż testów jednostkowych. Jak powiedziałem, do wykrywania błędów testy jednostkowe nie są lepsze niż testy integracyjne / akceptacyjne. Testy jednostkowe są również dobre dla projektu. Ponieważ pisałem wiele z nich, moje zajęcia są zawsze projektowane tak, aby były dobrze testowalne. Dodatkowo podejście polegające na tym, aby testy/wymagania kierowały projektowaniem, w większości przypadków prowadzi do lepszego projektu. Ostatnią zaletą testów jednostkowych jest to, że są szybsze. Napisałem wystarczająco dużo testów integracyjnych, aby wiedzieć, że mogą one być prawie tak szybkie, jak testy jednostkowe. Po przejrzeniu sieci dowiedziałem się, że są tu i ówdzie bardzo podobne pomysły do moich. Co myślisz o tym pomyśle? **Edytuj** Odpowiadając na pytania jeden przykład, w którym projekt był dobry, ale potrzebowałem ogromnej refaktoryzacji dla następnego wymagania: Na początku były pewne wymagania do wykonania niektórych poleceń. Napisałem rozszerzalny parser poleceń - który analizował polecenia z jakiegoś wiersza poleceń i nazywał właściwy w modelu. Wynik był reprezentowany w klasie modelu widoku: ![Pierwszy projekt](http://i.stack.imgur.com/nA1me.png) Nie było w tym nic złego. Wszystkie klasy były od siebie niezależne i bez problemu mogłem dodawać nowe komendy, pokazywać nowe dane. Kolejnym wymaganiem było, aby każda komenda miała swoją własną reprezentację widoku - jakiś podgląd wyniku komendy. Przeprojektowałem program, aby uzyskać lepszy projekt dla nowych wymagań: ![Drugi projekt](http://i.stack.imgur.com/Sdb58.png) To również było dobre, ponieważ teraz każde polecenie ma swój własny model widoku i w związku z tym własny podgląd. Chodzi o to, że parser poleceń został zmieniony tak, aby używał parsowania poleceń na podstawie tokenów i został pozbawiony możliwości wykonywania poleceń. Każde polecenie ma swój własny model widoku, a model widoku danych zna tylko bieżący model widoku poleceń, który zna dane, które mają być pokazane. Wszystko, co chciałem wiedzieć w tym momencie, to czy nowy projekt nie złamał żadnych istniejących wymagań. Nie musiałem zmieniać ŻADNEGO testu akceptacyjnego. Musiałem przerobić lub usunąć prawie KAŻDY test jednostkowy, co było ogromnym nawałem pracy. To, co chciałem tu pokazać, to powszechna sytuacja, która często zdarzała się podczas tworzenia. Ze starymi czy nowymi projektami nie było problemu, po prostu zmieniały się one naturalnie wraz z wymaganiami – jak to rozumiałem, to jedna z zalet TDD, że projekt ewoluuje. **Wniosek** Dzięki za wszystkie odpowiedzi i dyskusje. Podsumowując tę dyskusję, pomyślałem o podejściu, które przetestuję przy kolejnym projekcie. * Przede wszystkim piszę wszystkie testy przed wdrożeniem czegokolwiek, co zawsze robiłem. * Dla wymagań piszę najpierw testy akceptacyjne, które testują cały program. Następnie piszę kilka testów integracyjnych dla komponentów, w których muszę zaimplementować wymaganie. Jeśli istnieje komponent, który ściśle współpracuje z innym komponentem, aby zrealizować to wymaganie, napisałbym również kilka testów integracyjnych, w których oba komponenty są testowane razem. Last but not least, jeśli mam napisać algorytm lub inną klasę z wysoką permutacją - np. serializator - pisałbym testy jednostkowe dla tych konkretnych klas. Wszystkie inne klasy nie są testowane, z wyjątkiem testów jednostkowych. * W przypadku błędów proces można uprościć. Zwykle błąd jest powodowany przez jeden lub dwa składniki. W tym przypadku napisałbym jeden test integracyjny dla komponentów, który testuje błąd. Gdyby to dotyczyło algorytmu, napisałbym tylko test jednostkowy. Jeśli nie jest łatwo wykryć komponent, w którym występuje błąd, napisałbym test akceptacyjny, aby zlokalizować błąd - powinien to być wyjątek.


title: Obawy dotyczące bezpieczeństwa związane z przechowywaniem haseł w językach skryptowych (VBA)

text: Zespół, z którym pracuję, obsługuje duże ilości ankiet konsumenckich oraz wewnętrzne dane metryczne firmy. Przede wszystkim dane są przechowywane w bazie danych, a do pracy z nimi wykorzystujemy różne platformy, w tym MS Excel. Mój partner opracował zestaw plików Excel/VBA, które pobierają surowe dane i przesyłają je do bazy danych. Niestety, po przeglądzie kodu stwierdziliśmy, że hasło do bazy danych było wyświetlane w kodzie VBA, w postaci zwykłego tekstu, w kilku miejscach na plik. Będąc w dużej organizacji korporacyjnej, mieliśmy wiele obaw, że te pliki będą dostępne nie tylko dla naszego zespołu, a hasło do bazy danych zostanie złamane. * * * Problem polega na tym, że czuję, że _rozwiązanie_ jest tak samo złe, jeśli nie gorsze, niż pierwotny problem. Hasła w postaci zwykłego tekstu zostały usunięte z kodu wszystkich plików VBA i utworzono pomocniczy plik pomocniczy, który wymaga od użytkownika uwierzytelnienia za pośrednictwem systemu LDAP naszej organizacji przed uzyskaniem dostępu do hasła bazy danych. Będąc językiem skryptowym (i Excelem), uważam, że tak naprawdę nie ma odpowiednich środków ostrożności, aby zabezpieczyć hasła użytkowników w pliku pomocniczym. Czuję, że teraz zamiast narażać dostęp do pojedynczej bazy danych, potencjalnie narażamy dostęp do loginów każdego, kto korzysta z tych plików. Aby być uczciwym, mój partner zaimplementował szereg technik zabezpieczających dane w pliku pomocniczym. Po prostu uważam, że każdy z nich można łatwo obejść: * blokowanie kodu VBA _[wyszukiwarka google do odzyskiwania hasła vba]_ * używanie niestandardowego „zamaskowanego” pola wprowadzania hasła _[pole hasła może być zamaskowane, ale nadal jest przekazywane pola jako zwykły tekst]_ * w rzeczywistości nie przechowuje hasła użytkownika w samym pliku (przekazuje je bezpośrednio do wywołania LDAP) _[punkt przerwania lub instrukcja `stop` może łatwo ujawnić zawartość tego, co zostało przekazane]_ * ustawienie arkuszy na `VeryHidden`, aby zapobiec bezpośredniemu dostępowi _[append`.zip` do nazwy pliku, a WSZYSTKIE dane we WSZYSTKICH arkuszach są dostępne]_ * * * Ponieważ nie mam zamiaru narzekać bez rozwiązania, nasz organizacja korzysta już z Active Directory/LDAP do uwierzytelniania na naszych indywidualnych komputerach. Uważam, że sprawdzenie zalogowanego użytkownika (nie pełnego użytkownika/hasła, tylko użytkownika) z białą listą użytkowników w bazie danych powinno być wystarczającą alternatywą dla uwierzytelnienia. **Więc moje pytanie...** Czy jestem zbyt paranoiczna na ten temat? Czy istnieje inne, bardziej odpowiednie rozwiązanie? Dość mocno naciskam na tę _poprawkę_ i chciałem tylko sprawdzić zdrowie psychiczne, zanim zacznę angażować innych w kolejne rozwiązanie.


title: Jeśli priorytetem jest wielodostępność, czy należy przechowywać zawartość witryny w bazie danych?

text: Mam wielodostępną witrynę ASP.NET MVC i cały tekst specyficzny dla klienta jest przechowywany w plikach zasobów. Za każdym razem, gdy ktoś chce zmienić tekst, muszę przeskakiwać przez obręcze, wypełniać formularze i pozwolić komuś innemu wprowadzić go do produkcji. W przypadku 2 klientów było to w porządku, ale teraz mamy 6 i planujemy wprowadzić do 40+. **Nie mogę spędzić całego dnia na zmienianiu tekstu!** Czy ktoś ma jakieś rady, jak uprościć życie? Myślałem, że CMS może nie działać, ponieważ z tego, co wiem, większość CMS ma pomysł na wielodostępność, aby dodać dodatkową niezależną witrynę. Często wprowadzamy nowe funkcje i obawiam się, że będę na tej samej łodzi, dodając moduły i aktualizując ponad 40 witryn. Wolę jedną stronę z innym tekstem, jeśli mogę. Jakakolwiek pomoc jest mile widziana!


Czy istnieją inne powody niż budżet na zatrudnianie "podstawowych" programistów?


title: Struktura korporacyjna: dobra czy zła?

text: Dla firmy, która tworzy ten sam typ oprogramowania w kółko, zbudowano niestandardową strukturę podobną do MVP/MVC. Oczywistą zaletą jest to, że pozwala im tworzyć oprogramowanie szybciej, łatwiej i taniej. Martwi mnie jednak to, że taki framework (a ten w szczególności) kryje w sobie wiele dla programistów, którzy korzystają z tego frameworka, ale nie rozwijają go aktywnie. Ci programiści: 1. nie poznają szczegółów frameworka, który za nim stoi ( ASP.NET MVC/WPF/Silverlight/... ) 2. nie mogą przekazywać tej wiedzy innym firmom, co może spowodować, że deweloperzy stracili motywację do zostań mimo wszystko Moje pytanie: czy korzyści płynące z korporacyjnego frameworka przeważają nad wadami twoich programistów na dłuższą metę? Czy są jeszcze inne rzeczy, które należy wziąć pod uwagę? **EDYTUJ (dla jasności)** Kluczową różnicą są tutaj * frameworki, które są standardami branżowymi, choćby trochę (.NET, Ruby, assembler, C#, ...) * frameworki, które nie są, **czyli* * : ograniczone do jednej korporacji, własnościowe, nie-OSS, ... mówię konkretnie o tym drugim.


title: Wskazówki/porady, jak ograniczyć korzystanie z klas „menedżerskich”?

text: Czasami słyszę, że posiadanie zbyt wielu klas "menedżerskich" w projekcie twojego programu to zapach kodu i dodaje niepotrzebną warstwę złożoności. Dla mnie ma sens, że ludzie chcą używać klas menedżera do manipulowania i kontrolowania obiektów z kontekstu, który ma dla nich sens, ale wymyślenie, jak sprawić, by rozwiązanie działało bez nich, może być mylące. Czy naprawdę należy unikać zajęć menedżerskich tak bardzo, jak to możliwe? Ponadto, jakie artykuły/artykuły powinienem przeczytać o tym, jak wdrożyć alternatywne obejście w przypadku ogólnych/częstych przypadków, w których można usunąć tych menedżerów?


title: Algorytm maksymalizujący wagę (wierzchołki ważone)

text: Szukam opisu (nazwa algorytmu, kodu, pseudokodu itp.), który pomoże mi sformułować ten problem i znaleźć odpowiednią rekurencję i najbardziej efektywne rozwiązanie. **Problem** : Biorąc pod uwagę wykres z węzłami ważonymi i węzłem początkowym, chcę wygenerować uporządkowaną wagowo listę węzłów, które leżą na ścieżce, która zaczyna się w węźle początkowym, a następnie przechodzi do następnego sąsiedniego nieodwiedzonego węzeł o najwyższej wartości, a następnie do następnego itd., aż nie będzie już mógł być kontynuowany (np. brak węzłów sąsiednich, brak nieodwiedzonych węzłów sąsiednich lub wszystkie węzły były już raz odwiedzone). Czy słusznie zakładam, że jest to odmiana problemu komiwojażera? Wszelkie sugestie lub wskazówki byłyby bardzo mile widziane. Algorytmy po prostu nie są moją dziedziną... * * * _Aktualizacja z komentarzy_ : To nie jest pytanie do pracy domowej. ... Właściwie za tym, że udało się określić pozornie przypadkowe zachowanie ssaków jako problem algorytmiczny, kryją się lata badań empirycznych. ... Bez algorytmicznego zajęcia się tą dynamiką grup nie będę w stanie rozszerzyć testowania poza moją początkową próbkę i niestety analiza regresji po prostu nie zadziała.


title: Czy nazywanie nieużywanej zmiennej jednym podkreśleniem to zła praktyka?

text: Często, gdy składnia języka wymaga ode mnie nazwy zmiennej, która nigdy nie jest używana, nazywam ją `_`. Moim zdaniem zmniejsza to bałagan i pozwala mi skupić się na znaczących zmiennych w kodzie. Uważam, że jest dyskretny, dzięki czemu wywołuje efekt „poza zasięgiem wzroku, z umysłu”. Typowym przykładem tego, gdzie to robię, jest nazywanie podzapytań w SQL. SELECT * FROM ( SELECT * FROM TabelaA JOIN TabelaB ON TabelaA.KolumnaB = TabelaB.KolumnaB WHERE [KolumnaA] > 10 ) _ --Ta nazwa jest wymagana, ale nigdy nie jest tutaj używana ORDER BY KolumnaC Innym przykładem jest zmienna pętli, która nie jest używany. array = [[] for _ in range(n)] # Definiuje listę n pustych list w Pythonie Używam tej techniki bardzo oszczędnie, tylko gdy czuję, że opisowa nazwa nic nie wnosi do kodu, a w pewnym sensie odbiera z niego, dodając więcej nazw do zapamiętania. Pod pewnymi względami postrzegam to jako podobne do słowa kluczowego `var` w C#, którego również używam oszczędnie. Moi współpracownicy się nie zgadzają. Mówią, że nawet posiadanie pojedynczej (alfabetycznej) nazwy jest lepsze niż `_`. Czy się mylę? Czy to zła praktyka?


title: Zagubiony w ASP.NET Ajax, jQuery i JavaScript

text: Wczoraj przeczytałem kilka rozdziałów o ASP.NET Ajax i jQuery z mojej książki o ASP.NET 4 i uznałem te frameworki za całkiem interesujące i postanowiłem dowiedzieć się o nich więcej. Dzisiaj pożyczyłem kilka książek z biblioteki na temat Ajax i JavaScript. Wygląda na to, że ASP.NET Ajax różni się od Ajax, a jQuery wydaje się być "nowym" JavaScriptem. Czy to oznacza, że mogę pominąć JavaScript i bezpośrednio uczyć się jQuery? Z drugiej strony książka Ajax spoza ASP.NET, którą pożyczyłem, wydaje się mieć zastosowanie tylko do programowania internetowego po stronie klienta i wygląda zupełnie inaczej niż to, czego nauczyłem się od ASP.NET Ajax. Jeśli jestem programistą ASP.NET, myślę, że powinienem trzymać się ASP.NET Ajax zamiast Ajax po stronie klienta, prawda? A co z PHP? Czy istnieje "PHP Ajax" podobny do ASP.NET Ajax? Nie chodzi o to, że jestem leniwy w nauce innych narzędzi, ale chcę po prostu skupić się na tych właściwych.


title: Jaki jest dobry algorytm do przydzielania priorytetów obowiązków pracy?

text: Obecnie realizuję projekt (w PHP), który ma następujące wymagania: 1. Istnieje lista osób posortowanych według określonego priorytetu. Praca powinna być im przydzielona w ramach tego priorytetu. np. Jeśli lista to T1, T2, T3, T1 należy przydzielić pracę przed T2. A T2 ma przydzieloną pracę przed T3. W przypadku, gdy są to tylko 2 prace, przydzielane są tylko T1 i T2. 2. Każda praca ma określone wymagania czasowe. Tak więc, nawet jeśli jest kolej na przydzielenie pracy T1, jeśli żadna z prac nie jest odpowiednia dla T1, T1 zostanie pominięty i żadna praca nie zostanie przydzielona do T1. 3. Niektóre prace są bardziej odpowiednie dla niektórych osób. Np. Istnieją dwie prace, W1 i W2. Jeśli T1 jest bardziej odpowiednie dla W2, W2 zostanie przypisane do T1. Moim obecnym pomysłem jest przydzielanie pracy w oparciu o listę osób i używanie Wyszukiwanie A* w celu określenia najlepszego sposobu przydzielenia pracy każdej osobie. Ale pomyślałem, że moje żądanie 1 i żądanie 3 wydają się mieć pewne konflikty. Czy to rozsądny algorytm, czy są z nim problemy, których nie widzę w tym momencie?


title: Czy ktoś pracuje/wie dużo o programowaniu stanowisk dla badań naukowych/medycznych?

text: Czasami jestem trochę rozczarowany rodzajami projektów, nad którymi pracuję, ponieważ są to po prostu aplikacje biznesowe, które nie są do końca przełomowe i zwykle są zbędne w porównaniu z innymi już istniejącymi aplikacjami, które robią podobne rzeczy. Pomyślałem, że fajnie byłoby ewentualnie podjąć pracę jako programista w firmie, która prowadzi badania medyczne lub inne rodzaje badań naukowych, w których czuję, że pracuję nad czymś, co moim zdaniem jest potencjalnie korzystne dla wielu ludzi, odnosi się to do niektórych niedawnych doświadczeń życiowych, ale nie będę się tym tutaj zajmował. Poza tym nie jestem zbytnio zainteresowany prowadzeniem badań w dziedzinie informatyki, więcej badań w innych dziedzinach, które wykorzystują programowanie. Obecnie pracuję jako programista aplikacji webowych w języku Java i niewiele wiem o zawodach tego typu, których szukałbym w tej dziedzinie. Chciałbym usłyszeć od każdego z doświadczeniem w tej dziedzinie, który mógłby wskazać mi zasoby lub opowiedzieć mi trochę o tym, jak wyglądałaby praca w tej dziedzinie, zakładam, że byłoby to zupełnie inne niż praca dla rodzajów firm, które mam pracował do tej pory. Dzięki za wszelkie informacje


title: Hostowane rozwiązanie innej firmy do zarządzania projektami i kontroli źródeł?

text: Poszukuję rozwiązania SAAS, które oferuje zarządzanie projektami, śledzenie czasu, fakturowanie i udostępnianie plików (do udostępniania klientom), a także kontrolę źródeł, zarządzanie elementami pracy i zarządzanie zespołem dla zespołu programistów. Innymi słowy, kompletne rozwiązanie dla konsultingowego programisty/zespołu programistycznego. Patrzę na aceproject.com, zoho, basecamp itp., ale brakuje im jednej z tych funkcji. Czy znasz jakieś rozwiązanie, które możesz polecić?


title: Jak radzisz sobie z przekładaniem teorii na praktykę?

text: Będąc informatykiem w dziedzinie badań, często mam za zadanie współpracować z profesjonalistami spoza domeny oprogramowania (myślę o matematykach, inżynierach elektrykach itp.), A następnie przełożyć ich teorie i pomysły na realne wdrożenia. Często sprawia mi trudność, gdy przedstawiają problem teoretyczny, który wydaje się być nieco oderwany od rzeczywistości. Nie mówię, że teoria jest fałszywa, tylko, że trudno ją przełożyć na rzeczywiste sytuacje. Na przykład ostatnio pracowałem z radiotelefonami definiowanymi programowo. Badamy wiele różnych obszarów, ale często specjaliści od matematyki w mojej grupie przedstawiali problem mocno zakorzeniony w teorii (przetwarzanie sygnałów, fizyka, cokolwiek). Często borykam się z czasami, w których trudno jest nakreślić bezpośrednie podobieństwa między teorią a realizacją, którą muszę opracować. Powiedzmy, że pracujemy nad detektorem energii, osoba teoretyczna w mojej grupie powiedziałaby: „musisz zmierzyć wariancję szumu przy braku sygnału”. To prowadzi mnie do myślenia „jak do cholery mam izolować hałas od sygnału w rzeczywistości?” Jest wiele przykładów, ale mam nadzieję, że widzisz, dokąd zmierzam. A więc moje pytanie brzmi: jak sobie radzić z wdrażaniem koncepcji teoretycznych, gdy teoria wydaje się oderwana od rzeczywistości? A przynajmniej wtedy, gdy połączenia nie są tak jasne. A może osoba z „teorią” może nie mieć pojęcia o rzeczywistych ograniczeniach? Uwaga: To było dla mnie trudne pytanie - mam nadzieję, że mnie śledzisz. Jeśli masz sugestie, jak mógłbym go ulepszyć, daj mi znać! Dzięki za uwagę! EDYCJA: Aby było nieco jaśniej, rozumiem w sytuacjach takich jak ta, że sam muszę nauczyć się tej konkretnej domeny do pewnego stopnia (tj. Przetwarzanie sygnału), ale bardziej interesuje mnie to, kiedy te teoretyczne koncepcje nie wydają się być tak ugruntowane w ćwicz jak się chce.


title: Chatbot Conversation Objects, Twoje podejście?

text: Jestem programistą nub, używam pythona, a mój obecny projekt to chatbot dla kanału irc, na którym mieszkam. W tej chwili tworzę obiekt konwersacji, gdy bot jest początkowo adresowany. Obiekt ma przypisane atrybuty _peer_ (inny członek konwersacji), _topic_ (podstawowy temat konwersacji), _log_ (dziennik wcześniejszych wiadomości do i od partnera), _lastent_ (uproszczone formy ostatnich 10 wiadomości wysłane na kanał przez bota) oraz _lastrecv_ (ostatnie 10 otrzymanych wiadomości wysłanych na kanał przez peera, również super uproszczone). Po otrzymaniu wiadomości bot sprawdza temat i przegląda listę oczekiwanych odpowiedzi. Jeśli któryś zostanie dopasowany, bot wybiera odpowiedź i wysyła ją na kanał. Następnie w razie potrzeby aktualizuje temat i słownik konwersacji bota. Bot posiada listę słowników konwersacji, kluczem jest nick użytkownika, a definicją jest obiekt konwersacji. Uważam, że to niepotrzebnie przesadne. Zastanawiałem się, jakie są inne podejścia do śledzenia rozmów. Czy są jakieś prostsze, łatwiejsze podejścia?


title: Zasady programowania w odniesieniu do wydajności oprogramowania (obliczeniowej) i wykorzystania zmiennych

text: Jestem klasycznie wyszkolonym psychologiem, a nie programistą, więc czasami umykają mi bardziej zaawansowane aspekty programowania, w szczególności dotyczące wydajności programu i/lub pewnych dobrych praktyk, w tym przypadku w odniesieniu do użycia zmiennych. Oto kilka pseudokodów: var a; zm.b; var c; function GetSomeInformation() { zwraca "XYZ"; } a = GetSomeInformation(); b = GetSomeInformation(); c = GetSomeInformation(); Więc moje pytanie brzmi: ** Czy jest mniej lub bardziej wydajne (lub tak samo) przechowywanie danych w zmiennej raz i odwoływanie się do tego w przeciwieństwie do powtarzających się wywołań tej samej funkcji? ** Tzn., czy ten kod jest bardziej wydajny? var wyniki = GetSomeInformation(); a = wyniki; b = wyniki; c = wyniki; Jeśli tak, to czy ten wzrost lub spadek wydajności jest generalnie taki sam w różnych językach, czy też różni się w zależności od języka? Czy istnieją **progi**, w których lepiej jest nazwać zmienną, zamiast używać powtarzającego się wywołania funkcji lub na odwrót? Jakie aspekty mogą zmienić jego wydajność (np. czy jest różnica, czy jest to funkcja składowa klasy, czy zwykła funkcja w zakresie globalnym)? itp. Jeśli to możliwe, chciałbym wiedzieć konkretnie, jak takie pojęcie odnosi się do okien dialogowych C++/MFC, ponieważ powstało, gdy pisałem jakiś kod w tym frameworku. // zdefiniuj wskaźniki do elementów w moim formularzu CListBox *pLISTBOX = (CListBox*) GetDlgItem(LISTBOX); CStatic *pSTATIC_A = (CStatic*) GetDlgItem(STATIC_A); CStatic *pSTATIC_B = (CStatic*) GetDlgItem(STATIC_B); CEdit *pEDIT_BOX_A = (CEdit*) GetDlgItem(EDIT_BOX_A); CEdit *pEDIT_BOX_B = (CEdit*) GetDlgItem(EDIT_BOX_B); int SelectedIndex = pLISTBOX->GetCurSel(); pSTATIC_A->SetWindowText(pLISTBOX->GetItemData(SelectedIndex)); pSTATIC_B->SetWindowText(pLISTBOX->GetItemData(SelectedIndex)); pEDIT_BOX_A->SetWindowText(pLISTBOX->GetItemData(SelectedIndex)); pEDIT_BOX_B->SetWindowText(pLISTBOX->GetItemData(SelectedIndex));


title: Jak ważne jest zrozumienie, jak działa framework sieciowy pod maską?

text: Aby zbudować produkt używam framework Symfony2 PHP. Udało mi się uzyskać większość funkcji i zadowolony klient. Teraz muszę utrzymać ten projekt. Zastanawiałem się więc, czy zrozumienie, jak framework działa pod maską i jak obsługuje żądania, jest naprawdę ważne, aby nie wpadać w kłopoty w przyszłości? A także, które części frameworka powinienem owinąć w głowę?


title: Elementy dostarczane w ramach projektu rozwoju oprogramowania

text: Zgodnie ze standardowymi ramami zarządzania projektami, dla projektu rozwoju oprogramowania dostarczymy materiały (dokumenty i oprogramowanie) pod koniec każdego miesiąca: ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/Bf945 .png) Moje pytanie brzmi: * Od maja do czerwca, kiedy oprogramowanie jest w fazie rozwoju, jaki byłby wynik w każdym miesiącu? * Każdy dokument zaczyna się od wersji 1.0. Czy możliwe jest dostarczenie tego samego dokumentu miesiąc lub dwa później jako wersja 2.0? Ponieważ po drodze mogą się zdarzyć zmiany. Użytkownicy i klienci pytają mnie, czy chcą widzieć coś jako możliwego do dostarczenia na każdy miesiąc, więc nie będą czuli, że projekt idzie bez kierunku.


title: Czy na certyfikacie podany jest wynik z egzaminu Oracle MySQL 5 Certified Associate?

text: Zdam egzamin Oracle MySQL 5 Certified Associate i chcę wiedzieć, czy mój wynik procentowy zostanie podany na certyfikacie? I czy w ogóle mi to zostanie dane? Czy po prostu będę wiedzieć, czy zdałem? Na przykład na egzaminach Zend wynik nie jest znany zdającemu.


title: Kompatybilność Enum Vs. stałe łańcuchowe

text: Niedawno powiedziano mi, że użycie `Enum`: public enum TaskEndState { Error, Completed, Running } może mieć problemy ze zgodnością/serializacją, dlatego czasami lepiej jest użyć const string: public const string TASK_END_STATE = "END_STATE"; public const string TASK_END_STATE_ERROR = "TASK_END_STATE_ERROR"; public const string TASK_END_STATE_COMPLETE = "TASK_END_STATE_COMPLETE"; public const string TASK_END_STATE_RUNNING = "TASK_END_STATE_RUNNING"; Czy możesz znaleźć praktyczny przypadek użycia, w którym może się to zdarzyć, czy istnieją jakieś wskazówki, w których należy unikać „Enum”? **Edytuj:** Moje środowisko produkcyjne ma wiele usług WFC (różne wersje tego samego produktu). Nowsza wersja może/lub może nie zawierać niektórych nowych właściwości jako **stan końcowy zadania** (to tylko przykład). Jeśli spróbujemy zdeserializować nową wartość `Enum` w starszej wersji określonej usługi, może to nie zadziałać.


title: Jak mogę stwierdzić, czy nadużywam wielowątkowości?

text: Obecnie czuję, że nadużywam wielowątkowości. Mam 3 typy danych, A, B i C. Każde „A” można przekonwertować na wiele „B”, a każde „B” można przekonwertować na wiele „C”. Interesuje mnie tylko leczenie „C”. Mógłbym to dość łatwo napisać za pomocą kilku funkcji konwersji. Ale złapałem się na implementacji tego za pomocą wątków, trzech kolejek (`queue_a`, `queue_b` i `queue_c`). Istnieją dwa wątki wykonujące różne konwersje i jeden proces roboczy: * `ConverterA` czyta z `queue_a` i zapisuje do `queue_b` * `ConverterB` czyta z `queue_b` i zapisuje do `queue_c` * `Worker` obsługuje każdy element z `queue_c` Konwersje są dość przyziemne i nie wiem, czy ten model jest zbyt zawiły. Ale wydaje mi się, że jest niezwykle wytrzymały. Każdy „konwerter” może zacząć działać jeszcze zanim dane dotrą do kolejek, a w dowolnym momencie kodu mogę po prostu „przesłać” nowe „A” lub „B”, co uruchomi potok konwersji, który z kolei spowoduje wyzwolić zadanie przez wątek roboczy. Nawet wynikowy kod wygląda na prostszy. Ale nadal nie jestem pewien, czy nadużywam wątków do czegoś prostego.


title: Generowanie dokumentacji kodu

text: Chcę wygenerować dokumentację kodu w prostym formacie. Kluczowymi elementami są sygnatura metody, składowe, konstruktory, metody. Zajmuję się różnymi aplikacjami w .NET i tworzę do nich dokumentację. Do każdego przedmiotu będę dodawać notatki. Wynik końcowy powinien wyglądać podobnie do dokumentacji MSDN lub Java API. Więc chcę wziąć mój kod źródłowy i wygenerować jakiś szablon, do którego będę mógł dodawać notatki. Chcę wybrać i wybrać pewne klasy, a nie inne w różnych zastosowaniach. Nie mówię o dokumentacji intellisense. Ta dokumentacja będzie wykorzystywana jako odniesienie poza Visual Studio. AFAIK, to wszystkie komentarze XML są dobre w .NET. Dokumentuję różne interfejsy i punkty wejścia do pisania rozszerzeń dla aplikacji innej firmy. Nie jesteśmy właścicielami ich kodu, więc nie mogę po prostu wejść i dodać komentarzy XML do ich interfejsów, klas itp. Zamiast tego muszę zaimplementować interfejs i skomentować go. Następnie udokumentuj to w Internecie. Dokumentowanie każdej implementacji tylko w celu wyjaśnienia ich architektury jest zbędne. Nie dokumentują swoich rzeczy... to jest tutaj główny problem. Czy jest jakieś narzędzie, które może pomóc w tym procesie? Co sugerujesz?


title: Dlaczego „OOP”, a nie po prostu „Programowanie obiektowe”?

text: Dlaczego mówimy „programowanie obiektowe”, a nie po prostu „programowanie obiektowe”? Dlaczego w tym przypadku mówimy o orientacji, a nie o „programowaniu zorientowanym funkcjonalnie” i tak?


title: Poniżanie dokumentacji – jak sobie z tym poradzić?

text: **Ważne**: **nie mamy żadnych problemów** z _dokumentacją kodu źródłowego_. Należy to do regularnego audytu kodu i jest aktualizowane. Nasz problem polega na dokumentacji dla programistów (lub "zewnętrznej", jeśli chcesz), małych blogowych porad od programistów dla programistów, które zwykle są napisane, a często pozostawione. * * * Używamy systemu podobnego do wiki do tworzenia _dokumentacji programistów_ \- artykułów napisanych przez programistów dla programistów** opisujących nieco bardziej szczegółowo, jak działa dany fragment kodu. Te strony wiki zazwyczaj zawierają: * motywacje stojące za decyzjami projektowymi dotyczącymi części API (na przykład; zrobiliśmy tę _brzydką rzecz_, ponieważ ta konkretna biblioteka innej firmy chce, aby coś było zrobione w ten sposób, ponieważ ta inna biblioteka ..., ponieważ .. .) * wyjaśnienie, jak radzimy sobie z konkretnymi typowymi zadaniami (na przykład wyświetlanie banalnego popupa, który musi odwoływać się do odpowiednich stylów aplikacji, zarejestrować się w komponencie rejestru i zaimplementować jakiś interfejs w celu automatycznego "przeskanowania" przez inny komponent) * dobre praktyki (jakkolwiek subiektywne, właściwie to zapisujemy) * konfiguracja środowiska, wymagane narzędzia i jego konfiguracja Ogólnie rzecz biorąc, głównie rzeczy związane z pisaniem kodu, który nie pasuje do zwykłej dokumentacji kodu ze względu na swój rozmiar i blog charakter post/artykułowy. ### Problem O ile wprowadzenie tego systemu wydawało się dobrym pomysłem kilka miesięcy temu, obecnie czuję, że powoduje on więcej problemów niż rozwiązuje. Na przykład: * ludzie **robią** piszą artykuły... ale po zmianie kodu rzadko następuje aktualizacja wiki * wiele _scratch_ artykułów, napisanych przez kogoś w pośpiechu i pozostawionych w ten sposób * mimo że prośba o artykuł zwykle pochodzi od kierownika projektu , prawie nigdy nie jest weryfikowany pod kątem poprawności/składu - co czasami skutkuje słabą jakością Zwykła degradacja. Zmieniono kod, wiki pozostaje bez zmian. Następnym razem, gdy ktoś szuka informacji, zwykle znajduje przestarzałe, niskiej jakości rzeczy - i zastanawia się, o co chodzi, czy to, co znalazł, jest dokładne lub (co gorsza), które z nich są. A to, co miało pomóc, kończy się odwrotnie. W tej chwili wydaje się, że ludzie są świadomi problemu, w tym kierownik projektu, ale najwyraźniej nikomu nie przeszkadza (lub nie ma ciekawszych rzeczy do zrobienia). Moją pierwszą myślą było odrzucić to wszystko w niepamięć (po tym, jak kilka razy z rzędu ugryzły mnie przestarzałe „wskazówki”), ale przypuszczam, że to może być zbyt ekstremalne. Niektóre informacje są warte uwagi i czasami warto je dobrze przeczytać, ale problem jest nadal ten sam: **jak radzisz sobie z ich _"aktualnością"_?** Czy _jako__ jest to połączone z kodem źródłowym (więc po zaktualizowaniu wersji plik zostanie zaewidencjonowany, autor artykułu zostanie powiadomiony, że może potrzebować poprawić kod/artykuł)? Czy wyznaczona osoba „pilnuje” go w codziennych podstawach? Czy regularnie sprzątasz?


title: Składnia etykiet goto

text: W C, C++ i niektórych dialektach języka BASIC etykiety goto są deklarowane za pomocą składni `label:`. Pracuję nad językiem, który używa `name: type` jako składni dla deklaracji zmiennych, więc jeśli to możliwe, wolałbym użyć czegoś bardziej charakterystycznego dla etykiet. Znam lub w którymś momencie przelotnie znałem wiele języków, które używają tej składni dla deklaracji zmiennych, ale z góry nie mogę sobie przypomnieć ani jednego z nich, który nie zakazuje goto (nie chcę się spierać o to, czy to dobra lub zła decyzja projektowa, zaznaczam tylko, że miało to miejsce w tych przypadkach), więc próbuję dowiedzieć się, gdzie szukać precedensu na etykietach. Jakie inne formy składni zostały użyte dla etykiet goto? Czy są jakieś kryteria, które mogę przeoczyć przy wyborze jednego z nich? (Właśnie przypomniałem sobie, że Ada jest wyjątkiem. Ale używa `<<etykiety>>`, co nie pasuje do użycia tych symboli jako operatorów zmiany w stylu C.)


title: Jak nie pozwolić nikomu na przeglądanie elementów strony internetowej?

text: Zastanawiałem się nad stworzeniem niektórych funkcji jQuery, które będą używać ajax do sterowania mysql. Cały pomysł polega na tym, aby oddzielne pliki PHP (np. query.php, addRow.php, update.php i delete.php) dostarczały do nich dane poprzez zmienne `GET` takie jak `query.php?sql=SELECT * FROM table ` a następnie kontroluj je funkcjami jQuery AJAX, które zrobię później. Oczekiwany kod: $(element).click(function (e) { mysql.query("DELETE row FROM table WHERE name = 'Jan Kowalski'"); }); A następnie wyśle zapytanie przez AJAX i zapytanie zostanie wykonane. Problemem jest więc **BEZPIECZEŃSTWO** . Mam na myśli to, że każdy może po prostu zmienić javascript z inspektora przeglądarki lub użyć konsoli do kontrolowania moich baz danych. Co można zrobić z tym problemem. Czy mimo to nie wolno nikomu zmieniać elementów w konsoli przeglądarki. Jeśli nie, czy istnieje **WAŻNE** rozwiązanie tego problemu z bezpieczeństwem?


title: Programowanie sprzętu dla dzieci. Jaki jest dobry sposób na rozpoczęcie?

text: Zastanawiam się nad wprowadzeniem mojego 12-letniego syna do programowania sprzętowego. Zbudowałem robota z .NET Micro Framework i kiedy był zafascynowany sterowaniem robotem, jego oczy zaszkliły się, gdy próbowałem wyjaśnić, jak działa kod. I żeby być uczciwym, jest to dość skomplikowane dla początkującego, wymagające znajomości OOP, przerwań, itp. Więc zastanawiałem się, jaki jest najlepszy sposób dla dzieciaka, aby dostać się do programowania sprzętowego? Słyszałem o Basic Stamp, Arduino i Lego Mindstorms. Wygląda na to, że Arduino może zrobić prawie wszystko, ale jest to C i wygląda na to, że krzywa uczenia się jest naprawdę wysoka. Basic Stamp wydaje się interesujący i używa BASIC z tego, co widzę, ale nie mogę powiedzieć, czy może zrobić coś bardziej złożonego niż grzebanie w płytce prototypowej. Na przykład, czy mogę na nim zbudować serwer WWW? I wreszcie, Lego Mindstorms wygląda imponująco, ale nie rozumiem, jak jest zaprogramowany, jeśli chcesz zrobić coś po wyjęciu z pudełka. Pomysły?


title: Klasy statyczne i/lub singletony -- Ile potrzeba, aby stać się zapachem kodu?

text: W swoich projektach używam dość dużo klas statycznych. Są to zwykle klasy, które naturalnie wydają się pasować do jednego typu rzeczy. Wiele razy korzystam z klas statycznych, a ostatnio zacząłem używać singli. Ile z nich potrzeba, aby stać się zapachem kodu? Na przykład w moim ostatnim projekcie, który ma wiele klas statycznych, jest biblioteka uwierzytelniania dla ASP.Net. Używam statycznej klasy dla klasy pomocniczej, która naprawia kody błędów ASP.Net, dzięki czemu może być używana jak CustomErrorsFixer.Fix(Context); Lub moja klasa uwierzytelniania sama w sobie jest klasą statyczną //w begin_application Authentication.SomeState="blah" w global.asax; Authentication.SomeOption=prawda; //etc //w begin_request w global.asax Authentication.Authenticate(); Kiedy używanie klas statycznych lub singletonowych jest złe? Czy robię to źle, czy po prostu pracuję w projekcie, który z definicji ma bardzo mały stan związany z instancją? Jedyny stan na instancję, jaki posiadam, jest przechowywany w `HttpContext.Current.Items` w następujący sposób: /// <summary> /// Bieżący użytkownik zalogowany do żądania HTTP. Jeśli nie jest zalogowany użytkownik, będzie to wartość null. /// </summary> public static UserData CurrentUser{ get{ return HttpContext.Current.Items["fscauth_currentuser"] as UserData; //użyj HttpContext.Current jako małego miejsca do przechowywania danych statycznych dla tego żądania } private set{ HttpContext.Current.Items["fscauth_currentuser"]=wartość; } }


title: Problem ze zrozumieniem słowa "szew"

text: Czytam "Dependency Injection in .NET" Marka Seemanna (jest fantastyczne i musi mieć) i autor często używa słowa "SEAM", ale nie rozumiem, co to znaczy? Oto przykład użycia tego słowa: Rozdział 7 wyjaśnia, jak komponować obiekty w różnych konkretnych strukturach, takich jak ASP.NET MVC, WPF, WCF i tak dalej. Nie wszystkie frameworki obsługują DI równie dobrze, a nawet wśród tych, które to robią, sposoby, w jakie to robią, bardzo się różnią. Dla każdej struktury może być trudno zidentyfikować SEAM, który umożliwia DI w tych ramach. Jednak po znalezieniu SEAM masz rozwiązanie dla wszystkich aplikacji korzystających z tego konkretnego frameworka. W rozdziale 7 wykonałem tę pracę dla najpopularniejszych frameworków aplikacji .NET. Pomyśl o tym jako o katalogu SEAMS. Byłbym wdzięczny za pomoc w zrozumieniu tego słowa.


title: Utrzymanie organizacji podczas projektowania oprogramowania

text: Od lat staram się wymyślić dobry sposób na uporządkowanie ogromnych ilości notatek i materiałów, które generuję podczas projektowania, kodowania i testowania oprogramowania. Moje biurko jest zwykle przepełnione tonami kartek z nabazgranymi notatkami. Zwykle na tych arkuszach papieru rozrzucone są co najmniej następujące elementy: 1. Listy zadań do wykonania 2. Wymagane funkcje 3. Opisy błędów 4. Schematy blokowe programu 5. Wszelkiego rodzaju dokumenty projektowe i diagramy, od funkcji projektowanie do ogólnej architektury programu 6. Przypadki użycia 7. Lista przypadków testowych do zaprojektowania 8. Projektowanie pytań, na które należy odpowiedzieć w niektórych częściach programu Jestem całkiem dobry w kodowaniu, ale nie nauczyłem się zarządzać moimi projektami jeszcze, ponieważ wciąż jestem uczniem w szkole. Chcę się jednak nauczyć tych umiejętności, ponieważ wiem, że będę ich potrzebować w przyszłych pracach, które wymagają większych umiejętności organizacyjnych. Jakich technik, programów, metodologii itp. mogę użyć, aby lepiej zorganizować się podczas projektowania oprogramowania? Jeśli proponujesz jakieś programy, wolałbym wolne oprogramowanie, ponieważ jestem biednym studentem. :) Z góry dziękuję!


title: Jak debugowali błędy segmentacji przed chronioną pamięcią?

text: Teraz, gdy popełnię błąd programistyczny ze wskaźnikami w C, otrzymuję niezły błąd segmentacji, mój program się zawiesza, a debugger może nawet powiedzieć mi, gdzie poszło nie tak. Jak to zrobili w czasach, gdy ochrona pamięci nie była dostępna? Widzę programistę DOS, który bawi się i zawiesza cały system operacyjny, gdy popełnił błąd. Wirtualizacja nie była dostępna, więc jedyne, co mógł zrobić, to zrestartować i spróbować ponownie. Czy naprawdę tak poszło?


title: Gdzie należy umieścić stałe i dlaczego?

text: W naszych przeważnie dużych aplikacjach zwykle mamy tylko kilka lokalizacji dla stałych: * Jedna klasa dla GUI i wewnętrznych stałych (tytuły stron kart, tytuły pól grupowych, współczynniki obliczeniowe, wyliczenia) * Jedna klasa dla tabel i kolumn bazy danych (ta część jest wygenerowany kod) plus czytelne dla nich nazwy (przypisane ręcznie) * Jedna klasa dla komunikatów aplikacji (logowanie, skrzynki komunikatów itp.) Stałe są zwykle rozdzielone na różne struktury w tych klasach. W naszych aplikacjach C++ stałe są zdefiniowane tylko w pliku .h, a wartości są przypisane w pliku .cpp. Jedną z zalet jest to, że wszystkie struny itp. znajdują się w jednym centralnym miejscu i każdy wie, gdzie je znaleźć, gdy coś musi zostać zmienione. Wydaje się, że szczególnie podoba się to kierownikom projektów, ponieważ ludzie przychodzą i odchodzą, dzięki czemu każdy może zmienić tak trywialne rzeczy bez konieczności zagłębiania się w strukturę aplikacji. Możesz także łatwo zmienić jednocześnie tytuł podobnych pól grupowych / stron kart itp. Innym aspektem jest to, że możesz po prostu wydrukować tę klasę i przekazać ją nie-programiście, który może sprawdzić, czy napisy są intuicyjne, czy komunikaty do użytkownika są zbyt szczegółowe lub zbyt mylące itp. Widzę jednak pewne wady: * Każda pojedyncza klasa jest ściśle powiązana z klasami stałych * Dodanie/usunięcie/zmiana nazwy/przeniesienie stałej wymaga rekompilacji co najmniej 90% aplikacji (Uwaga: zmiana wartości nie wymaga, przynajmniej w przypadku C++). W jednym z naszych projektów C++ z 1500 klasami oznacza to około 7 minut czasu kompilacji (przy użyciu prekompilowanych nagłówków; bez nich około 50 minut) plus około 10 minut linkowania do pewnych bibliotek statycznych. * Tworzenie wersji zoptymalizowanej pod kątem szybkości za pomocą kompilatora programu Visual Studio zajmuje do 3 godzin. Nie wiem, czy źródłem jest ogromna ilość relacji klasowych, ale równie dobrze może być. * Wpadasz w tymczasowe ciągi kodowania na sztywno bezpośrednio do kodu, ponieważ chcesz coś szybko przetestować i nie chcesz czekać 15 minut tylko na ten test (i prawdopodobnie na każdy kolejny). Każdy wie, co dzieje się z myślami „to później naprawię”. * Ponowne użycie klasy w innym projekcie nie zawsze jest takie proste (głównie z powodu innych ścisłych sprzężeń, ale obsługa stałych nie ułatwia tego). Gdzie można przechowywać takie stałe? Jakie argumenty przyniósłbyś, aby przekonać swojego kierownika projektu, że istnieją lepsze koncepcje, które również odpowiadają wymienionym powyżej zaletom? Zachęcamy do udzielenia odpowiedzi specyficznej lub niezależnej od C++. PS: Wiem, że to pytanie jest trochę subiektywne, ale szczerze mówiąc, nie znam lepszego miejsca niż ta strona na tego rodzaju pytania. ### Aktualizacja tego projektu Mam nowinki na temat czasu kompilacji: podążając za postami Caleba i gbjbaanb, podzieliłem mój plik ze stałymi na kilka innych plików, kiedy miałem czas. Ostatecznie podzieliłem też swój projekt na kilka bibliotek, co było teraz możliwe o wiele łatwiej. Kompilacja tego w trybie wydania pokazała, że automatycznie wygenerowany plik, który zawiera definicje bazy danych (tabele, nazwy kolumn i więcej - ponad 8000 symboli) i buduje pewne hasze, spowodował ogromne czasy kompilacji w trybie wydania. Dezaktywacja optymalizatora MSVC dla biblioteki, która zawiera stałe DB, pozwoliła nam teraz skrócić całkowity czas kompilacji Twojego projektu (kilka aplikacji) _w trybie wydania_ z maksymalnie 8 godzin do mniej niż jednej! Musimy jeszcze dowiedzieć się, dlaczego MSVC ma takie trudności z optymalizacją tych plików, ale na razie ta zmiana zmniejsza presję, ponieważ nie musimy już polegać tylko na kompilacjach nocnych. Ten fakt – i inne korzyści, takie jak mniej ciasne sprzęganie, lepsze możliwości ponownego użycia itp. – również pokazały, że spędzanie czasu na dzieleniu „stałych” nie było wcale takim złym pomysłem ;-)


title: Jak pracodawca niezwiązany z grami postrzegałby kogoś, kto tworzy gry?

text: Tak jak planuję rozbudować swoje portfolio o gry. Jeśli nie dostanę pracy w grach lub jeśli szczerze nie chcę, to jak pracodawca, który nie chce mieć nic wspólnego z grami, postrzega mnie jako potencjalnego przyszłego pracownika? Czy uzna to za imponujące i rozważy mnie? A może pomyślałby, że to miłe, ale nieistotne, a przez to nieco szkodliwe?


title: Poprawa wydajności procesu importu db

text: Mam program w Microsoft Access, który przetwarza tekst, a także wstawia dane do bazy danych MySQL. Ta operacja trwa do 30 minut lub mniej. Przetłumaczyłem go na VB.NET i ukończenie zajmuje 2 godziny. Program wygląda tak: 1. Plik tekstowy zawiera pojedyncze przesunięcie od odpowiedniej osoby, zawiera jego identyfikator, czas i datę przesunięcia w maszynie oraz wskaźnik, czy jest to czas wejścia lub limit czasu. 2. Przetwarzam ten tekst, segreguję informacje i wstawiam czas wejścia i przerwy w rzędzie. 3. Sprawdzam również, czy w bazie danych nie ma podwójnych wystąpień. 4. Po sprawdzeniu, po prostu łączę czas wejścia i limitu czasu odpowiedniej osoby tylko w jednym wierszu. Ten proces trwa 2 godziny w VB.NET, biorąc pod uwagę, że mam tabelę do porównania, która zawiera ponad 600 000 wierszy. ~~Teraz czytam w internecie, że Python jest najlepszy w przetwarzaniu tekstu, mam już test, ale wątpię w działanie bazy danych. Jak myślisz, jaki jest najlepszy język programowania dla tego rodzaju problemu?~~ Jak mogę przyspieszyć ten proces? Moim pierwszym pomysłem było użycie Pythona zamiast VB.NET, ale ponieważ ludzie tutaj mówią mi na PSE, że to najprawdopodobniej nie pomoże, szukam różnych rozwiązań. Oto link do testu, który wykonałem.


title: Czy rozpowszechnianie kodu za pomocą refaktoryzacji komentarzy to dobry pomysł?

text: Pracuję nad projektem "spaghetti-code" i podczas gdy naprawiam błędy i implementuję nowe funkcje, dokonuję również refaktoryzacji, aby kod był testowalny. Kod jest często tak ściśle powiązany lub skomplikowany, że naprawienie małego błędu spowodowałoby przepisanie wielu klas. Postanowiłem więc narysować gdzieś w kodzie linię, w której przestanę refaktoryzację. Aby to wyjaśnić, wstawiam w kodzie kilka komentarzy wyjaśniających sytuację, takich jak: class RefactoredClass { private SingletonClass xyz; // Wiem, że SingletonClass to Singleton, więc nie musiałbym go tutaj przekazywać. // Jednak chciałbym się go w przyszłości pozbyć, więc jest przekazywany jako parametr // tutaj, aby ułatwić tę zmianę później. public RefactoredClass(SingletonClass xyz) { this.xyz = xyz; } } Albo kolejna bułka z masłem: // To może być dobry kandydat do refaktoryzacji. Struktura wygląda następująco: // Version String // | // +--> ... // | // +--> ... // | // ... i tak dalej ... // Map map = new HashMap<String, Map<String, Map<String, List<String>>>>(); Czy to dobry pomysł? O czym powinienem pamiętać, robiąc to?


title: ogólne pytanie dotyczące rozwoju e-commerce

text: Mam nadzieję, że zadam to pytanie tutaj. Miałem zapytać na stackflow. Bardzo ogólne pytanie. Istnieje wiele internetowych aplikacji e-commerce, takich jak prostores, eshop, secureabacus.com itp. Wygląda na to, że wiele z nich ma już gotowy szablon (z kilkoma opcjami). Zastanawiam się tylko, czy istnieją programiści, którzy oferują niestandardowe aplikacje e-commerce, zarówno dla b2c, jak i b2b? Dziękuję


title: Potrzebna pomoc w przekwalifikowaniu do języka Java

text: Średniopoziomowy programista PHP tutaj. Planuję uczyć się Javy. Znam już podstawowe pojęcia, takie jak MVC, ORM itp., więc nie jestem początkującym programistą. W związku z tym szukam najlepszego sposobu na rozpoczęcie poznawania niuansów języka, w którym nie mam doświadczenia. Na początek zacząłem kodować prosty mechanizm logowania/wylogowania za pomocą JSP i cieszyłem się, że robię przyzwoite postępy. Tak więc moje pytanie do wszystkich guru Javy: Jakie aspekty Javy powinienem najpierw zagłębić? Obecnie planuję kontynuować prostą aplikację w JSP, a następnie wprowadzić Spring i Hibernate przed przejściem na współbieżność i Swing. Jeśli musiałbyś ponownie nauczyć się języka Java od podstaw, jaką ścieżkę poprzez różne technologie i koncepcje najlepiej wybrać?


title: Czy publiczne biblioteki kodu, które napisałem, powinny pozostać bezpłatne i otwarte po użyciu ich w umowie / produkcie komercyjnym?

text: Napisałem małą bibliotekę zajęć w moim preferowanym języku (PHP, ale to nie ma znaczenia) i zazwyczaj używam ich w większości moich projektów. Do tej pory projekty były osobiste lub były drobiazgami w mojej pracy w niepełnym wymiarze godzin, które tak naprawdę nie były produktem komercyjnym. Żadna z tych rzeczy nie martwi mnie, jeśli chodzi o swobodę późniejszego wykorzystania tych samych bibliotek. [W tej notatce, czy powinienem się martwić o pracę w niepełnym wymiarze godzin? Czy może to spowodować później problemy z moimi bibliotekami?] Wkrótce jednak spodziewam się, że przystąpię do poważniejszej pracy niezależnej/kontraktowej, w której bez wątpienia wykorzystam biblioteki, które napisałem. Czy muszę się upewnić, że umowa lub warunki pracy wyraźnie pozwalają mi na użycie mojego poprzedniego kodu w projekcie i - co ważniejsze - **po** projekcie, czy też historia Github pokazuje, że został opracowany na długo przed jakąkolwiek umową wystarczająco? Jakie są problemy prawne z takim kodem (biblioteki, ponowne wykorzystanie kodu, open source, itp.)?


title: Pytanie dotyczące używania różnych warstw dostępu do danych dla różnych dostawców baz danych

text: Mam pytanie, czy powinniśmy używać różnych warstw dostępu do danych dla różnych dostawców baz danych, takich jak SQL Server, MySQL Server, Oracle itp. Czy nie lepiej używać pojedynczej warstwy dostępu do danych z ORM lub mapowania, aby specyficzna baza danych działania są realizowane przy mniejszej ilości kodowania niż pełne powielanie kodu w różnych warstwach dostępu do danych. Podaj swoje sugestie wraz z referencjami do wykorzystania w przypadku języka programowania C# na platformie .NET.


title: Dlaczego w Pythonie nie ma jawnych modyfikatorów dostępu:

text: Jeśli „jawne jest lepsze niż niejawne”, dlaczego w Pythonie nie ma jawnych modyfikatorów dostępu: publicznych, chronionych, prywatnych itp.? Wiem, że chodzi o to, aby programista wiedział, co ma zrobić dzięki podpowiedzi - nie ma potrzeby używania 'brute force'. Ale „enkapsulacja” lub „ukrywanie informacji” IMO to nie tylko powstrzymywanie ludzi, to kwestia organizacji i struktury: warstwy programistyczne powinny mieć samodefiniujące się, wyraźnie odgraniczone zakresy i granice, tak jak robią to systemy fizyczne. Czy ktoś może mi pomóc z solidnym wyjaśnieniem, dlaczego ograniczenia dostępu są domniemane, a nie jawne w Pythonie, języku, który poza tym wydaje się bliski ideału? **Edytuj: Do tej pory widziałem 3 proponowane odpowiedzi i zdałem sobie sprawę, że moje pytanie składa się z 2 części:** 1. Dlaczego nie ma słów kluczowych, na przykład private def myFunc(): dostuff.... zamiast IMO brzydkie i trudne do wpisania podkreślenia. Ale nie to jest ważne. 2. Co ważniejsze: dlaczego te modyfikatory dostępu są tylko „zaleceniami” lub wskazówkami i nie są wymuszane. Trudno będzie później zmienić? Bardzo łatwo jest zmienić „chroniony” na „publiczny” – a jeśli masz zawiły łańcuch dziedziczenia, który to utrudnia, masz kiepski projekt – Twój projekt powinien być dopracowany, a nie polegać na funkcji języka, która ułatwia pisanie słabo ustrukturyzowany kod. Kiedy modyfikatory dostępu są wymuszane, Twój kod jest automatycznie podzielony na sekcje - WIESZ, że niektóre segmenty są poza zakresem, więc nie musisz się nimi zajmować, chyba że i kiedy jest to konieczne. A jeśli Twój projekt nie jest dobry i ciągle przenosisz rzeczy do i z różnych zakresów, język może pomóc Ci uporządkować swoje działania. Chociaż bardzo kocham Pythona, uważam, że ten drugi punkt jest poważnym brakiem. I jeszcze nie widzę na to dobrej odpowiedzi.


title: Ponowne użycie kodu: Ponowne użycie złożonej metody w porównaniu z dobieraniem części

text: Obecnie mam do czynienia z sytuacją, w której nie jestem do końca pewien, jak najlepiej postępować. **Tło** Planuję nowy proces importu danych, który zaimportuje informacje kadrowe i płacowe z pliku tekstowego utworzonego przez inny system. Mamy już proces importu danych, o których mowa, ale format pliku importu zmieni się całkowicie. Tak więc, podczas gdy odczytywane dane pozostaną takie same (nazwiska pracowników, stopnie płac, przeszłe wypłaty wynagrodzeń...), w nowym formacie pliku są one wyrażane bardzo różnie (inny format, różne pola, inne kodowanie danych, inne reprezentacja w szczególnych przypadkach, takich jak urlop bezpłatny czy zmiany wynagrodzenia z mocą wsteczną). **Jak wykorzystać ponownie?** Teraz chciałbym ponownie wykorzystać jak najwięcej istniejącego kodu importu. Problem polega na tym, że większość istniejących klas i metod ma części, które można ponownie wykorzystać (głównie te, które zajmują się zapisywaniem danych do naszej własnej bazy danych, która się nie zmieniła), ale ma też zakodowanych wiele szczegółów starego formatu importu, więc bezpośrednie ponowne wykorzystanie jest niemożliwe. Widzę teraz dwie alternatywy: 1. spróbuj zrefaktoryzować i przerobić istniejący kod, aby był bardziej niezależny od konkretnego formatu importu, tak aby mógł obsługiwać zarówno stary, jak i nowy format 2. wybierz najlepsze części starego kodu, które nadal mają zastosowanie ( wyodrębnij je do oddzielnych metod lub podobnych) i użyj ponownie **Mój problem** Trudno mi ocenić, które podejście jest najlepsze. Z jednej strony uważam, że ponowne wykorzystanie jest ważne, a 1) wydaje mi się, że pozwala mi na ponowne wykorzystanie. Z drugiej strony, patrząc na kod mam przeczucie, że co najmniej 30%-50% kodu już się nie sprawdza, więc obawiam się, że 1) może być dużo pracy refaktoryzacji, a w końcu bym używaj tylko trochę więcej niż przy podejściu 2). Problem w tym, że (czuję ), że będę musiał zdecydować z góry, ponieważ trudno jest zmienić podejście po rozpoczęciu: jeśli zacznę od 1), a po kilku dniach refaktoryzacji znajduję to małe prawdziwe „mięso” pozostaje w funkcjach uogólnionych, muszę wyrzucić wszystkie refaktoryzacje i zacząć od nowa z osobnym kodem, który w razie potrzeby wywołuje stary kod. **Więc jak radzisz sobie z rozwiązywaniem nowych problemów, gdy masz kod, który jest zasadniczo podobny, ale różni się w wielu szczegółach od tego, czego potrzebujesz? Jak oceniasz, które podejście do ponownego wykorzystania kodu ma większy sens?**


title: Framework / platforma dla grupy użytkowników .NET

text: Przygotowuję się do stworzenia grupy użytkowników dotnet. Jednym z kroków jest posiadanie strony internetowej do: * Wymiany i dyskusji między członkami za pomocą forum (lub po prostu listy mailingowej?). * Udostępnij wspólny kalendarz * Przygotuj ankietę do jej otwarcia (pytaj ludzi, czego oczekują) * Zaprezentuj działania odwiedzającym * Bądź wizytówką zachęcającą ludzi do przyjścia. * ... Ponieważ jestem programistą/trenerem SharePoint, moją pierwszą myślą było użycie SharePoint. Jest to jednak złe dla forum, a dostosowywanie go (aby było wizytówką) wymaga dużo pracy. Przejrzałem istniejące grupy kropek. Wiele z nich bazuje na atomie Dot net. Jednak DNN wydaje się nieco staroświeckie. Czy mam rację ? Może super aplikacja asp.net MVC. Dobrym rozwiązaniem może być użycie na początek Orchard lub Umbraco. Ale wydaje się, że brakuje im funkcji społecznościowych... Gdybyś został poproszony o stworzenie strony internetowej dla grupy użytkowników dot net, jakiego frameworka/platformy/narzędzia byś użył?


title: Jakie problemy rozwiązuje MapReduce?

text: Czytałem o MapReduce od jakiegoś czasu — ale nie mogę zrozumieć, w jaki sposób ktoś podjąłby decyzję o użyciu (lub nieużywaniu) MapReduce. Chodzi mi o to, jakie są wzorce problemów, które sygnalizują, że można użyć MapReduce.


title: czy python naprawdę musi rozróżniać krotki, listy, dyktanda, uporządkowane dykty i zestawy?

text: uczę się Pythona w ciągu ostatniego miesiąca. Podoba mi się wiele rzeczy związanych z językiem, ale uważam, że rozróżnienie między krotkami, listami, wersetami, werdyktami uporządkowanymi i zestawami jest kłopotliwe. Wiem, że każdy z nich ma swoje własne korzyści i kompromisy w zakresie wydajności, ale wydaje mi się, że o wiele prościej byłoby połączyć je wszystkie w jedną strukturę danych – może dykt, ale który zachowuje pierwotnie określoną kolejność – prawie jak json .. .czy byłby to ogromny spadek wydajności, czy też optymalizator mógłby w pełni zrekompensować, aby utrzymać równą wydajność? Domyślam się, że odpowiedź brzmi, że nie dałoby się tego zrobić prościej i efektywniej w żaden inny sposób - w przeciwnym razie język byłby już napisany w ten sposób. w takim przypadku, czy ktoś może wyjaśnić, dlaczego nie? również, czy byłyby jakieś inne wady zastępowania krotek, list, dyktatów, uporządkowanych dyktatów i zestawów z pojedynczą strukturą danych typu json?


title: Jak odpowiadasz na prośbę o „informacje kontaktowe w nagłych wypadkach” na czas wakacji?

text: Chcę wyjechać na wakacje i w ogóle nie myśleć o pracy, ale chcą, abym podał im numer kontaktowy na wypadek sytuacji awaryjnej (awaria serwera, awarie usługi internetowej itp.). Obawiam się, że zostanie nadużyty (skontaktują się ze mną na przykład przed próbowaniem wszystkiego), ale myślę też, że jeśli jestem na wakacjach, nie powinno mi się przeszkadzać, nawet jeśli jest awaria. Czy ktoś ma doświadczenie w takich sytuacjach? Jakie jest taktowne podejście? Jakieś kreatywne rozwiązania?


title: jak skutecznie zarządzać wieloma wystąpieniami jednej aplikacji

text: Stworzyłem aplikację internetową dla klienta, która jest na żywo dla jego klientów. Ostatnio aplikacja została sprzedana w taki sposób, że jest replikowana na inne nazwy domen, więc istnieją 4+ wystąpienia aplikacji, które mam rozwijać i utrzymywać. W tej chwili każda kopia aplikacji ma własne repozytorium SVN i jeśli chodzi o wprowadzanie zmian w aplikacji, które mają wpływ na wszystkie instancje, aktualizuję jedną, a następnie używam Beyond Compare, aby scalić zmiany z innymi kopiami. Czy lepszym rozwiązaniem byłoby użycie oddziałów svn do utrzymania podstawowego systemu i łączenie się z oddziałami podrzędnymi i odwrotnie w przypadku błędów? W każdej aplikacji mogą być wprowadzone zmiany, które są specyficzne dla klienta, takie jak logo, kolory itp. Czy gałęzie to najlepszy sposób, aby przejść lub nadal mieć każdy w swoim własnym repozytorium i użyć BC do scalenia w razie potrzeby?


title: Czy nadal istnieje potrzeba pisania SQL?

text: Przy tak wielu narzędziach ORM dla większości nowoczesnych języków, czy nadal istnieje przypadek użycia do pisania i wykonywania SQL w programie, w języku/środowisku, które je obsługuje? Jeśli tak, dlaczego? **Dla jasności:** nie pytam o to, czy programiści muszą znać SQL, czy też powinienem mieć narzędzie SQL na swoim pulpicie. Pytam konkretnie, dlaczego mogę mieć to _w kodzie_ (lub konfiguracji, czy cokolwiek) w przeciwieństwie do ORM-a.


title: Czy powinieneś kiedykolwiek ponownie oszacować historyjki użytkowników?

text: Mój obecny projekt ma 'dyskusję', która jest podzielona na środek- _ „ta historia jest bardziej złożona niż początkowo sądziliśmy, powinniśmy ponownie oszacować” _ a _ „nigdy nie należy ponownie szacować, ponieważ zawsze oceniasz tylko w górę i nigdy w dół"_. Czy ktoś może rzucić trochę światła na to, czy kiedykolwiek powinieneś ponownie oszacować? IMHO Wyobrażam sobie, że możesz przywołać zupełnie nową kartę dla nowego wymagania lub historii, ale cofanie się i ponowne oszacowanie pozycji zaległości wydaje się wypaczać koncepcję względnego rozmiaru i tylko „zawyża” twoje zaległości.


title: Jeśli pracownik jest certyfikowany przez Oracle for Java, czy cała firma może być wtedy nazywana certyfikowaną – czyli jak to działa?

text: Dwa pytania: 1) Powiedzmy, że mam jednoosobową firmę i osobiście posiadam certyfikat Java wydany przez Sun/Oracle. Czy w takim razie mogę powiedzieć, że moja firma jest również certyfikowana, aby pomóc mi zdobyć więcej klientów? 2) Co jeśli duża firma zatrudniająca 50 pracowników i co najmniej jeden posiada certyfikat Java firmy Sun/Oracle. Czy można powiedzieć, że firma posiada również certyfikat Java? Jak to działa?


title: Polimorfizm i potencjalne problemy z bezpieczeństwem

text: Właśnie przeczytałem artykuł w MSDN o przyczynach deklarowania klas jako „zapieczętowanych”. W ostatnim akapicie Eric Lippert mówi: > 4) Bezpieczne. cały sens polimorfizmu polega na tym, że możesz przekazywać > obiekty, które wyglądają jak Zwierzęta, ale w rzeczywistości są Żyrafami. **Istnieją > potencjalne problemy z bezpieczeństwem**. Próbowałem poszukać w Google na ten temat, ale nie udało mi się znaleźć nic innego niż tutoriale OOP, więc jeśli ktoś mógłby mi wskazać właściwy kierunek, a nawet powiedzieć kilka słów na ten temat, to byłoby wspaniale. Dziękuję.


title: Aplikacje open source o wysokiej wydajności i/lub działające w czasie rzeczywistym

text: Które projekty Java typu open source znasz jako **wysoka wydajność** czy **wydajność w czasie rzeczywistym**? Bardzo się starałem znaleźć je na github lub google, ale nie mogłem znaleźć odpowiedniego. Chcę się uczyć z tych projektów, więc nie będę jako nowicjusz na moich rozmowach kwalifikacyjnych ;) Póki co mam zamiar trzymać się projektu Play Framework. Czy są lepsze opcje? PS Widziałem możliwe duplikaty, ale szukam aplikacji o dużym obciążeniu. Jak piszą ludzie w Deutsche Bank.


title: Czy SVN nie powinien mnie ostrzegać, jeśli mam zamiar zatwierdzić pliki, które mają nowsze wersje w repozytorium?

text: W pracy wykorzystujemy SVN i PhpStorm. Ostatnio nasz zespół trochę się rozrósł, więc nad tym samym projektem pracuje kilka osób, czasem nad tym samym plikiem. Napotkaliśmy problem polegający na tym, że ludzie nie aktualizują się przed zatwierdzeniem i nadpisaniem zmian wprowadzonych przez kogoś innego. To jest kłopot. Nie znam zbyt dobrze SVN, ale wygląda na to, że to nawet nie powinno być możliwe. Co robimy źle?


title: Jak reprezentować wyliczony termin jest rozsądny?

text: Jako Główny Programista do moich obowiązków należy obliczanie terminów realizacji projektów. Aby to zrobić, rozmawiam z powiązanymi graczami zespołowymi i obliczam szacowany termin. Czasami dostałem przestraszony głos od CTO, że przewidywany termin jest za długi. Potem muszę skrócić termin. Przy krótszym terminie programiści muszą pracować z dodatkową presją. Jak mogę przedstawić (punkty) CTO, że obliczony termin jest rozsądny?


title: W jakich sytuacjach używanie kodu open source do projektu korporacyjnego jest złym pomysłem?

text: Czy są sytuacje, w których korzystanie z kodu projektu open source może nie być dobrym pomysłem, nawet jeśli Twoja firma może Ci na to pozwolić? Niektóre przypadki, które moim zdaniem mogą być prawidłowe, to: * Kod może być zaimplementowany w różnych językach. * Nie jest przenośny * Może potrzebować innych bibliotek o zamkniętym kodzie źródłowym Jakie mogą być inne powody?


title: trójskładnikowy czy coś podobnego do wyboru funkcji?

text: Wysłałem to pytanie na stackoverflow i otrzymało słaby odbiór. W rzeczywistości problemy, z którymi się borykam, są niewielkie i każde obejście można uznać za niepraktyczne. Uważam jednak, że może to być przedmiotem ogólnego zainteresowania w abstrakcyjnej dziedzinie informatyki, więc zamierzam ją tutaj wypróbować. Pracuję z automatycznym testowaniem Drupala w PHP. Jest to klasa, która ma dwie metody, którymi się interesuję: `pass()` i `fail()`. Każda z nich generuje osobną linię na stronie wyników, wskazującą, czy dana operacja zakończyła się powodzeniem, czy nie, np. if ( $wartość == "oczekiwana_wartość" ) { $this->pass("Nazwa testu"); } else { $this->fail("Nazwa testu"); } (Drupal robi to w ten sposób, ponieważ w wynikach możesz zobaczyć „Nazwa testu” na zielonym pasku, jeśli zakończył się pomyślnie, i na czerwonym, jeśli się nie powiódł. Innymi słowy „Testowanie funkcji A: nie powiodło się ” lub „Test funkcji A: zaliczony”. Oczywiście możesz umieścić tam dwie różne wiadomości, ale w mojej sytuacji chcę umieścić tę samą wiadomość). Powtarzam ten sam komunikat dwa razy. Wydaje mi się, że powinien być sposób na wyrażenie tego, kiedy deklaruję przesłanie tylko raz. Oczywiście mógłbym umieścić go w zmiennej, ale to zajmuje dodatkowe miejsce i przekazuję go również dwukrotnie. Chciałbym zrobić coś takiego jak przypisanie trójskładnikowe, ale zamiast tego decyduję, którą funkcję wywołać. Czy istnieje sposób na zdefiniowanie tej logiki przy jednorazowym wyrażeniu „Nazwy testu”? Coś takiego: $funkcja = ($wartość == "oczekiwana_wartość") ? "zaliczenie" : "niepowodzenie" ; $this->$function("Nazwa testu"); Czy to najbardziej zwięzły, elegancki sposób, w jaki mogę wyrazić tę logikę? Próbowałem $this->(($value == "expected_value") ? "pass" : "fail")("Name of Test"); Ale mam błąd analizy. Czy istnieje sposób na sprowadzenie tego do jednej linii, jak przypisanie trójskładnikowe? **Edytuj** Oto najlepsze sformułowanie mojego pytania do tej pory: „Jakiej składni mogę użyć w dowolnym języku lub pseudokodzie, aby wyrazić to bez dwukrotnego wypowiadania „Nazwa testu”?” Czuję, że powinienem być w stanie wyrazić tę logikę bez dwukrotnego wypowiadania "Nazwa testu" (w dowolnym miejscu - w tym w obrębie innej funkcji, którą wywołuję w innym miejscu kodu). Wygląda na to, że PHP nie pozwala mi tego wyrazić w ten sposób, więc szukam przykładów w innych językach (a ludzie publikowali już przykłady w C, javascript i python), które pozwolą ci to wyrazić zwięźle bez powtarzania się.


title: Czy 70% programów/aplikacji biznesowych/coś jest opartych na języku COBOL?

text: Słyszałem tę liczbę, a szybkie wyszukiwanie w google ujawnia całe mnóstwo reklamowania tej liczby i absolutnie zerowych danych (szczerze większość artykułów promujących COBOL brzmi jak 95% propoganda). Być może jest to prawda w bardzo ograniczonym kontekście oprogramowania bankowego czy czegoś takiego, ale przy milionach aplikacji zakodowanych w dziesiątkach języków i prawie zerowych nowych projektach COBOL nie widzę, jak to jest możliwe. Czy to mit z lat 70. (kiedy wydawałoby się to całkowicie prawdopodobne), czy istnieje jakaś ograniczona definicja, w której jest to rzeczywiście prawda? Wiem, że wiele jest nadal utrzymywanych i jestem pewien, że duży procent _firm_ ma przynajmniej jeden program w języku COBOL, ale te niewidoczne 70% wydaje się absurdalne.


title: Odbicie: Czy korzystanie z odbicia nadal jest „złe” czy „wolne”? Co zmieniło się wraz z refleksją od 2002 roku?

text: Zauważyłem, że kiedy mam do czynienia z wyrażeniami lub drzewami wyrażeń, często używam refleksji, aby ustawić i uzyskać wartości we właściwościach i co ty. Przyszło mi do głowy, że użycie refleksji wydaje się być coraz bardziej powszechne. Rzeczy takie jak adnotacje danych do walidacji, duże ORM atrybutów itp. Zastanawiam się: **Co się zmieniło od czasu, gdy lata i lata temu, kiedy mówiono mi, abym unikał refleksji, jeśli to w ogóle możliwe?** I co z tego, jeśli coś się zmieniło? zmieniony? Czy to tylko prędkość maszyn? Czy wprowadzono zmiany w ramach przyspieszających refleksję? A może tak naprawdę nic się nie zmieniło? Czy używanie refleksji nadal jest „złe” lub „wolne”?


title: Bazy danych NoSql - Przyzwoity samouczek/książka, która obejmuje koncepcje

text: Szukam dobrego zasobu do nauki pojęć stojących za bazami danych NoSql. Większość rzeczy, które znajduję, jest powiązana z konkretną technologią (MongoDb, CouchDB itp.), ale wolę wszystkie koncepcje stojące za NoSql, zamiast skupiać się na określonym obszarze (niektóre to grafowe DB, niektóre klucz-wartość itp.). Czy możesz podzielić się swoim doświadczeniem i wskazać mi dobry zasób?


title: Prawidłowa definicja terminu „golenie jaka”

text: Wikisłownik ma dwie różne definicje: > 1. Każda pozornie bezużyteczna czynność, która, pozwalając ci przezwyciężyć > pośrednie trudności, pozwala rozwiązać większy problem. > 2. Faktycznie bezużyteczna czynność, którą wykonujesz, która wydaje się ważna, gdy > świadomie lub nieświadomie odkładasz na później większy problem. > Ten post definiuje to jako: > golenie jaka to to, co robisz, kiedy robisz jakieś głupie, nieporęczne > małe zadanie, które nie ma oczywistego związku z tym, czym powinieneś być > pracujesz, ale jest łańcuchem dwunastu związek przyczynowy łączy to, co robisz, z pierwotnym metazadaniem. Osobiście wolę ostateczną definicję, ponieważ zawiera ona słowo „skrzypstwo”, które moim zdaniem doskonale opisuje typowe zadanie golenia jaka. Jaka jest najlepsza definicja, z którą się spotkałeś lub możesz podać?


title: Czy istnieje obecnie jakiś nowoczesny, ustandaryzowany test umiejętności dla inżynierii oprogramowania?

text: ## Tło Jestem pracującym inżynierem oprogramowania, który szuka nowego kontraktu na przyszły rok. W moich poszukiwaniach znoszę kilka absurdalnych technicznych wywiadów, na co wskazuje to popularne pytanie, które zadałem dzisiaj. Nawet jeśli zadawane mi pytania nie zawsze były absurdalne, byłbym zmęczony odpowiadaniem na nie wiele razy w przypadku różnych możliwości zawarcia umowy. To sprawiło, że pomyślałem, że posiadanie ustandaryzowanego egzaminu, który mogliby zdać specjaliści od oprogramowania, zapewniłoby wspólną kartę wyników, do której mogliby się odnieść ankieterzy zamiast absurdalnych technicznych pytań do rozmowy kwalifikacyjnej (tj. nerd hazing). ## Pytanie Czy istnieje znormalizowany test umiejętności inżynierii oprogramowania (SEAT??) dostępny dla pracujących profesjonalistów? Jeśli nie ma takiego egzaminu, jakie pytania lub tematy należy omówić? ## Dodatkowa myśl Proponując pytanie lub temat, należy pamiętać, aby skoncentrować się na pytaniach lub tematach, które byłyby istotne dla współczesnych praktyk rozwojowych i realistycznych potrzeb pracowników, ponieważ byłby to punkt standardowego testu umiejętności. Innymi słowy, żadnych pytań o **przemierzanie klaunów**.


title: Uzasadnienie nauki/wdrażania nowszych technologii Microsoft

text: Pracuję w dużej organizacji opieki zdrowotnej jako programista średniego szczebla. Posiadam ponad 10 letnie doświadczenie w branży IT z wykorzystaniem technologii Microsoft (ASP.NET & SQL Server). Kiedy chodzę na konferencje, code campy, spotkania grup użytkowników .net, słyszę o wszelkiego rodzaju nowych narzędziach i technologiach: MVC, LINQ, Entity Framework, WCF Web Services itp. Myślę, że można powiedzieć, że czuję się komfortowo strefa przy użyciu tych samych starych rzeczy z asp.net 2.0. Używam wpisywanych zestawów danych dla mojej warstwy dostępu do danych. Korzystam z formularzy internetowych i bogatych w funkcje kontrolek serwera ze stronami wzorcowymi. Wiem, jak używać zwykłego starego SQL i tworzyć zapytania w moich wpisanych zestawach danych, aby uzyskać dane, których potrzebują moje aplikacje. W całej mojej karierze zawsze jestem wyczulony na to, aby mój zestaw umiejętności nie stał się przestarzały. To, z czego obecnie korzystam, działa dobrze, a mój czas programowania jest szybki. Obawiam się jednak, że gdybym został zwolniony, w wywiadach zapytano by mnie, ile aplikacji MVC napisałem. Lub jak się czuję z usługami sieci Web LINQ lub WCF. Wiem, że nie ma znaczenia, ile konferencji, książek czy filmów obejrzę na temat jakiejś nowej technologii… muszę ją wdrożyć/wykorzystać, inaczej po prostu nie zapadnie. Również menedżerowie, którzy przeprowadzają wywiady, nie dbają ile ktoś czyta o czymś, tylko rzeczywiste użycie i doświadczenie z technologią. Mam nowy projekt do napisania. Poszedłem do mojego przełożonego i poprosiłem o dodatkowy czas na projekt związany z nauką/wdrożeniem technologii, której mogę nie znać. Nasza organizacja zachęca swoich pracowników do „uczenia się i rozwoju” oraz kontynuowania edukacji. Ale zawsze spotykam się z oporem, gdy proszę o więcej czasu na wprowadzenie czegoś nowego do wdrożenia. Mój menedżer pyta o konkretne powody biznesowe dla wdrożenia tych nowych technologii. Nie mam powodów biznesowych. Moje powody są takie, że nie chcę stać się przestarzały. Mógłbym powiedzieć, że dzięki temu projekt będzie łatwiejszy w utrzymaniu w przyszłości przez innych programistów, ponieważ w pewnym momencie ludzie mogliby przestać używać tych starszych technologii, ale to wszystko, co przychodzi mi do głowy. Czy aplikacje Linq/Entity Framework/MCV działają lepiej? Tak bardzo, że klienci (użytkownicy w działach, dla których tworzę tę aplikację) potrzebują? Wątpię. Interesują mnie twoje przemyślenia na ten temat. Czy wielu z was ma podobne kłopoty z próbami wykorzystania nowszych nadchodzących technologii? Wątpię też, czy jestem na krawędzi technologii. Czy istnieją „powody biznesowe”, które chciałbyś ujawnić za korzystaniem z tych technologii? Z góry dziękuję! Przepraszam za długą ścianę tekstu.


title: Jak radzić sobie ze śledzeniem błędów w sposób przyjazny dla programistów i personelu nietechnicznego?

text: Właściwie używamy Mantis do naszych projektów. A może powinienem powiedzieć „staramy się używać”. Problem ze wszystkimi znanymi mi programami do śledzenia błędów polega na tym, że są one tworzone przez programistów dla programistów. Więc projekt nie istnieje lub jest całkowicie absurdalny. Oczywiście jako programista mogę bez problemu korzystać z modliszki, ale jak bardzo przydatny jest bug tracker, kiedy wszyscy ludzie _zaangażowani_ ** w projekt uważają je za tak źle zaprojektowane i tak trudne w obsłudze, że wolą tworzyć dokumenty Google z listą wypunktowaną znalezionych błędów lub sugestii, które mogą mieć. Mam zamiar zainstalować forum, wydaje mi się, że jest to rozwiązanie "pośrodku" między narzędziem do śledzenia błędów a zwykłą listą punktowaną. Przynajmniej forum pozwala monitorować i scentralizować dyskusję na temat sugestii. Jeśli moja obawa nie jest jasna, moje pytanie można podsumować w następujący sposób: Jak radzisz sobie ze zgłoszeniem błędów i sugestii skierowanym do nietechnicznego użytkownika? ** Przez zaangażowanego NIE mam na myśli rzeczywistego klienta ani użytkownika końcowego. Myślę o naszym integratorze, kierownikach projektów i osobach zajmujących się kontrolą jakości.


title: GPL a interfejsy wtyczek, które nie zostały zaprojektowane z myślą o konkretnej aplikacji

text: _Nie szukam porady prawnej ani jej nie potrzebuję, ale przyszedł mi do głowy ciekawy eksperyment._ Wyobraź sobie następującą sytuację (nie potrafię naprawdę myśleć o konkretnym przykładzie i nie jestem pewien, czy w ogóle istnieje realna manifestacja): free (libre) api A licencjonowane na podstawie jakiejś liberalnej licencji lub nawet LGPL. Niewolna aplikacja B implementuje to API w kolejności wtyczek hosta, ale istnieją inne darmowe programy robiące to samo. Co więcej, istnieje wtyczka C działająca jako wtyczka pod api A. Łączy się z biblioteką D, czyli na GPL, więc C również jest na GPL. Wtyczki używające A są ładowane do hostów za pomocą mechanizmu podobnego do `dlopen` i używają złożonej struktury danych do komunikacji host-wtyczka. Ani B, ani C nie dystrybuują żadnych plików, które mogą być wymagane do poprawnego działania A (takich jak nagłówki zawierające definicje struktury A lub biblioteki dynamiczne zawierające funkcje pomocnicze dla A napisane przez autorów A), ale takie rzeczy mogą istnieć. Teraz niektórzy użytkownicy instalują aplikację B i wtyczkę C na swoim komputerze, wraz z wszystkim, co może być wymagane do prawidłowego działania api A. Następnie kontynuuje i ładuje C do B i tworzy pewną własność intelektualną z B, która nie jest oprogramowaniem. Czy w pewnym momencie doszło do naruszenia GPL, a jeśli tak, to kto naruszył GPL i dlaczego? * Autorzy C naruszają licencję D, umożliwiając używanie C na niewolnym hoście B? Jest to możliwe, ponieważ nie mogą udzielać i wyjątków od GPL (jak opisane na http://www.gnu.org/licenses/gpl-faq.html#GPLPluginsInNF lub http://www.gnu.org/licenses /gpl-faq.html#LinkingOverControlledInterface) ze względu na warunki licencji D. * Autorzy B naruszają licencję C i D, umożliwiając załadowanie C w B? Jest to możliwe, ponieważ http://www.gnu.org/licenses/gpl-faq.html#NFUseGPLPlugins nie zezwala na mechanizmy używane przez A do komunikacji między wolnymi i niewolnymi modułami. * Autorzy A, ponieważ api może być używane (i w tym przypadku zostało użyte) do komunikacji między oprogramowaniem na licencji GPL a niewolnym oprogramowaniem. To byłoby skrajnie absurdalne. * Użytkownik, bo w momencie wczytywania B do C wykonał pracę pochodną C. Myślę, że jest to niemożliwe, bo jej nie rozpowszechnia. Ale czy sytuacja zmieni się, jeśli zdecyduje się wydać plik konfiguracyjny B, który powoduje, że B ładuje C jako wtyczkę? * Nikt, ponieważ A liczy się jako „biblioteka systemowa”, a B i C bezpośrednio oddziałują tylko z A, a nie ze sobą. W zdrowym świecie tak by się zdarzyło... Konkretnym przykładem A może być jakiś rodzaj api audio (pomyśl LADSPA) lub przetwarzania obrazu. Jednak nie udało mi się znaleźć takiego interfejsu (czyli wolnego oprogramowania, generycznego i jest również implementowany przez narzędzia komercyjne). Przykład z prawdziwego świata również może być całkiem pouczający.


title: Rozwój oparty na testach uczenia się

text: Jeśli chcę samodzielnie uczyć się TDD, od czego mógłbym zacząć poza zwykłą wyszukiwarką Google? Czy są jakieś książki, które poleciłbyś lub jakaś metoda, którą zastosowałeś, aby nauczyć się tego na własną rękę? Jestem programistą C#, jeśli to miało znaczenie.


title: Czego powinienem szukać podczas oceny bibliotek i narzędzi do testów jednostkowych?

text: Jestem w trakcie wybierania nowych narzędzi do testów jednostkowych, aby wkrótce rozpocząć projekt. Jest ich mnóstwo! Podstawowe wymagania jakie mam to to, że może przeprowadzać testy na co najmniej Windows i Linux, jest kompatybilny z C++/C++03, może wykonywać testy równolegle (np. aby wykorzystać wielordzeniowe procesory) oraz można uruchomić z wiersza poleceń. Ale są to dość szerokie wymagania i nie zawężają pola. Aby to zrobić, szukam potencjalnych pułapek i pułapek związanych z różnymi typami implementacji. Na przykład, gdybym chciał użyć silnika testów jednostkowych w języku wyższego poziomu, takim jak Python, czy nadal generowałby dane wyjściowe sformatowane jak testy jednostkowe C? Moim głównym zamiarem tutaj jest użycie tych samych narzędzi do przechowywania i raportowania zarówno dla testów wyników C++, jak i Pythona. Zastanawiam się też, czy do uruchomienia testów konieczny jest konkretny silnik, czy wystarczy go zintegrować z naszym silnikiem ciągłej integracji (buildbot). Czy te dwa powyższe zastrzeżenia są ważne? O co jeszcze powinienem się martwić podczas oceny silników do testów jednostkowych?


title: Młody student C++ bez kierunku

text: Miałem nadzieję na jakiś kierunek lub wskazówki dotyczące mojego doświadczenia w nauce C++. Przeczytałem teraz dwie książki, od deski do deski, dwa razy. Pierwszym z nich był Beginning Visual C++ 2010 autorstwa Ivora Hortona i Begining with C++ Early Objects (7th Edition). W tym momencie i po kilku miesiącach czuję, że wszystko, co wiem, jak zrobić w C++, to stworzyć podstawową klasę, zdefiniować kilka metod, użyć STL oraz czytać i zapisywać informacje do iz bufora konsoli (cin/cout). Ale proste rzeczy, takie jak zapisywanie danych do pliku, odczytywanie z pliku, drukowanie, łączenie się z witryną FTP, wykonywanie podstawowych manipulacji graficznych na ekranie (nawet DirectX/OpenGL) i tak dalej Nie mogę zrobić lub nie nawet nie wiem od czego zacząć. Czuję, że wciąż nie nauczyłem się dogłębnie C++. Myślę, że dostaniecie z tym to, do czego zmierzam. Próbowałem pobrać SFML i skompilować go w Visual C++ 2010 Professional. Po jakimś czasie go dostałem, ale potem się zgubiłem. Postępowałem zgodnie z samouczkami i jeden nie działał. Ciągle otrzymywałem błąd dotyczący brakującego symbolu i po około godzinie w Google nie mogłem go rozgryźć. Czy ktoś może wskazać mi kierunek, w którym się stąd udaje? Wyobrażam sobie, że inni byli w tym momencie w swoich wczesnych dniach.


title: Co to jest kanwa 3D HTML5? Czym różni się od WebGL?

text: Słyszałem o _płótnie 3D_. To dla mnie dziwne. Ponieważ wiem, że istnieje już przemysłowy standard 3D API _WebGL_. Co to jest? Czym różni się od WebGL?


title: Jak przedstawić zwinny projekt ludziom skupionym na wodospadzie?

text: Nasz zespół został poproszony o przedstawienie naszych wysiłków rozwojowych w planie projektu. Nikt nie jest niezadowolony z naszej pracy ani nie kwestionuje naszej zdolności do dostarczania, po prostu uczestniczymy w wezwaniu bydła IT o plany projektów. Problem w tym, że jesteśmy zwinnym zespołem i nie myśleliśmy o naszej pracy pod kątem formalnego planu projektu. Chociaż mamy ogólne pojęcie o tym, nad czym będziemy dalej pracować, nie jesteśmy w 100% pewni, dopóki nie zaplanujemy iteracji. Do tej pory nasz zespół działał w dużej mierze w próżni i nie był zobowiązany do przedstawiania naszej metodologii ani wskaźników podmiotom zewnętrznym. Przestrzegamy większości praktyk stosowanych w programowaniu ekstremalnym. Organizujemy kwartalne spotkania planistyczne, aby mieć ogólny pogląd na historie, nad którymi będziemy pracować przez kwartał. To powiedziawszy, nasze historie są udokumentowane na kartach 3x5 i są szacowane dopiero na początku iteracji, w której będą opracowywane. Po oszacowaniu dokumentujemy historię w Team Foundation Sever. Podczas iteracji dołączamy kod do wątków i oznaczamy wątki jako ukończone po zakończeniu. Na podstawie tych danych jesteśmy w stanie wygenerować wykresy wypalenia i prędkości. Co najważniejsze, znamy naszą średnią prędkość dla iteracji, co nie pozwala nam odgryźć więcej, niż jesteśmy w stanie przeżuć. Nie zamierzam modyfikować sposobu, w jaki robimy programowanie, ale chcę przedstawić nasze działania programistyczne w raporcie, który zrozumie ktoś, kto zna wodospad. W artykule _Jak wygląda plan projektu Agile_ Kent McDonald wykonuje dobrą robotę, określając różnice między planami projektów zwinnych i kaskadowych. Określa różnice w materiałach eksploatacyjnych: > * Plan projektu Agile jest oparty na funkcjach > * Plan projektu Agile jest zorganizowany w iteracje > * Plan projektu Agile ma różne poziomy szczegółowości w zależności od > ramy czasowej > * Plan projektu Agile jest własnością Zespołu > Umiejętność wyjaśnienia różnic jest świetna, ale jak najlepiej zaprezentować dane?


title: Dlaczego „nieważny” nie jest dozwolony jako typ ogólny w C#

text: Jakie decyzje projektowe przemawiały za tym, aby „unieważnienie” nie było możliwe do zbudowania i nie było dozwolone jako typ ogólny? W końcu jest to tylko specjalna pusta „struktura” i pozwoliłaby uniknąć całkowitego PITA polegającego na posiadaniu odrębnych delegatów „Func” i „Action”. (C++ zezwala na jawne zwroty `void` i zezwala na `void` jako parametr szablonu)


title: Jakie rzeczy bierzesz pod uwagę podczas przeglądania kodu źródłowego iOS?

text: Zrobimy kilka recenzji dla naszych projektów iOS. Nie mamy doświadczenia w sprawdzaniu nawzajem swoich kodów. Deweloperzy iOS biorący udział w recenzjach będą pochodzić z innych projektów, ponieważ generalnie jedna osoba zajmuje się jednym projektem klienta w firmie. Wiem, że jest kilka pytań na SO dotyczących rzeczy, których szukasz, gdy przeglądasz czyjś kod. Chcę zadać to pytanie specjalnie dla projektów iOS. Poza ogólnymi punktami dotyczącymi jakości kodu, jakie rzeczy bierzesz pod uwagę podczas przeglądania kodu na iOS?


title: Dystrybucja zadań podobnych do crona na wielu serwerach

text: Obecnie używam czegoś w rodzaju serwera master-cron, który uruchamia zadania na serwerach slave-worker. Ale zadań jest tak wiele, że czas całkowicie się gubi. Czy istnieje algorytm, który eliminuje pojedynczego mastera?


title: tworzenie prostych stanów dla wejścia bezstanowego

text: Biorąc pod uwagę urządzenie wejściowe (w zasadzie klawiaturę), które zgłasza naciśnięcia i naciśnięcia, jak najefektywniej przechowywać i pobierać informacje o tym, _które klawisze są aktualnie wciśnięte_? Moją pierwszą myślą była tablica dynamiczna, ale utrzymywanie i przeszukiwanie tablicy dynamicznej wydaje się poważnym obciążeniem zasobów. Z góry wielkie dzięki za wszelką pomoc Joe


title: Diagram UML dla istniejącej implementacji

text: Mam trochę kodu, który chcę przedstawić w UML, ale w pewnym momencie utknąłem. Pozwól, że opowiem ci coś o funkcjonalności kodu. Posiadam obszar roboczy, w którym mogę umieścić niektóre `Komponenty', wybrać je, usunąć, dodać nowy, przenieść itp. Mogę je również łączyć według pewnych zasad (dostępne są różne rodzaje `Komponentów). W celu określenia, czy grupa `Component`ów może być podłączona czy nie, zaimplementowałem prosty mechanizm. W mechanizmie tym pojawiają się następujące części: **`ConnectionRule`** \- pobiera typ połączenia i sprawdza, czy zbiór `Component` podany jako parametr może być połączony zgodnie z tą `ConnectionRule`. **`ConnectionRulesSet`** \- zawiera wiele reguł. Klient pyta zestaw z regułami tak: "według jakich reguł określonych w zestawie, komponenty podane jako parametr, można połączyć"? W odpowiedzi `ConnectionRulesSet` podaje listę `ConnectionRules`. Konkretny zestaw reguł połączenia jest ujawniany tylko przez interfejs — Klient nie może utworzyć instancji konkretnego zestawu reguł. **`RulesSetFactory`** \- w zależności od wielu okoliczności aplikacja może używać różnych `ConnectionRulesSet`s. Dlatego stworzyłem fabrykę, która w zależności od konkretnych okoliczności zapewnia odpowiednią implementację interfejsu `ConnectionRulesSet`. A teraz spójrzmy na kod Klienta: // lista komponentów, które należy zweryfikować pod kątem poprawności połączenia: List<Component> selectedComponents = ... ; // Pobierz zestaw reguł dla normalnych warunków: ConnectionRulesSet setOfRules = RulesSetFactory.getRulesSet(NORMAL_SET); List<ConnectionRule> spełnioneRules = setOfRules.getFulfilledRules(final selectedComponents); // Zrób coś ze spełnionymi regułami: for(PlausibilityRule rule : filledRules){ addToAvailableRulesList(rule.getConnectionType().getName()); // wyświetl nazwy typów połączeń... } Mój problem polega na tym, że nie jestem pewien jak stworzyć diagram klas UML dla takiego rozwiązania z perspektywy Klienta... Jak wyeksponować relacje pomiędzy prezentowanym rozwiązaniem a Klientem. Klient używa właściwie wszystkich: ConnectionRule, RulesSet, RulesSetFactory... Poniżej jeden z moich pomysłów... Co o tym sądzisz? Masz lepsze rozwiązanie? ![Przykładowy diagram klas UML](http://i.stack.imgur.com/gyPMc.png)


title: Jak koncepcyjnie rozważyć i zaimplementować reguły interfejsu użytkownika dla wielu kontrolek i danych wejściowych?

text: Mam interfejs użytkownika z licznymi kontrolkami i danymi wejściowymi. Przyciski, pola tekstowe i pola wyboru itp. Wyobraź sobie następujące „reguły” dla przykładowego interfejsu użytkownika z 2 z tych kontrolek: * B2 nie można używać, dopóki oba TF1 i TF2 nie będą miały wartości * Nie można wprowadzić TF2, dopóki TF1 nie będzie miało wartości * CB2 nie może być sprawdzone, chyba że TF1 nie ma wartości * CB2 nie może być sprawdzone, chyba że CB1 jest zaznaczone. Te reguły są tutaj arbitralne, ale mam wiele reguł biznesowych, które ostatecznie regulują funkcjonalność interfejsu użytkownika. Chciałbym zaimplementować logikę tego w moim kodzie interfejsu użytkownika, aby wymusić te zasady. Jednak trudno mi określić dobry sposób, aby to zrobić. Przychodzą mi do głowy dwa podstawowe sposoby, ale nie jestem ich fanem. ### Metoda 1 - dodawanie logiki do każdego wywołania zwrotnego kontroli Jednym ze sposobów na to byłoby dodanie kontroli logicznej do każdego wywołania zwrotnego metody. Tak więc w przypadku pierwszej reguły, w kodzie powiązanym z B2 należy uwzględnić zakodowane na stałe kontrole, takie jak `if TF1 == ""` i `if TF2 == ""`. Nie jestem fanem tego pomysłu, ponieważ zamierzam rozrzucić wszelkie sekwencjonowanie/logikę wszędzie w moim interfejsie użytkownika i wydaje się nieuniknione, że kiedyś ten proces spowoduje niejasne i niemożliwe do wyśledzenia błędy. Wydaje się również, że konserwacja będzie niemożliwie skomplikowana. ### Metoda 2 – zbuduj zbiór wszystkich zasad Sposób, do którego skłaniam się, to budowanie zbioru zasad. Pierwszym krokiem byłoby zdefiniowanie zestawu reguł „przepuszczania” dla każdego typu kontrolki i powiązanych z nim wyszukiwań, takich jak: * W przypadku pól wyboru „przechodzi” sprawdza prawdziwość, „nie powiodło się” w przypadku fałszu * W przypadku pól tekstowych „przechodzi” jeśli nie jest pusty, "nie powiodło się" if = "" Mogę następnie utworzyć kolekcję wszystkich wstępnych testów Pass/Fail dla każdego komponentu interfejsu użytkownika i powiązanych z nim komponentów. Można to wyabstrahować do pojedynczej metody sprawdzania wywoływanej w każdej akcji interfejsu użytkownika, takiej jak: * myChecker(mControlName), gdzie myChecker jest metodą, która iteruje po liście wszystkich pasujących reguł, sprawdza je i zwraca prawdę/fałsz w zależności od tego, czy reguły przechodzą . Ta metoda może być wywoływana z każdej kontrolki interfejsu użytkownika przed wykonaniem jakiejkolwiek logiki specyficznej dla kontrolki. To miłe, ale wydaje się, że tworzenie reguł i nie zapominanie o nich może być nawet bardziej skomplikowane niż pierwsza metoda. Dodatkowo, wszystkie typy kontrolek muszą mieć kryteria "powodzenie/niepowodzenie", w przeciwnym razie metoda myChecker może stać się śmiesznie złożona z mnóstwem trudnych do odczytania instrukcji if. * * * Czy czegoś mi brakuje? Musi istnieć jaśniej zdefiniowany wzorzec lub lepsza strategia włączenia tego rodzaju walidacji/reguł do interfejsu użytkownika.


title: Czy istnieje sposób na wydajne umożliwienie użytkownikowi przesyłania wielu treści jednocześnie do witryn typu e-commerce?

text: Sprzedawcy w dużych witrynach, takich jak Amazon i Newegg, muszą podać nazwy, opisy i obrazy, aby ich produkty były wyświetlane w witrynach e-commerce. Sprzedawcy ci mogą mieć do sprzedania ponad 10 000 produktów, każdy z własną unikalną nazwą/opisem/obrazem. Nie wyobrażam sobie, żeby sprzedawcy w witrynach e-commerce przesyłali każdy produkt z osobna za pomocą standardowego formularza HTML. Zwłaszcza, gdy produkt może mieć wiele zdjęć, ta metoda przesyłania wydaje się po prostu zbyt nieefektywna. Domyślam się, że te witryny umożliwiają sprzedawcom przesyłanie za pośrednictwem interfejsu API udostępnianego przez witrynę handlu elektronicznego, dzięki czemu zadanie przesyłania może być zautomatyzowane za pomocą skryptu, ale jak dokładnie to się dzieje? Przez JSON? JSON działa świetnie z ciągami tekstowymi, ale JSON nie pozwala na przesyłanie plików (więc nie można przesyłać obrazów?).


title: Wielozadaniowość w C#

text: Chciałbym użyć timera w moim programie C# z dokładnością do milisekund, aby zsynchronizować kamerę z niektórymi zdarzeniami i robić zdjęcia co 250ms (lub 1/4 sekundy, lub mogę dostosować go do jeszcze krótszych czasów, takich jak 200ms lub 100ms ). Można do tego wykorzystać zwykłe zdarzenie timera. Ale zastanawiam się, jaki byłby najlepszy sposób, aby to zrobić. Myślę też, że nie powinienem pisać w nim całej procedury przechwytywania, ale zamiast tego po prostu podnieść kolejny wątek (wielowątkowość), aby przetworzyć obraz z pewną logiką wizji, ponieważ moja logika wizji zajmuje około 1 sekundy, więc dostanę trochę kolejka tutaj. Jeśli moje algorytmy wizyjne zajęłyby 1 sekundę na wątek, czy oznaczałoby to, że na komputerze wielordzeniowym (12 rdzeni) taki wątek kodu przeszedłby do następnego dostępnego wolnego procesora, czy też myślę zbyt łatwo o wielozadaniowości?


title: Nawigacja po kodzie C++ w systemie OS X

text: Poza używaniem Emacs / Vim z ctags lub cscope lub obydwoma, czy istnieją alternatywy dla nawigacji po kodzie C++ w istniejącej bazie kodu? Kiedyś używałem Source Insight w systemie Windows i działało to całkiem dobrze. Główną funkcjonalnością, której szukam, jest szybkie znajdowanie definicji makr, zmiennych i funkcji oraz umieszczanie referencji do funkcji.