title: Tworzenie linii aplikacji biznesowych z Visual Studio Isolated Shell

text: Pytam o to profesjonalistów - Czy jest możliwe zbudowanie nowej aplikacji LOB (Line Of Business) z VS Shell jako samodzielną aplikacją. Są pewne punkty, o których myślałem, że należy je zmienić, ale nie wiem jak, na przykład: - Nie będzie dokumentu. Zamiast tego pojawią się okna z kontrolkami, w których ludzie wprowadzają dane. Nie będzie menu plików (nowy, edytuj). Zamiast tego po otwarciu aplikacji pojawi się okno logowania (coś w rodzaju SQL Server Management Studio). Powinny istnieć pływające okna, w których znajduje się kontrolka i jakiś rodzaj zarządzania oknami, w którym te okna mogą być zminimalizowane (oczywiście wewnątrz powłoki) To niektóre z punktów, o których pomyślałem. Oczywiście jest wiele innych punktów, które należy zmienić i proszę o wypełnienie listy. Proszę również wskazać mi, jak zacząć, najlepsze praktyki i ewentualnie inne wskazówki, które Twoim zdaniem powinny być wymienione.


title: Jaka jest najlepsza technologia dla NAPRAWDĘ przenośnego klienta REST

text: Tworzę pakiet narzędzi zwiększających produktywność dla systemów Mac, iOS i Windows. Wszystkie komunikują się z serwerem synchronizacji za pośrednictwem interfejsu RESTful (używając buforów protokołów), ale gdy dodajemy nowe platformy, zdajemy sobie sprawę, jak trudno jest odtworzyć różne wersje tego samego kodu tylko po to, aby komunikować się z klientem, więc pomyśleliśmy o tym przy użyciu konstrukcji modułowej: * Moduł klienta zaplecza byłby taki sam dla wszystkich klientów, dzięki czemu zmiany w protokole mogą być łatwo przenoszone do wszystkich klientów * Klienci, których musimy obsługiwać: Windows, Mac, iOS, Android, Web, ewentualnie Windows Mobilny Jedyny sposób, jaki przychodzi mi do głowy, to moduł JavaScript, który jest współdzielony przez wszystkich klientów i obsługuje komunikację z serwerem, ale być może jest to nawet więcej pracy ze względu na wymaganą integrację z interpreterem JavaScript. Może lepiej byłoby napisać kilka modułów backendu zamiast jednego.


title: Jak prowadzić projekt deweloperski bez wiedzy technicznej

text: Przez całą swoją karierę byłem praktycznym programistą i uwielbiam pracować z kodem. Zawsze nienawidziłem lidera zespołu, który ma niewielką lub żadną wiedzę na temat konkretnej technologii, a mimo to nalega na pewną implementację. Teraz znajduję się po drugiej stronie lustra. Jestem głównym deweloperem grubego klienta do wdrożenia w C#, jednak moje doświadczenie jest w budowaniu aplikacji webowych w języku Java. Chociaż wiem, że potrafię wykorzystać wzorce projektowe i paradygmaty obiektowe w dowolnym języku, gubię się, jeśli chodzi o standardy kodowania, narzędzia cyklu życia projektu i procedury wydania/dystrybucji. Nie mam wątpliwości, że podstawy przyjmę w ciągu miesiąca lub dwóch, ale są pewne doświadczenia, które można zebrać dopiero z czasem. Co powinienem zrobić i jak uniknąć zostania liderem projektu, którego nienawidziłem, gdy się rozwijałem?


title: Który język jest najbardziej elastyczny do scrapingu stron internetowych?

text: Jestem nowy w programowaniu. Znam trochę pytona i trochę obiektywnego c, i przechodziłem przez samouczki dla każdego z nich. Wtedy przyszło mi do głowy, że muszę wiedzieć, który język jest bardziej elastyczny (python, obj c, coś innego) do screen scrapingu strony internetowej w poszukiwaniu treści. Co rozumiem przez „elastyczny”? Cóż, idealnie, potrzebuję czegoś, co będzie łatwe do refaktoryzacji i dostosowania do podobnych projektów. Staram się unikać częstego przepisywania (no cóż, ponownego kodowania), jeśli chcę zmienić niektóre zmienne w programie (np. witrynę do zeskrobania, treść do pobrania itp.). W każdym razie, jeśli mógłbyś przekazać mi swoją opinię, byłoby świetnie. Aha, i jeśli znasz jakieś istniejące frameworki dla zalecanego języka, podziel się nimi. (Wiem już trochę o Selenium i BeautifulSoup dla pytona).


title: Wersje lokalne i w chmurze?

text: Mam aplikacji serwera sieci web .NET, którą buduję, którą planuję hostować na platformie hostingu w chmurze .NET, takiej jak AppHarbor z serwerem SQL. Będzie używany przez wiele małych grup ludzi do rejestrowania i przetwarzania głosów w wyborach (obecny system nazywa się TallyJ). Potrzebuję również, aby moi użytkownicy mogli skonfigurować samodzielną edycję na pojedynczym komputerze lub jako serwer na komputerze z siecią LAN ad hoc, która **nie** jest podłączona do Internetu, gdy jest używana. Moim obecnym planem byłoby użycie IIS Express i SQL CE do lokalnej konfiguracji. Dzięki temu lokalne i hostowane wersje kodu i SQL byłyby takie same. Czy to brzmi realnie, czy czegoś mi brakuje? Czy masz jakieś sugestie dotyczące lepszego zestawu narzędzi (ale ograniczonego do C# i relacyjnej bazy danych na serwerze/chmurze)?


title: Jak pobłażliwy powinien być język w odniesieniu do identyfikatorów?

text: > To jest siostrzane pytanie: Czy używanie znaków Unicode w nazwach zmiennych > jest złe? Jak to mam w zwyczaju, pracuję nad projektem językowym. Przyszło mi do głowy, że zezwolenie na identyfikatory wielotokenowe może poprawić zarówno czytelność, jak i zapisywność: kontroler podstawowy = nowy kontroler interakcji danych(); # vs. primary_controller = new DataInteractionController(); Niezależnie od tego, czy uważasz, że to dobry pomysł*, zacząłem się zastanawiać nad tym, jak bardzo język powinien być liberalny w odniesieniu do identyfikatorów i jaka jest w tym wartość. Oczywiste jest, że dopuszczenie znaków spoza zwykłego `[0-9A-Za-z_]` ma pewne zalety pod względem możliwości zapisu, czytelności i bliskości domeny, ale także może powodować koszmary związane z konserwacją. Wydaje się, że panuje zgoda (lub przynajmniej trend), że angielski jest językiem programowania. Czy chiński programista naprawdę musi pisać `电子邮件地址`, kiedy `adres_e-mail` jest preferowany? Nie znoszę być anglocentrykiem, jeśli chodzi o Unicode, ani pedantem, jeśli chodzi o inne ograniczenia identyfikatorów, ale czy naprawdę warto zezwalać na szalone nazwy zmiennych? **tl;dr: Czy koszt zwiotczenia jest wyższy niż potencjalna korzyść?** Dlaczego lub dlaczego nie? Jakimi doświadczeniami i dowodami możesz się podzielić na korzyść lub przeciw złagodzeniu ograniczeń? Jak myślisz, gdzie jest ideał na kontinuum? * Moim argumentem przemawiającym za zezwoleniem na stosowanie identyfikatorów wielotokenowych jest to, że wprowadza to bardziej rozsądne punkty do łamania długich linii kodu, a jednocześnie pozwala na opisowe nazwy, _i_ unikanie `ExcessiveCamelCase` i `ca_whole_of_underscores`, z których oba są szkodliwe dla czytelności .


title: Dlaczego Java pozwala na implementację różnych interfejsów, z których każdy zawiera metodę o tej samej sygnaturze?

text: Niedawno dowiedziałem się, że mogę mieć dwa interfejsy, z których jeden zawiera metodę o tej samej sygnaturze, co metoda w drugim interfejsie. I mogę mieć interfejs lub klasę, która implementuje oba wyżej wymienione interfejsy. Tak więc potomna klasa/interfejs niejawnie implementuje dwie różne metody jako jedną metodę. Dlaczego jest to dozwolone w Javie? Widzę wiele problemów z tego wynikających. Eclipse, na przykład, może dowiedzieć się tylko o implementacjach dla jednej metody interfejsu, ale dla drugiej w ogóle nie pokazuje żadnych implementacji. Uważam też, że byłyby problemy z automatyczną refaktoryzacją, np. gdy chcesz zmienić sygnaturę metody w jednym z interfejsów, a IDE nie będzie w stanie poprawnie zmienić tej sygnatury we wszystkich implementacjach (ponieważ implementują dwa różne interfejsy IDE nie może powiedzieć, do której metody interfejsu odnosi się implementacja). Dlaczego po prostu nie zrobić błędu kompilatora, takiego jak „kolizja nazw metod interfejsów” lub coś w tym rodzaju?


title: Reprezentowanie złożonych zależności obiektowych

text: Mam kilka klas z dość złożonym (ale acyklicznym) wykresem zależności. Wszystkie zależności mają postać: instancja `class X` zawiera atrybut `class Y`. Wszystkie takie atrybuty są ustawiane podczas inicjalizacji i nigdy nie ulegają zmianie. Konstruktor każdej klasy ma tylko kilka parametrów, a każdy obiekt zna odpowiednie parametry, które należy przekazać do konstruktorów obiektów, które zawiera. `class Outer` znajduje się na szczycie hierarchii zależności, tzn. żadna klasa od niej nie zależy. Obecnie warstwa interfejsu użytkownika tworzy tylko instancję `Outer`; parametry konstruktora `Outer` pochodzą z danych wejściowych użytkownika. Oczywiście, `Outer` w procesie inicjalizacji tworzy potrzebne obiekty, które z kolei tworzą potrzebne obiekty i tak dalej. Nowością jest to, że użytkownik, który zna graf zależności, może chcieć sięgnąć w głąb niego i ustawić wartości niektórych argumentów przekazywanych do konstruktorów klas wewnętrznych (zasadniczo nadpisując wartości używane obecnie). Jak zmienić projekt, aby to wspierać? Mógłbym zachować dotychczasowe podejście, w którym wszystkie klasy wewnętrzne są tworzone przez klasy, które ich potrzebują. W takim przypadku informacje o "nadpisaniach przez użytkownika" musiałyby zostać przekazane do konstruktora klasy `Outer` w jakiejś złożonej strukturze `user_overrides`. Być może `user_overrides` mogłoby być pełną logiczną reprezentacją grafu zależności, z nadpisaniami dołączonymi do odpowiednich krawędzi. Klasa `Outer` przekaże `user_overrides` do każdego tworzonego obiektu i zrobi to samo. Każdy obiekt, przed inicjalizacją obiektów niższego poziomu, znajdzie swoją lokalizację na tym grafie i sprawdzi, czy użytkownik zażądał nadpisania któregokolwiek z argumentów konstruktora. Ewentualnie mógłbym przepisać wszystkie konstruktory obiektów, aby przyjmowały jako parametry pełne obiekty, których wymagają. W ten sposób tworzenie wszystkich obiektów wewnętrznych zostałoby przeniesione poza całą hierarchię, do nowej warstwy kontrolera, która znajduje się między warstwą `Outer` a UI. Warstwa kontrolera zasadniczo przeszłaby graf zależności od dołu, tworząc wszystkie obiekty na bieżąco. Warstwa kontrolera musiałaby zapytać obiekty wyższego poziomu o wartości parametrów dla obiektów niższego poziomu, gdy odpowiedni parametr nie zostanie dostarczony przez użytkownika. Żadne podejście nie wygląda na strasznie proste. Czy jest jakieś inne podejście? Czy ten problem pojawił się na tyle w przeszłości, aby mieć wzór, o którym mogę przeczytać? Używam Pythona, ale nie sądzę, że ma to duże znaczenie na poziomie projektowania.


title: Czy firma Biotech powinna inwestować w rozwój własnego oprogramowania?

text: Pracując w firmie Biotech istnieje wiele możliwości automatyzacji przetwarzania informacji. Istnieje również wiele rozwiązań programowych m.in. Systemy LIM, ELN itp., aby dopasować się do tych specyficznych potrzeb. Odkryłem i ciągle się uczę, że te systemy, mimo że bardzo dobrze wykonują swoje konkretne zadania, są od siebie odizolowane. Zazwyczaj, aby jedna informacja została powiązana z inną informacją w innym systemie, pewna koordynacja między użytkownikami musi nastąpić za pośrednictwem poczty e-mail, wiadomości szeptanych itp. # Problem Koordynacja i dostarczanie informacji zwykle zajmuje kilka dni lub w niektórych przypadkach tydzień lub więcej, aby osiągnąć to, co wydaje mi się, że ma duży potencjał dezinformacji i popełniania nieśledzonych błędów. # Możliwe rozwiązanie Rola, jaką pełnię w tej firmie, to eksperymentalna, polegająca na zabawie z proponowanym rozwiązaniem polegającym na posiadaniu zasobów do opracowywania rozwiązań programowych do łączenia tych izolowanych systemów. Możemy korzystać z bibliotek open-source, usług zewnętrznych, budować od podstaw itp. # Pytanie Skoro firma Biotech nie jest firmą programistyczną, czy taka firma powinna zainwestować w rozwój własnych rozwiązań programistycznych, zwłaszcza gdy nie ma nic dostępnych na rynku, który dokładnie odpowiada ich procesom? Czy istnieją systemy, które pasują do tego rodzaju pracy? Jakie doświadczenia potwierdzają twoje odpowiedzi? Z góry dziękuję!


title: Pobierz podzbiór tablicy asocjacyjnej. Który z nich jest bardziej czytelny? Czy istnieje inny powód, aby używać jednego z drugim (lub innej metody)

text: Jeśli mam tablicę, która zawiera więcej informacji, niż potrzebuję, i chcę wyciągnąć podzbiór par nazw wartości, wymyśliłem 2 metody. Oba polegają na tym: $detailkeys=array(title,summary,subtitle,url,imgsrc,description); Metoda, którą wymyśliłem samodzielnie: foreach ($detailkeys jako $keyname) { $details[$keyname]=$data[$keyname]; } Metoda, którą znalazłem w sieci: // pobierz tylko żądane części $data i umieść je w $details. $details=array_intersect_key($dane, array_flip($detailkeys)); Druga metoda, z przyzwoitym komentarzem, jest taka, jaką wybrałem, ale chciałem zobaczyć, co ktoś inny ma na ten temat do powiedzenia.


title: Jak wytłumaczyć szefowi, który nie jest programistą, że musisz dokonać refaktoryzacji całej witryny?

text: Przede wszystkim to nie jest kwestia programowania, to sprawa programisty. Jestem nowym programistą internetowym w mojej firmie. Jestem tu tylko 2 tygodnie. Chcą, żebym uczył Wordpressa, konfigurował i instalował, i tym podobne. Ale mają też intranet, aby zrobić wszystkie rzeczy związane z kompatybilnością, śledzenie klientów, zamawianie wydarzeń, automatyczne wysyłanie e-maili. Cóż, intranet jest bardzo fajny i spędzili rok lub 2 lata z programistą, aby to zrobić. Ale problem polega na tym, że intranet jest świetny dla użytkownika (zły interfejs użytkownika, ale działa dobrze). Mają go już od 4 czy 5 lat. Ale jeśli przejdziesz do kodu, jest to denerwujące. Poważnie, jest naprawdę bardzo ciężki, zduplikowany kod, niepewny. Wszystko działa dobrze, ale wszystko jest nie tak w widoku kodu. Kilka punktów: * Witryna trzyma 4GB miejsca na dysku (bez DB!) * Tam są tysiące plików, folderów, bez kolejności * Dużo plików jest zduplikowanych * Było co najmniej 20-40 plików do skonfigurowania zmienić źródło bazy danych * Niektóre pliki konfiguracyjne są w .ini, więc mogę pobrać z dowolnego miejsca * Witryna została zakodowana na 4.0 lub 3.x, cudownie działa na 5.x z kilkoma ostrzeżeniami. * Witryna została zakodowana bez jakiejkolwiek skalowalności, po prostu kopiują i wklejają pliki i działają dalej, bez dołączania, nic. Na przykład: widzę co najmniej 40 plików o nazwie check_in.php w różnych folderach. Funkcje o nazwie: paste() paste_2()... Jakich punktów użyjesz, aby przekonać szefa, aby się tym zajął i zrefaktoryzował całą witrynę? To wrzód na tyłku. Wiem, że refaktoryzacja będzie trudna, ale myślę, że to lepszy sposób na kontynuowanie mojej pracy. Ponieważ chcą, żebym wprowadził w tym modyfikacje i musiałem spędzić 3 godziny, żeby zrozumieć, skąd pochodzi ta **** funkcja o nazwie paste() i co dokładnie robi. Ach, jeszcze jeden dobry punkt. W ogóle nie ma dokumentacji.


title: Jak sprawić, by moja aplikacja ASP.NET wykonała akcję na podstawie czasu?

text: Mam aplikację ASP.NET MVC4. Załóżmy, że chciałem wykonać jakiś kod (np. wysłać e-mail do użytkownika) 2 dni po zarejestrowaniu się użytkownika. Jednym ze sposobów jest wykonanie kodu przy każdym żądaniu, który skanuje bazę danych pod kątem użytkowników i czasu ich rejestracji oraz wykonuje kod na tej podstawie. Wydaje się to bałaganiarskie i zależy od osób często odwiedzających aplikację. Innym sposobem jest napisanie osobnej aplikacji, która działa na serwerze 24/7 i sama sprawdza, być może codziennie skanuje bazę danych o 12:00 i wykonuje własny kod. Jaki jest dobry sposób na to?


title: Założenie małej firmy deweloperskiej na zamówienie, rodzaj nisz, do których należy kierować?

text: To dla mnie coś nowego roku, ponieważ chcę być bardziej przedsiębiorczy w programowaniu i jest to rodzaj ogólnego pytania dla każdego, kto ma takie same ambicje jak ja. Mam doświadczenie w programowaniu stron internetowych i chociaż pracuję na pełen etat w firmie zajmującej się programowaniem, mam kilku niezależnych programistów, z którymi pracuję / zatrudniam przy małych projektach. Chcę zobaczyć, jak przenieść sprawy na wyższy poziom, aż do zbudowania małej firmy zajmującej się niestandardowym rozwojem. Po prostu nie jestem pewien, jak dowiedzieć się, jakie nisze należy kierować, jeśli chodzi o typ aplikacji, które należy budować jako wersje demonstracyjne itp. Myślałem mobilnie (może na Androida lub iPhone'a), ale jestem po prostu ciekawy, czy ktoś ma jakieś porady / zasoby. Wydaje się, że wiele „programów internetowych” polega na korzystaniu po prostu z CMS, takiego jak Joomla lub Wordpress, dla mniejszych witryn, więc chcę znaleźć sposób na ominięcie tego tłumu i znalezienie możliwości z firmami / przedsiębiorcami, którzy naprawdę potrzebują prawdziwych programowanie wykonane w celu budowania aplikacji. Dzięki za jakąkolwiek radę


title: Przy łączeniu rekordów bazy danych naruszenie ograniczeń w tabeli pośredniej M2M

text: Jeśli łączysz dwa lub więcej rekordów bazy danych z tabeli X, które mają relację wiele-do-wielu z tabelą Y, jak rozwiązać problem rekordów w tabeli pośredniej Z, które naruszałyby jedno lub więcej ograniczeń w wyniku łączyć? Po prostu je wyrzucasz, czy przerywasz transakcję?


title: Co liczy się jako wynalezienie koła na nowo?

text: Czy poniższe scenariusze liczą się w Twojej książce jako „wynalezienie koła na nowo”? * Rozwiązanie istnieje, ale nie w języku, którego chcesz użyć, a istniejące rozwiązania nie mogą być połączone z językiem, którego chcesz używać w czysty, idiomatyczny sposób. * Zasadniczo możesz uzyskać istniejącą bibliotekę, która robi to, co chcesz, z dużymi modyfikacjami, ale myślisz, że prawdopodobnie łatwiej byłoby po prostu zacząć od zera. * To, co piszesz, ma ten sam jednowierszowy opis, co rzeczy, które już zostały zrobione, ale kierujesz się do innej niszy. Na przykład, być może Twój problem został już rozwiązany milion razy, ale w sposób, który jest nieefektywny w przypadku dużych zestawów danych, a Twój kod działa dobrze w przypadku dużych zestawów danych.


title: Algorytm porównywania tekstu przy użyciu java-diff-utils

text: Jedną z funkcji naszego projektu jest zaimplementowanie algorytmu porównywania między dwiema wersjami tekstu i zapewnienie zmiany procentowej między dwiema wersjami. Podczas badań natknąłem się na projekt google java-diff-utils. Czy ktoś używał tego do porównywania tekstu za pomocą java-diff-utils ? Używając tego narzędzia, mogę uzyskać listę "delta", którą, jak zakładam, mogę jej użyć do % różnicy między dwiema wersjami tekstu? Czy to właściwy sposób na zrobienie tego? Jeśli wykonałeś jakiś algorytm porównywania tekstów za pomocą Javy, czy mógłbyś mi podać kilka wskazówek?


title: Sprawdzanie poprawności danych i obiektów/egzekwowanie reguł biznesowych

text: To nie jest tak naprawdę specyficzne dla Dappera, ponieważ odnosi się do dowolnego obiektu serializowanego XML .. ale pojawiło się, gdy przechowywałem obiekt za pomocą Dappera. W każdym razie powiedzmy, że mam klasę użytkownika. Normalnie zrobiłbym coś takiego: class User { public string SIN {get; private set;} public string DisplayName {get;set;} public User(string sin) { if (string.IsNullOrWhiteSpace(sin)) throw new ArgumentException("SIN musi być określony"); ten.SIN = grzech; } } Ponieważ wymagany jest SIN, po prostu utworzyłbym konstruktor z parametrem sin i uczyniłby go tylko do odczytu. Jednak w przypadku Dappera (i prawdopodobnie każdego innego ORM) muszę zapewnić konstruktor bez parametrów i umożliwić zapis wszystkich właściwości. Więc teraz mam to: class User: IValidatableObject { public int Id { get; ustawić; } ciąg publiczny SIN { get; ustawić; } ciąg publiczny Nazwa Wyświetlana { get; ustawić; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { // implementacja } } Wygląda na to, że naprawdę nie możesz wybrać odpowiedniego słowa, brzydki zapach? A) Zezwalam na zmianę właściwości, które nie powinny być zmieniane po utworzeniu obiektu (SIN, identyfikator użytkownika) B) Teraz muszę zaimplementować IValidatableObject lub coś takiego, aby przetestować te właściwości przed aktualizacją ich do db. Więc jak się do tego zabrać?


title: Czy posiadanie śmiesznej lub głupiej nazwy szkodzi projektowi?

text: To pytanie od jakiegoś czasu mnie nurtuje. Weźmy jako przykład niektóre z moich projektów. W moich projektach staram się poprzedzać je przedrostkiem „szarlatan”. Oznacza to, że będziesz mieć nazwy projektów, takie jak (ujawnienie: To są moje rzeczywiste projekty) Quackbot, bot IRC i Quackedcube, który był solverem kostki Rubika. Przynajmniej powtarzając innym, nazwa brzmi dziwnie i nieprofesjonalnie. Jedynym innym przykładem, jaki mogę sobie wyobrazić, jest biblioteka Bouncy Castle dla Javy, która obsługuje wszelkiego rodzaju rzeczy związane z szyfrowaniem. Nazwa brzmi jednak trochę głupio i widziałem kilka komentarzy do odpowiedzi na przepełnienie stosu, które zalecają to, mówiąc coś w stylu „Czy ktoś naprawdę zaufałby swojej komercyjnej aplikacji do czegoś, co nazywa się Bouncy Castle?” Czy w tych dwóch przykładach można powiedzieć, że nazwa ta będzie lub uniemożliwiła przyjęcie przez osoby poważnie poszukujące bibliotek do swoich zastosowań komercyjnych? Czy sukces Bouncy Castle jest przykładem reguły czy wyjątkiem? Czy użyłbyś bibliotek lub programów o głupich, zabawnych lub niedojrzałych nazwach?


title: Używanie Backbone.js z ASP.Net MVC

text: Obecnie szukam zalet korzystania z Backbone.js, ale będę używać ASP.Net MVC jako głównej części witryny. Moje pytanie brzmi, czy warto łączyć ze sobą te 2, czy też robię wędkę na własne plecy? Czy zamiast tego należy po prostu użyć witryny ASP.Net Web Forms?


title: Najlepsza praktyka do kwerendy danych z MS SQL Server w C Sharp?

text: Jaki jest najlepszy sposób na zapytanie o dane z MS SQL Server w C Sharp? Wiem, że umieszczanie w kodzie zapytania SQL nie jest dobrą praktyką. Czy najlepszym sposobem jest utworzenie procedury składowanej i wywołanie jej z C Sharp z parametrami? using (var conn = new SqlConnection(connStr)) using (var command = new SqlCommand("StoredProc", conn) { CommandType = CommandType.StoredProcedure }) { conn.Open(); polecenie.WykonajNonQuery(); poł.Zamknij(); }


title: stosunek zwięzłości do prędkości

text: Ogólnie rzecz biorąc, im bardziej zwięzły i elastyczny język, tym wolniejsze wykonanie programów napisanych w tym języku. z drugiej strony, szybkie języki są w większości nadmiernie gadatliwe, wymagając napisania kilku linijek tylko po to, aby wypisać "hello world", co oznacza trudniejszy czas programowania i jest bardziej podatny na błędy. więc pytanie brzmi, czy jest jakiś pomiar stosunku zwięzłości do prędkości?. jeśli tak, jak się nazywa i gdzie mogę znaleźć informacje na jego temat. Dziękuję. **uwaga:** można stworzyć język żetonów jednoliterowych, `p h` print hello world, czyli lapidarność. zwięzłość oznacza – dla naszych celów – jak tutaj zdefiniowano: > Przekazywanie wielu informacji w sposób jasny iw kilku słowach; krótkie, ale > wyczerpujące


title: Czy ma sens zaimplementowanie systemu rozsyłania zdarzeń, który umożliwia propagację zdarzeń dla obiektów niezwiązanych z GUI?

text: Kontynuując moje pytanie, w którym chciałem poznać ogólne zasady wdrażania systemu rozsyłania zdarzeń, który pozwala na bąbelkowanie zdarzeń (i przechwytywanie, którego się nauczyłem); czy taka implementacja ma sens dla obiektów niezwiązanych z GUI? Pytam, ponieważ chcę spróbować zbudować framework do obsługi zdarzeń ogólnego przeznaczenia w PHP (czy to tylko do ćwiczeń, czy do rzeczywistego użytku), ale nie mogę dowiedzieć się, czy bąblowanie zdarzeń (lub przechwytywanie) jest w jakikolwiek sposób przydatne w takie środowisko (nie mówiąc o PHP-GTK lub podobnych środowiskach tutaj).


title: Solidny sposób na prowadzenie ewidencji wydań oprogramowania?

text: Wypuszczamy kilka małych wtyczek, które towarzyszą naszemu oprogramowaniu. Każda wtyczka umożliwia naszemu oprogramowaniu komunikację ze sprzętem jednego producenta. Chciałbym opracować system do śledzenia wydań wtyczek. ## Przykładowe informacje, które powinny być przechowywane: * Nazwa producenta sprzętu * 32-bitowe? 64-bitowy? Zarówno? * Jakie tryby działania obsługuje sprzęt? * Jakie wersje sterownika producenta zostały przetestowane z wtyczką? ## Pożądane właściwości systemu: * Możliwość synchronizacji z oprogramowaniem do kontroli wersji * Przechowuje dane w czytelnym dla człowieka pliku tekstowym (również dobre dla różnych narzędzi) * Dostępny jest bezpłatny wizualny edytor podobny do arkusza kalkulacyjnego * Możliwość wykonania prostej analizy, takiej jak „Co jest najstarszą wtyczką?" Muszę sobie wyobrazić, że ktoś inny już zmierzył się z tym problemem. W tej chwili moim najlepszym przypuszczeniem jest XML/JSON z edytorem wizualnym, ale byłem rozczarowany edytorami, które do tej pory wypróbowałem. Chciałbym uzyskać informacje od kilku bardziej doświadczonych programistów. Dziękuję!


title: W jaki sposób podstawowa matematyka jest efektywnie oceniana przez języki programowania?

text: W miarę jak coraz bardziej angażuję się w teorię stojącą za programowaniem, fascynują mnie i ogłuszają pozornie proste rzeczy. Zdaję sobie sprawę, że moje rozumienie większości podstawowych procesów jest uzasadnione logiką kołową _**P_** : Jak ta praca? _**A_** : _Ponieważ tak!_ Nienawidzę tej realizacji! Kocham wiedzę, a na dodatek uwielbiam się uczyć, co prowadzi mnie do mojego pytania (choć jest to szerokie). ## Pytanie: > Jak oceniane są podstawowe operatory matematyczne w > językach programowania? > > Jak udoskonalono obecne metody? # Przykład var = 5 * 5; Moja interpretacja: $liczba1 = 5; $liczba2 = 5; $liczba3 = 0; while ($num2 > 0) { $num3 = $num3 + $num1; $liczba2 = $liczba2 - 1; } echo $num3; Wydaje się to być wysoce nieefektywne. W przypadku wyższych współczynników ta metoda jest bardzo powolna, podczas gdy standardowa metoda wbudowana jest natychmiastowa. Jak zasymulowałbyś mnożenie bez iteracyjnego dodawania? zm = 5 / 5; Jak to się w ogóle robi? Nie mogę wymyślić sposobu, aby dosłownie podzielić to 5 na 5 równych części. zm = 5 ^ 5; Iteracje iteracji dodawania? Moja interpretacja: $base = 5; $mod = 5; $liczba1 = $podstawa; while ($mod > 1) { $liczba2 = 5; $liczba3 = 0; while ($num2 > 0) { $num3 = $num3 + $num1; $liczba2 = $liczba2 - 1; } $liczba1 = $liczba3; $mod -=1; } echo $num3; Znowu jest to BARDZO nieefektywne, ale nie mogę wymyślić innego sposobu, aby to zrobić. To samo pytanie dotyczy wszystkich funkcji matematycznych, które są obsługiwane automagicznie.


title: Dlaczego Java String nie ma statycznych metod manipulacji ciągami?

text: Dlaczego **projektanci Javy** nie stworzyli statycznych wersji metod manipulacji ciągami znaków w klasie `java.lang.String`? Odnoszę się do następujących metod, ale pytanie można rozszerzyć również na inne niestatyczne metody w klasie. concat(String) substring(int, int) replace(char, char) toLowerCase() replace(CharSequence, CharSequence) toLowerCase(Locale) replaceAll(String, String) toString() replaceFirst(String, String) toUpperCase() split(String ) toUpperCase(Locale) split(String, int) trim() substring(int) Posiadanie tylko niestatycznych wersji tych metod wymusza **jawne** sprawdzanie wartości null wszędzie tam, gdzie taka metoda ma być wywoływana. Na przykład proste wywołanie `example = example.trim()` doprowadziłoby do _NullPointerException_, jeśli `Przykład ciągu = null`. Dlatego programista musi wykonać następujące standardowe sprawdzenie wartości null: if (przykład != null) przykład = przykład.trim(); // LUB: przykład = (przykład==null) ? null : przykład.trim(); przykład = (przykład==null) ? null : przykład.substring(5); Wyobrażam sobie, że byłoby o wiele wygodniej, gdyby `String` miał statyczne wersje tych metod (być może nawet _wyłącznie_ ), które przyjmowałyby ciąg wejściowy jako pierwszy argument: przykład = String.trim(przykład); przykład = String.replace(przykład, 'a', 'b'); przykład = String.substring(przykład, 5); Doprowadziłoby to do czystszego kodu napisanego przez programistów, którzy automatycznie zajęliby się przypadkami zerowymi, po prostu zwracając wartość null, zamiast zmuszać programistów do jawnej obsługi przypadków zerowych. _Zwracanie wartości null_ ma dla mnie sens, ponieważ manipulowanie ciągiem _null_ powinno skutkować ciągiem _null_, a nie błędem. **Dlaczego** projektanci Javy nie pomyśleli o tym, kiedy projektowali klasę `String` w Javie 1 lub Javie 2, a nawet nie dodawali takiej funkcjonalności w późniejszej wersji Javy?


title: Dlaczego aplikacje na iPhone'a i iPada mają bezpłatną wersję i pełną wersję, zamiast „odblokowywać” je poprzez zakup w aplikacji?

text: Wiele aplikacji ma wersję bezpłatną i pełną. Jak to się ma do instalacji pojedynczej wersji i użycia zakupu w aplikacji za 0,99 USD lub 1,99 USD, aby odblokować program, aby uczynić go pełną wersją? Ma to tę zaletę, że użytkownik nie musi ponownie wchodzić do App Store i instalować programu, co ułatwia użytkownikom zakupy.


title: Co składa się na kompetencję w XML w świecie .NET?

text: Widzę wiele ogłoszeń o pracę .NET, które wymieniają XML jako wymaganą umiejętność. Co należy zrobić w/z XML, aby mieć pewność, że ten wymóg jest spełniony? Modelowanie? Pracować z XPATH? Znajomość serializacji? Co jest specyficzne dla platformy .NET?


title: organizowanie zajęć / struktury folderów dla rozwoju opartego na TDD

text: Ze względu na rozwój oparty na testach kończy się na tym, że wiele klas robi tylko jedną rzecz. To spory ból głowy, aby zobaczyć **gdzie** takie klasy zostałyby umieszczone w strukturze folderów. Po pierwsze, czy umieszczanie powiązanych klas w tym samym pliku jest uważane za zły wzorzec? Jakieś sugestie dotyczące tego, czego używa się w rzeczywistych środowiskach produkcyjnych?


title: Dlaczego nie ma interfejsów wymiaru i punktu?

text: Mam na myśli coś w stylu: interfejs publiczny Dimensioned { int getWidth(); int getHeight(); } i publiczny interfejs Positioned { int getX(); int getY(); } Istnieje **wiele** standardowych klas java, które mają dokładnie te metody — w szczególności `Component` i wszystkie jego podklasy, a także `Dimension` i `Point`. „Obraz” może implementować „Wymiarowe”. Pomimo powszechnego stosowania tych metod, nie ma jednolitego sposobu ich odniesienia. Czy to świadoma decyzja projektantów języka? Pisząc to pytanie, zauważyłem, że dość trudno jest wymyślić dobre opisowe nazwy interfejsów. Mimo to wydaje się, że przydałoby się je mieć. Nie mogę znaleźć zbyt wielu informacji na ten temat.


title: Walidacja obszaru tekstowego

text: Chciałbym dowiedzieć się, jakie znaki ludzie dopuszczają w różnych typowych polach formularzy wejściowych (z wyjątkiem poczty e-mail...) Na przykład: **Obszar tekstowy/Wiadomości** : czy zezwalasz na całkowicie dowolny tekst, czy ograniczasz się do znaków alfanumerycznych i interpunkcja? Próbowałem iść drugą drogą, ale zawsze znajdziesz kogoś, kto lubi używać tyldy... **Imię i nazwisko**: czy na cokolwiek pozwalasz, czy używasz wyrażenia regularnego? **Numery telefonów** : tylko cyfry **Adresy** : alfanumeryczne, spacje, łączniki **Nazwy miast** : alfabet, łączniki, białe znaki [Uwaga: edytowane zgodnie z życzeniem]


title: Zmienna globalna a zmienna lokalno-statyczna do przechowywania stanu

text: Piszę aplikację do pracy dyplomowej w języku C, korzystając z biblioteki GTK+ UI. Czasami proszę o dane wejściowe użytkownika, które muszę zachować do późniejszego wykorzystania. Pojawia się wątpliwość, jak przechowywać te dane. Nie chciałem tworzyć zmiennych globalnych, ponieważ niezliczoną ilość razy mówiono mi, żebym ich nie używał. Jednak muszę wymieniać dane między funkcjami, które nie wywołują się bezpośrednio (ze względu na wzorzec sygnału szczelinowego nie mam funkcji, która jest zawsze dostępna po uruchomieniu pętli zdarzeń), dlatego potrzebuję niezależnego przechowywania. W tym celu zaprojektowałem funkcję typu getter, która brzmi podobnie do tego: char *store_data(char *data, int clear) { static char *stored_data = NULL; if(dane == NULL) { if(clear) { przechowywane_dane = NULL; } else { return przechowywane_dane; } } else { przechowywane_dane = dane; } zwróć NULL; } Czy taka konstrukcja jest w porządku, czy powinienem zamiast tego użyć zmiennej globalnej?


title: Czy powinienem testować metody dziedziczone?

text: Załóżmy, że mam klasę **Menedżer** pochodną klasy bazowej **Pracownik** i że pracownik ma metodę **getEmail()**, która jest dziedziczona przez **Menedżer**. Czy powinienem sprawdzić, czy zachowanie metody **getEmail()** menedżera jest w rzeczywistości takie samo jak pracownika? W momencie pisania tych testów zachowanie będzie takie samo, ale oczywiście w pewnym momencie w przyszłości ktoś może obejść tę metodę, zmienić jej zachowanie, a tym samym zepsuć moją aplikację. Jednak wydaje się trochę dziwne, aby zasadniczo przetestować _brak_ wtrącania się kodu. (Zauważ, że testowanie metody **Manager::getEmail()** nie poprawia pokrycia kodu (ani innych metryk jakości kodu (?)) do momentu utworzenia/zastąpienia **Manager::getEmail()**.) ( Jeśli odpowiedź brzmi „Tak”, przydatne byłyby informacje dotyczące zarządzania testami, które są współdzielone przez klasy bazowe i pochodne). Równoważne sformułowanie pytania: Jeśli klasa pochodna dziedziczy metodę z klasy bazowej, w jaki sposób czy wyrażasz (testujesz), czy oczekujesz, że dziedziczona metoda będzie: 1. Zachowywać się dokładnie tak samo, jak zachowuje się w tej chwili baza (jeśli zachowanie bazy się zmienia, zachowanie metody pochodnej nie); 2. Przez cały czas zachowywać się dokładnie tak samo jak klasa bazowa (jeśli zmienia się zachowanie klasy bazowej, zmienia się również zachowanie klasy pochodnej); lub 3. Zachowuj się tak, jak chce (nie dbasz o zachowanie tej metody, ponieważ nigdy jej nie wywołujesz).


title: Powody przejścia z czystego JavaScriptu do biblioteki JavaScript

text: Mając świadomość bezpośrednich korzyści płynących z posiadania przez biblioteki rzeczy zapakowanych w pakiet, co ułatwia codzienną pracę, moje pytanie bardziej skłania się ku temu, że wiele funkcji nie zaimplementowanych w HTML/DOM/CSS stało się dostępnych przy użyciu tych bibliotek. Do wyboru jest wszystko, od efektów wizualnych (13 na tuzin) po bardziej funkcjonalne. Jak widzę dzisiaj, 2014, z HTML5 i CSS3, coraz więcej tych bibliotek wydaje się odgrywać tam rolę, jako rodzaj pomostu między starszymi przeglądarkami, które nie mają możliwości, a nowymi zdolnościami do ich obsługi. Co więcej, wydaje się, że te biblioteki stopniowo zmniejszają obsługę starszych przeglądarek. Daje mi to jako programistę trudną decyzję, czy uaktualnić do następnej wersji z większą funkcjonalnością i stracić obsługę starej przeglądarki, czy pozostać przy starszej wersji z mniejszą funkcjonalnością, ale ze starą obsługą przeglądarek i potrzebą niestandardowego rozwoju w celu uzyskania nowej funkcjonalności. Więc moje pytanie brzmi, czy jest coś jeszcze, co mogłem przegapić, co mogłoby wpłynąć na to, czy zaimplementować bibliotekę jako bazę, czy użyć czystego JavaScript i dodać bibliotekę, gdy jest naprawdę potrzebna?


title: Strategia przywracania stanu za pomocą adresu URL w aplikacjach internetowych

text: To pytanie o nowoczesne aplikacje internetowe, w których ładowana jest pojedyncza strona, a cała późniejsza nawigacja odbywa się za pomocą wywołań XHR i modyfikacji DOM. Możemy użyć bibliotek manipulujących ciągiem skrótu, które pozwalają nawigować po adresach URL i obsługują przyciski wstecz/do przodu. Aby jednak korzystać z tych bibliotek, musimy mieć możliwość przeniesienia interfejsu użytkownika z jednego stanu do innego. **Czy istnieje dobra strategia poruszania się między stanami interfejsu użytkownika, która umożliwia również ich przywracanie od zera po załadowaniu nowego adresu URL?** W złożonej aplikacji może być wiele różnych stanów. Nie chcesz ponownie ładować całego interfejsu użytkownika za każdym razem, gdy zmieniasz stany. Ale nie chcesz też wymagać oddzielnych metod przechodzenia z każdego stanu do każdego stanu. Zazwyczaj potrzebujemy: * Przywrócić stan od zera, kiedy wprowadzisz nowy adres URL lub klikniesz Odśwież. * Przechodź z jednego stanu do drugiego, używając przycisków Wstecz/Dalej. * Przechodź z jednego stanu do drugiego, gdy wykonujesz czynność w swojej aplikacji (np. kliknięcie linku). * Przejdź do pewnych stanów, które nie powinny być dodawane do historii, takich jak te, które pojawiają się po przesłaniu formularza. * Przejdź do niektórych stanów zbudowanych na poprzednim stanie, takich jak lista rozwijana. Gdy wykonujesz działania w swojej aplikacji, pojawia się dodatkowe pytanie, które jest pierwsze: * Czy zmieniasz adres URL, nasłuchujesz zmiany adresu URL i zmieniasz swój stan w odpowiedzi na to? * A może zmieniasz swój stan, a następnie zmieniasz adres URL, ale nic nie robisz w odpowiedzi? Czy ktoś ma jakieś doświadczenie, którym mógłby się podzielić na ten temat?


title: Jak mogę sklonować repozytorium svn, które zmieniło układy z git utrzymującym pełną historię?

text: # Problem Chcę sklonować repozytorium svn za pomocą git-svn. Problem polega na tym, że repozytorium subversion zmieniło układy w `r1235`. # Specyfika Od wersji 1 do 1234 `foo` używał standardowego układu folderów svn z: * /trunk/src * /tags/`version`/src W wersji 1235 autor dodał `bar` do repozytorium. W tym celu zrestrukturyzowali główne repozytorium, tak aby układ folderu wyglądał następująco: * /trunk/foo/src * /trunk/bar/src * /tags/`version`/foo/src * /tags/`version`/bar /src # Cel Potrzebuję nowego repozytorium git, które ma historię `foo` tak, jakby nigdy nie zostało przearanżowane tak, aby zawierało `bar`. # Odpowiednia dokumentacja Praca z niestandardowymi układami jest omówiona w dokumentacji git-svn. Jeśli cała historia jest niepotrzebna (lub jeśli chcę po prostu `bar`), mogę uzyskać to, czego chcę od r1235 na: * `git svn init --stdlayout http://path.to/repo` * edit `repo/ .git/config` dodanie `/foo` do odpowiednich ścieżek (lub `/bar`) ` [svn-remote "svn"] url = http://path.to/repo fetch = trunk/foo:refs/remotes/ trunk branch = branch/*/foo:refs/remotes/* tags = tags/*/foo:refs/remotes/tags/* ` * `git svn fetch -r 1235:HEAD` # Moje próby * `git svn clone - r 1:1234 --stdlayout http://path.to/repo` * edytuj `repo/.git/config` jak wyżej * `git svn fetch -r 1235:HEAD` # Wynik Ostatnie polecenie wydaje się działać, ponieważ ` r1235` \- `HEAD` pobierz. Jednak `git log` pokazuje tylko zatwierdzenia do `1234`. Katalog roboczy również wydaje się być starą wersją.


title: Aplikacje ASP.NET i Windows

text: Obecnie nadal uczę się ASP.NET. Moim celem jest budowanie dynamicznych stron internetowych. Jednak chcę również móc budować niektóre aplikacje dla systemu Windows. Czy łatwo jest nauczyć się formularzy Windows lub WPF po ASP.NET? czy na odwrót jest łatwiej? czyli zacząć od WPF, a następnie przejść do ASP.NET?


title: Integracja korporacyjna: wymiana plików a usługi internetowe

text: _TL;DR_ Coś w rodzaju burzy mózgów: dlaczego integracja systemów poprzez wymianę plików o luźnej strukturze (w przeciwieństwie do integracji z usługami XML sieciowymi) to zły pomysł? _TL Część_ Oferujemy rozwiązanie online dla klientów korporacyjnych (dużych), a wdrażając to często musimy zintegrować się z ich systemami wewnętrznymi (bazy HR, systemy CRM i ERP, znasz ćwiczenie). Jednym z najczęstszych punktów integracji jest to, że musimy mieć informacje o ich pracownikach w naszych wewnętrznych bazach danych. W tym celu opowiadamy się za wymianą informacji za pośrednictwem usług XML Web Services, albo poprzez regularne wywoływanie ich punktu końcowego WS i proszenie o zmiany od czasu `timestamp`, albo wywołanie _nasz_ WS i dostarczenie wszystkich wymaganych informacji. Jasne i przedsiębiorcze i dość modne. Teraz oferujemy: co tydzień ręcznie eksportujemy nasze dane HR do skoroszytu programu Excel, wysyłamy je pocztą e-mail i oczekujemy, że te dane będą tam, gdzie powinny. Nieco lepsza opcja: automatycznie wyeksportowany plik Excel jest udostępniany na dysku sieciowym dostępnym przez VPN. Oczywiście jest to podatne na błędy i nie skaluje się, ale jest to jedyna opłacalna opcja dla naszych klientów. Musimy jakoś przekonać ich do przejścia na Web Services, ale ponieważ ostateczną decyzję o tym, czy nasz system zostanie zaimplementowany, czy nie, podejmuje ktoś bez przygotowania technicznego, musimy albo przedstawić nietechniczne argumenty, albo przedstawić je w sposób, który jest zrozumiałe dla zwykłego śmiertelnika.


Mam zestaw pytań, które mnie nurtują, mam nadzieję, że ktoś będzie w stanie na nie odpowiedzieć tutaj: * Jaki powinien być optymalny zespół (pod względem ról) do napisania dobrej jakości frameworka dla dużego przedsiębiorstwa? * Jakie duże frameworki mogą być dobrymi referencjami pod względem dokumentacji, architektury, jakości implementacji itp.? * Jakie są Twoje założenia dotyczące wielkości zespołów, które opracowały te frameworki? Czekam na odpowiedzi. Dziękuję!


title: Prośba - Odpowiedz a Publikuj-subskrybuj

text: Pracujemy nad integracją dwóch dużych systemów. **System A** to baza danych z danymi pracowników, a **System B** to system zewnętrzny, który służy do codziennego kontaktu z klientami (np. spotkania, dane o lokalizacji, zlecenia, status pracy itd.) . Wdrożymy ESB pośrodku. Istnieją 3 instancje Systemu A i 1 instancja Systemu B. Wynika to z ograniczeń prawnych i nie możemy mieć wszystkich danych Systemu A w tej samej bazie danych. W Systemie B mamy codziennie 20-30 aktywnych kontaktów, gdzie część danych z Systemu A jest wykorzystywana w sposób ciągły. Musimy aktualizować spotkanie, lokalizację i status pracy w Systemie B przez cały dzień. I mam dwa proponowane rozwiązania do integracji tych systemów. **Rozwiązanie A:** Publikowanie-Subskrypcja — System A wysyła wiadomości aktualizacyjne (opiera się to na standardach HL7 ADT), a instancja Systemu B pobiera dane, które są dla nich przeznaczone. Odbywa się to jako transmisja i generuje 1000-10000 wiadomości dziennie. Wyśle informacje z Systemu A do wszystkich pracowników, generując w ten sposób wiadomość dla każdego pracownika w Systemie A (1,2,3). Istnieje tylko podzbiór pracowników z Systemu A, który jest „aktywny” i interesujący dla aktualizacji w Systemie B. Ale komunikaty będą płynąć do WSZYSTKICH pracowników, ponieważ dane są aktualizowane również przez inne systemy. **Rozwiązanie B:** System B prosi o zaktualizowane informacje za pomocą rozwiązania typu żądanie-odpowiedź. Wygeneruje puste połączenia, ale zapyta tylko o pracowników "aktywnych" w Systemie B w danym dniu. Komentarze dotyczące rozwiązań? Za I przeciw? Jakie jest najbardziej „ciężkie” rozwiązanie infrastrukturalne między tymi dwoma? Mam nadzieję, że jest ktoś, kto mógłby mi dać kilka wskazówek :)


title: Wzorzec projektowy do utrzymywania różnych stanów na kartach przeglądarki w jednej sesji

text: Mam aplikację internetową opartą na MVC 4. Gdzie podaję 2 typy logowania, 1. Pracownik i 2. Klient. Za pomocą loginu klienta przedstawiam dashboard i inne rzeczy, o jego zamówieniach itp. Za pomocą loginu pracownika umożliwiam pracownikowi wyszukiwanie jego klientów i zapewniam możliwość wykonywania określonych zadań specyficznych dla klienta. Możliwe, że pracownik po zalogowaniu może wyszukiwać wielu klientów i pobierać każdy z ich danych w wielu zakładkach przeglądarki. Mam trudności z utrzymaniem stanu dla każdej zakładki, jeśli wprowadzę unikalny identyfikator klienta w sesji, ponieważ kolejne kolejne żądanie nadpisze sesję! Aby rozwiązać ten problem, oparłem się na (brudnym) rozwiązaniu opartym na viewbagu, w którym ustawiam numer klienta w viewbag w każdym widoku. Czy istnieje eleganckie rozwiązanie tego problemu? znany wzorzec projektowy?


title: Kolejność oceny wyrażeń

text: Język programowania C firmy K & R stwierdza, że C, podobnie jak większość języków, nie określa kolejności, w jakiej operandy operatora są oceniane. (Wyjątkami są &&,||,?: i ','). Według książki wynik stwierdzenia: printf("%d %d\n",++x,power(2,x)); zależy od kompilatora. Ale to samo mówi w poprzednim wierszu, że cytowałem, że nie przewiduje kolejności oceny, z wyjątkiem ',' i innych. Więc nie sądzisz, że książka sama sobie zaprzecza?


title: Jak bezpiecznie wdrożyć automatyczne logowanie

text: Przeczytałem wiele, wiele, _wiele_ postów o tym, jak „prawdopodobnie źle przechowujesz hasła”. Zawsze odnoszą się do przechowywania haseł na serwerze, do którego loguje się użytkownik; zasadniczo przerabiają (zamierzona kalambur) wszechobecne porady, takie jak upewnij się, że hasła są solone itp. Jednak nigdy nie widziałem artykułu na temat najlepszych praktyk dotyczących przechowywania haseł na _kliencie_, aby klient nie musiał się logować ręcznie za każdym razem, gdy chcą się zalogować; funkcja „zapamiętaj mnie”. Wiele programów ma tę funkcję, od przeglądarek po programy takie jak Dropbox. Czytałem ostatnio stary artykuł o tym, jak Dropbox przechowuje identyfikator na twoim komputerze, który możesz po prostu skopiować/wkleić na innym komputerze, uruchomić Dropbox i być zalogowanym jako urządzenie, z którego uzyskałeś identyfikator; bez logowania, bez niczego i pełny dostęp do konta Dropbox. Wydaje się to naprawdę głupim projektem, ale nie mogę wymyślić lepszego sposobu, aby to zrobić. Nie jestem nawet pewien, jak uniknąć przechowywania czegoś takiego jak plik cookie w postaci zwykłego tekstu. Jeśli go zaszyfrujesz, gdzie przechowujesz klucz do odszyfrowania? Jedynym sposobem, który widzę, aby nie wprowadzać luk w zabezpieczeniach, jest usunięcie funkcji automatycznego logowania i zmuszenie użytkownika do wpisywania hasła za każdym razem, gdy chce skorzystać z usługi, ale jest to walka o użyteczność i użytkownicy są rozpieszczani, że nie będą musieli tego robić. Co mogę przeczytać o bezpiecznym przechowywaniu danych uwierzytelniających lokalnie, aby wdrożyć funkcję automatycznego logowania? Jeśli zasady są zbyt proste dla całego artykułu, to czym one są? Oprogramowanie, o którym mowa, nie powinno zależeć od funkcji, które nie są dostępne na wszystkich platformach (takich jak „brelok” w niektórych dystrybucjach linuksa).


title: Czy podpisujesz umowy cyfrowo czy nadal na papierze? A co myślą klienci?

text: Wszyscy przyzwyczajamy się do zaznaczania pola i umieszczania naszego nazwiska w polu tekstowym, aby utworzyć umowę z linią lotniczą, firmą hostingową lub pobrać oprogramowanie. Jednak z jakiegoś powodu nadal proszę klientów o podpisanie naszych umów na wykonanie strony internetowej na papierze i przesłanie mi skanu. Niewielu narzeka na ten zabieg, ale ja osobiście myślę: co ja robię, robię to po staremu?! Cyfrowe podpisywanie umów byłoby szybsze, wygodniejsze dla klientów i dla mnie oraz łatwiejsze do przechowywania. Wydaje mi się więc, że nadszedł czas, aby zacząć tworzyć umowę online, którą klienci mogą przeczytać, a następnie wydrukować swoje imię i nazwisko oraz zaznaczyć pole „ZGADZAM SIĘ Z TĄ UMOWĄ I DRUKOWUJĄC SWOJE IMIĘ ZGADZAM SIĘ NA PODPISANIE” lub coś w tym rodzaju że. Zapisałbym ich adres IP, dane przeglądarki i czas podpisania. Jeśli naprawdę chcę zapewnić ich tożsamość, mogę połączyć to z OpenID i wymagać od nich zalogowania się za pomocą swojego adresu e-mail, aby upewnić się, że są zalogowani na istniejącym koncie e-mail. Brzmi dobrze dla mnie. Moje pytanie brzmi: czy ta praktyka staje się standardową praktyką w profesjonalnych usługach IT? Czy (jako profesjonalista) to robisz? Jeśli tak, jak reagują klienci? Jakieś wady to robią? EDIT: To pytanie _nie_ dotyczy aspektów prawnych. Chodzi o wspólne praktyki wśród programistów i firm zajmujących się tworzeniem stron internetowych oraz o to, co myślą o tym klienci.


title: W celu przemierzenia M sposób Drzew

text: Jeśli mamy drzewo czterokierunkowe, takie jak pokazane poniżej, i wykonujemy przechodzenie w kolejności, jakie byłyby wyniki przechodzenia w kolejności dla drzewa M-drogowego? W jakiej kolejności odwiedzone zostaną węzły? Kiedy zostanie przetworzona wartość w węźle (przy pierwszej wizycie czy przy drugiej wizycie)? (Jaka byłaby konkretna procedura krok po kroku dla przechodzenia w kolejności dla przykładowego drzewa pokazanego poniżej?) ![zrzut ekranu](http://i.stack.imgur.com/Fpyk5.jpg)


title: Dlaczego procesory ARM dominują na platformach mobilnych, podczas gdy x86 dominuje na platformach stacjonarnych/serwerowych?

text: Prawie wszystkie telefony komórkowe, z wyjątkiem tych produkowanych przez Intela, wykorzystują procesory oparte na architekturze ARM, podczas gdy przemysł desktop/serwer jest zdominowany przez procesory x86. Jakie cechy zapewnia jedna nad drugą w odniesieniu do dominacji, jaką mają w swoich sektorach?


title: Zapewnienie, że przesłane hiscores nie są fałszywe

text: Mam małą grę, dla której chciałbym śledzić globalne wyniki. Podstawa jest prosta: nazwa użytkownika i wynik są przesyłane na serwer w celu przechowywania i późniejszego odpytywania. Jak jednak mam się upewnić, że te wyniki nie są sfałszowane? Oczywiście, tylko ślepe zaakceptowanie przesłanego użytkownika + wynik pozwoli ludziom na telnet w pożądanym wyniku. Aby temu zaradzić, wymyśliłem dwa podejścia: * Suma kontrolna - Oprócz wyniku i nazwy użytkownika aplikacja wysyła sumę kontrolną tych dwóch przy użyciu niejasnego algorytmu i soli. Jeśli ta sama suma kontrolna się nie sumuje, serwer ją odrzuci. Jednak jak łatwo jest odtworzyć użyte sumy kontrolne, biorąc pod uwagę, że jest to aplikacja na Androida? * Przesłanie całej gry - Oprócz wyniku użytkownika, wysyłane są również kroki podjęte w celu uzyskania wyniku. Serwer następnie emuluje grę, aby sprawdzić, czy kroki dają ten sam wynik, a jeśli nie, odrzuca go. Uważam to za najbezpieczniejsze, ale w przypadku niektórych rodzajów gier może to być bardzo trudne, ponieważ czynników jest zbyt wiele. Czy istnieje droga środkowa? Czy są jakieś inne metody warte rozważenia? To nie jest tak, że jest to niezbędne dla bezpieczeństwa narodowego czy coś, ale wolałbym, aby użytkownicy nie zostali z _"HackedYourGame: 999999999 punktów"_ na szczycie listy.


title: schemat bazy danych z nieograniczoną liczbą danych hierarchicznych, które są często modyfikowane

text: Próbuję skonfigurować jakąś aplikację/forum do współpracy z nieograniczoną liczbą wątków; nie ma różnicy między postami, wątkami lub forami. Na każdy post można odpowiedzieć przez nieograniczony czas, a ten sam post może mieć kilkoro dzieci, sam może mieć kilkoro dzieci i tak dalej. Każdy post może mieć również kilku rodziców. Ostateczny wynik bardziej przypominałby mapę myśli niż forum, chociaż możliwe byłoby również użycie go jako zwykłego forum. Jak widzę ludzi używających go: powiedzmy, że zespół omawia tworzenie strony internetowej projektu. Po kilku wątkach rozmowa rozdziela się na równoległe rozmowy na temat kodowania i projektowania. Następnie po chwili dwa węzły końcowe zostają połączone. Rozmowa trwa przez chwilę… Trzecia, niezwiązana rozmowa o stronach internetowych w stylu bauhaus również zostaje podlinkowana, dla odniesienia… itd. Próbuję teraz zbudować dowód koncepcji i nie wiem, jaki projekt bazy danych wybrać. Jak rozumiem, możliwe są dwa wzorce: model listy sąsiedztwa i model zestawu zagnieżdżonego. I jak rozumiem, zwykle preferowany jest zestaw zagnieżdżony. Zbudowałem aplikację w oparciu o zagnieżdżony model zestawu i wiem, dlaczego w większości przypadków jest bardziej przydatna. Coś mnie tu jednak niepokoi: ponieważ zamierzam mieć wielu użytkowników dodawanych wiele liści na wielu różnych węzłach, a odkąd N.S.M. musi przesunąć w lewo lub w prawo całą wiązkę liści za każdym razem, gdy dodaje się rodzeństwo, jaki byłby mój najlepszy schemat bazy danych? Nie zamierzam jeszcze wypuszczać w pełni zoptymalizowanej aplikacji, ale nadal chciałbym zacząć od prawej stopy. Oto kilka moich przemyśleń, chciałbym o nich opinie: * Zostaw dużo miejsca między węzłami, aby węzły nadrzędne były ponumerowane 0, 10000, 20000 itd. To nie jest eleganckie rozwiązanie, ale może się udać * Idź Wróć do modelu listy sąsiedztwa i użyj tabeli node_node, aby połączyć węzły. Mniej wydajne w wyszukiwaniu drzew, ale bardziej wydajne w dodawaniu/usuwaniu węzłów * Całkowicie pozbądź się baz danych i wróć do opartych na plikach, korzystając z kombinacji katalogów/xml do przechowywania danych. Nigdy nie pracowałem z systemami plików do pobierania i przeszukiwania dużych ilości danych, nie wiem, jak by to zadziałało * Czy jest jakiś schemat DB bardziej dostosowany do mojego przypadku, o którym wiesz? Z góry dziękuję


title: Czy do tworzenia stron internetowych preferowany jest język skompilowany, czy interpretowany?

text: Jak już wiesz, istnieją języki kompilowane i interpretowane. Z punktu widzenia wydajności, co jest lepsze podczas odwiedzania strony internetowej? Czy strona internetowa, która została stworzona ze skompilowanym językiem, będzie się szybciej ładować i wykonywać czynności szybciej niż będzie? Chcę dotrzeć do punktu, w którym będę mógł zrozumieć kroki wymagane zarówno w skompilowanej, jak i zinterpretowanej witrynie, aby wprowadzić je na scenę! (w tym przypadku do przeglądarki użytkownika).


title: Java Vs .NET Vs Oracle (DBMS), która technologia jest dla długoterminowej kariery?

text: Chcę wiedzieć, jaki język jest najlepszy dla długoterminowej kariery i jak? Który język powinienem wybrać spośród platformy Java i .NET lub powinienem wybrać język Oracle, taki jak DBMS Language (SQL/PLSQL)? Jestem zdezorientowany? Szczegółowa odpowiedź byłaby mile widziana.


title: Co oznacza Private Cloud?

text: Przeczytałem kilka dyskusji w SE na temat Cloud Computing. Z ich punktu widzenia chmurę rozumiem jako „ośrodek obliczeniowy/przechowywania danych, który jest własnością innego podmiotu; wykorzystujący architekturę sprzętu i oprogramowania, która umożliwia łatwe skalowanie na żądanie, a zatem obsługuje modele skalowalności do wynajęcia”. Ponadto „podmiot będący właścicielem ma duże centrum danych, w którym koncepcje wirtualizacji są wykorzystywane do obsługi wielu różnych klientów korzystających z tego samego sprzętu”. Plus „zakłada się, że nadmiarowość, bezpieczeństwo itp. są zapewniane przez dostawcę”. Czytałem dyskusję w SE o wyjaśnianiu babci Cloud Computing. Idealnie pasują przykłady „ogród kontra supermarket”, „własny dom kontra hotel”. Z takim zrozumieniem nie jestem w stanie wyobrazić sobie „prywatnej chmury”. Szczerze mówiąc, „prywatna chmura” brzmi dla mnie jak oksymoron. (odnosi się do „prywatnego supermarketu”, „własnego hotelu” itp.). Wybacz moją ignorancję. Czym więc jest „chmura prywatna”?


title: Czy rozsądne jest oczekiwanie znajomości całego stosu od dołu do góry?

text: Jestem starszym programistą/architektem/Menedżerem produktu dla systemów wbudowanych. Systemy, z którymi miałem do czynienia, były zazwyczaj małymi lub średnimi bazami kodu - zazwyczaj blisko 25-30K LOC w C, używając 8-16 i 32-bitowych mikrokontrolerów low-end. Systemy zostały w całości zainicjowane przez nasz zespół - co oznacza, że od kodu startowego do końcowego kodu aplikacji albo został napisany przez zespół, albo przynajmniej został dokładnie zrozumiany i utrzymywany przez nas. Teraz, gdybyśmy zaczęli opracowywać bardziej złożone systemy ze złożonymi urządzeniami peryferyjnymi, takimi jak USB OTG i in. (pomyśl, telefony komórkowe z niższej półki), istnieją biblioteki i stosy dostępne komercyjnie i od dostawców chipów, które redukują zadanie do wywoływania odpowiednich interfejsów API i korzystania z tych urządzeń peryferyjnych. Teraz, z punktu widzenia nawyku, nie daje to mi i zespołowi komfortowego poczucia, że nie jesteśmy w stanie zrozumieć całego drzewa kodu z wirtualnymi czarnymi skrzynkami na niższych warstwach. Czy rozsądne jest poświęcanie i rezerwowanie czasu na zagłębianie się w szczegóły implementacji API, zakładając, że to samo wiązałoby się również z zagłębieniem się w szczegóły odpowiednich standardów (ponownie na przykładzie USB)? A może wystarczy dogłębne zrozumienie wykorzystania interfejsów API najwyższego poziomu? To oczywiście zakłada, że dostępne są kody źródłowe do wszystkich bibliotek, które są w prawie wszystkich przypadkach. Edycja: W częściowej odpowiedzi na @Abhi Beckert dokumentacja jest odświeżająco bardzo obszerna i skrupulatnie utrzymana, AFAIK i była w stanie ocenić. Nie mam z nimi długiego doświadczenia. Edit2: Doskonała rada, wszyscy! Dodam, że fazę ewaluacyjną prowadzi tylko 2 deweloperów, w tym ja. Ponadto podkładki mogą być potencjalnie drogie w środowisku osadzonym o ograniczonych zasobach, ale sprawdzę.


title: Jak mierzyć zewnętrzną jakość oprogramowania?

text: Na potrzeby mojej pracy magisterskiej prowadzę badania nad charakterystyką Behavior Driven Development (BDD). Jednym z twierdzeń BDD jest to, że określając wymagania we wszechobecnym języku wspólnie z klientem, oprogramowanie będzie lepiej oceniać jakość zewnętrzną. Innym twierdzeniem BDD jest to, że tworzy czysty kod z dużym pokryciem kodu. W swoim eksperymencie wykonam projekt oprogramowania zarówno w stylu BDD, jak i tradycyjnym, dzięki czemu na koniec mam dwa produkty końcowe. Drugie twierdzenie BDD można łatwo zweryfikować, porównując kod z niektórymi wskaźnikami jakości, takimi jak wiersze kodu, złożoność cykliczna i pokrycie kodu. Jednak nie mogę wymyślić dobrego pomiaru dla pierwszego roszczenia. Czy jest tu ktoś, kto już to zrobił? A może może zaproponować alternatywny eksperyment, który może potwierdzić to twierdzenie?


title: Jako inżynier oprogramowania, kogo powinienem obserwować na Twitterze?

text: Kto w dziedzinie inżynierii oprogramowania i tworzenia oprogramowania używa Twittera do tweetowania o istotnych wydarzeniach w tej dziedzinie?


title: Rozliczanie godzinowe czy za projekt?

text: Jak rozliczasz swoje projekty programistyczne? Czy robisz to na godzinę? Za pracę? Proszę podać w odpowiedzi rodzaj projektu, który wykonujesz. (Komórka, Internet, Komputer, itp... Możesz być bardziej konkretny, jeśli chcesz.) BONUS: Jeśli chcesz podać konkretne kwoty w swojej odpowiedzi, możesz. ;-)


title: Skalowalna obsługa zadań

text: Mamy tabelę zadań, która wyzwala powiadomienie po wstawieniu nowego zadania. Klienci, którzy mogą obsługiwać takie zadania, mogą subskrybować te powiadomienia. Gdy klient otrzyma powiadomienie, może "zablokować" zadanie, aby żaden inny klient nie próbował go przetworzyć. Zajmujemy się również błędami i jeśli zadanie trwa zbyt długo. **Problem:** Klient może jednocześnie obsługiwać tylko X zadań. Przy dużym obciążeniu wszyscy klienci są zajęci wykonywaniem swoich zadań. A nowe miejsca pracy mogą nie być obsługiwane od razu. Jeśli klient nie jest już zajęty, może wysłać zapytanie do tabeli, aby znaleźć zadania, które nie zostały jeszcze przetworzone. Ale jeśli wszyscy klienci będą zajęci przez długi czas (kończą zadania, ale nowe zadania przychodzą w tym samym czasie), te stare zadania nigdy nie zostaną przetworzone. **Pomysł:** gdy klient przetworzy Y zadań, ignoruje wszystkie nowe zadania i wysyła zapytanie do tabeli o stare. Ale nie podoba mi się ten pomysł. Masz jakieś pomysły? Jeśli potrzebujesz więcej informacji, nie wahaj się o nie zapytać.


title: Konstruowanie systemu przechowywania gier

text: Pracuję nad grą **multiplayer**, w której gracz ma wiele miejsc do przechowywania przedmiotów. **Przechowywanie** Przechowywanie to system, który pozwala użytkownikowi deponować przedmioty i je odbierać. Przykładowe typy magazynów: * **Inwentarz** : Tak samo jak w ekwipunku WoW, możesz dodawać przedmioty, upuszczać przedmioty, przenosić przedmioty z gniazda do gniazda. * **Bank** : Bank to coś, co można nazwać super-inwentarzem, który ma limit około 300 przedmiotów **na zakładkę** Bank może mieć maksymalnie 10 zakładek, w których będą przechowywane przedmioty. suma pozycji dozwolonych w banku wynosi 3000 _(10 zakładek pomnożone przez 300 pozycji na zakładkę)_. Jednak w banku wszystkie przedmioty można układać w stosy. * **Ekwipunek** : Ekwipunek jest taki sam jak Ekwipunek, tylko z posortowanymi slotami, tj. Hełm, Ciało, Nogi i jest łącznie 8 slotów. * **Skrzynie i inne** : Tak samo jak Bank, tylko bez zakładek. **Przedmiot w grze** Każdy przedmiot ma swój własny identyfikator. **Tylko niektóre** przedmioty można układać w stosy, chyba że typem przechowywania jest bank lub skrzynia. Stworzyłem system, który ułatwi mi zarządzanie magazynami i jest klasa abstrakcyjna, którą każdy typ magazynu będzie ją rozszerzał: public abstract class PlayerItemStorage { private int size; /** * Przedmioty */ private PlayerItem[] items; /** * Czasami, domyślnie, pozycje pamięci mają id + 1, ze względu na * interfejsy klienta. Brak dokładnego wyjaśnienia, ale jedyną * funkcją, która tego nie robi, jest sprzęt i możliwy BoB */ private boolean IncreaseItem = true; public PlayerItemStorage(int storageSize) { this.items = new PlayerItem[storageSize]; this.size = storageSize; } public PlayerItemStorage(PlayerItem[] items) { this.items = items; this.size = items.length; } /** * Resetuje pamięć */ public void resetStorage() { this.items = new PlayerItem[this.size]; } /** * Pobiera listę przedmiotów * @return lista PlayerItem */ public PlayerItem[] getItems() { return this.items; } /** * Zlicza ile jest elementów o tym samym identyfikatorze. * @param id id pozycji * @return count */ public int count(int id) { int count = 0; for (PlayerItem item : this.items) { if (this.getId(item) == id) { count++; } } liczba zwrotów; } /** * Zlicza, ile przedmiotów znajduje się w ekwipunku * nie wliczając ilości, tylko same przedmioty. * @kwota zwrotu */ public int countItems() { int count = 0; for (PlayerItem item : this.items) { if (this.getId(item) > 0 && item.getAmount() > 0) { count++; } } liczba zwrotów; } /** * Pobiera długość pamięci * @return */ public int getLength() { return this.items.length; } /** * Sprawdza, ile wolnych slotów ma pamięć * @return */ public int freeSlots() { int slots = 0; for (PlayerItem item : this.items) { if (this.getId(item) <= 0) { slots++; } } zwróć sloty; } /** * Znajduje identyfikator przedmiotu w najwcześniejszym slocie. * @param id Identyfikator przedmiotu * @return Identyfikator miejsca */ public int find(int id) { for (int i = 0; i < this.items.length; i++) { PlayerItem item = this.items[i]; if ( this.getId(item) == id && item.getAmount() > 0) { return i; } } return -1; } /** * Pobiera najwcześniejszy wolny slot * @return id slotu */ public int getFreeSlot() { for (int i = 0; i < this.items.length; i++) { if (this.getId(i) < = 0) { powrót i; } } return -1; } /** * Sprawdza, czy w danym slocie znajduje się towar, z podaną kwotą i * id. * @param id Identyfikator przedmiotu * @param kwota Kwota przedmiotu * @param slot Identyfikator gniazda * @return boolean */ public boolean zawieraInSlot(int id, int kwota, int slot) { int found = 0; if (this.items[slot].getAlpha() == id) { for (int i = 0; i < this.items.length; i++) { PlayerItem item = this.items[i]; if (this.getId(item) == id) { if (item.getAmount() >= kwota) { return true; } else { znaleziono++; } } } if (znaleziono >= kwota) { return true; } zwróć fałsz; } zwróć fałsz; } /** * Sprawdza, czy element istnieje w magazynie */ public boolean zawiera(int id) { for (PlayerItem item : this.items) { if (this.getId(item) == id) { return true; } } return false; } /** * {@link #increasedItem} * @param i Index * @return rzeczywisty identyfikator elementu */ private int getId(int i) { if (this.increasedItem) { return this.items[i].getAlpha() ; } zwróć this.items[i].getId(); } /** * {@link #increasedItem} * @param item Obiekt PlayerItem * @return rzeczywisty identyfikator elementu */ private int getId(PlayerItem item) { if (this.increasedItem) { return item.getAlpha(); } zwróć item.getId(); } public abstract boolean add(int id, int kwota); public abstract boolean remove (identyfikator int, kwota int, int fromSlot); } Mam też klasę kontenera, która kontroluje wszystkie magazyny: /** * Klasa kontenera dla wszystkich magazynów odtwarzacza * @author Ben */ public class PlayerStorageContainer { /** * Obiekt Player (Client extends Player extends Entity ) */ publiczny gracz; /** * boolCatach: Jeśli włączone, podczas usuwania/dodawania elementu do WSZYSTKICH magazynów, * sprawdzi, czy akcja zwróciła false, jeśli tak, zatrzyma się od razu i * zwróci false. */ private boolean boolCatch; /** * Wszystkie magazyny, które będzie zawierał odtwarzacz */ private Map<String, PlayerItemStorage> storages = new HashMap<String, PlayerItemStorage>(); public PlayerStorageContainer(Player p) { this.player = p; this.initializePlayerStorages(); } /** * Inicjuje istniejącą pamięć dla odtwarzacza. */ private void initializePlayerStorages() { this.storages.put("inwentarz", new Inventory(this.player)); } /** * Pobiera wymaganą implementację PlayerItemStorage * @param name Nazwa obiektu implementującego * @return Obiekt rozszerzający PlayerItemStorage */ public PlayerItemStorage getStorage(String name) { return this.storages.get(name); } /** * Usuwa element ze WSZYSTKICH magazynów * @param id Identyfikator elementu * @param kwota Kwota elementu * @return Zwraca wartość logiczną, jeśli akcja powiodła się bez żadnych fałszywych * w środku wykonania, zwróci zawsze true if {!boolCatch} */ public boolean remove(int id, int kwota) { for (PlayerItemStorage storage : this.storages.values()) { if (!storage.remove(id, kwota) && this.boolCatch) { zwróć fałsz; } } zwróć prawdę; } /** * Dodaje element do WSZYSTKICH magazynów * @param id Identyfikator elementu * @param kwota Kwota elementu * @return Zwraca wartość logiczną, jeśli akcja zakończyła się sukcesem bez żadnych fałszywych * w środku wykonania, zwróci zawsze true if {!boolCatch} */ public boolean add(int id, int amount) { for (PlayerItemStorage storage : this.storages.values()) { if (!storage.add(id, kwota) && this.boolCatch) { zwróć fałsz; } } zwróć prawdę; } /** * Resetuje wszystkie magazyny */ public void reset() { for (PlayerItemStorage storage : this.storages.values()) { storage.resetStorage(); } } /** * Przełącza {@link PlayerItemContainer#boolCatch} na błędy * @param b */ public void setErrorCatch(boolean b) { this.boolCatch = b; } } # Problem Ten system działa dobrze dla inwentarza i sprzętu - jednak będzie to problem i spowoduje duplikację kodu algorytmu dla typu banku. Ponieważ pamięć typu bank może mieć wiele kart do 10, będziemy musieli albo utworzyć klasę o nazwie Tab i zaimplementować PlayerItemStorage, i umieścić ten sam algorytm na dwóch klasach (Bank i Tab) lub mieć jedną metodę w Banku, a następnie mieć zmienną o nazwie „focusedTab”, która będzie przechowywać identyfikator wybranej karty i sprawi, że metoda add zaakceptuje 3 argumenty _(itemId, amount, tabId)_. Ale zaakceptowanie 3 argumentów będzie problemem. Będę musiał albo zignorować metodę abstrakcyjną add i stworzyć dla niej własną metodę, albo utworzyć 2 metodę abstract adds, jedną z 2 parametrami, jedną z 3, która uważam za zbyt nieuporządkowaną . Czy zaprojektowałem to wszystko niepoprawnie, że mam te problemy? Jak mogę zaprojektować odpowiednią strukturę dla tej całej funkcji przechowywania, aby działała ze wszystkimi rodzajami pamięci, jakie mogę wymyślić? Jeśli nie możesz zrozumieć problemu, mój wątek recenzji kodu może okazać się pomocny **Informacje o tym, jak serwer obsługuje przedmioty** Gdy klient kliknie dowolny przedmiot, w dowolnym interfejsie gry, który obsługuje przechowywanie przedmiotów, wysyła identyfikator slotu do gracza kliknięty ze względów bezpieczeństwa. Serwer używa identyfikatora gniazda jako indeksu tablicy PlayerItem[], aby uzyskać informacje o elemencie.


title: Jakie są wady wzorca ActiveRecord?

text: Jestem ciekawy jakie są wady używania wzorca ActiveRecord dla obiektów dostępu do danych/biznesu. Jedyne, o czym mogę pomyśleć, to to, że narusza zasadę pojedynczej odpowiedzialności, ale wzorzec AR jest na tyle powszechny, że sam ten powód nie wydaje się „wystarczająco dobry”, aby usprawiedliwić nieużywanie go (oczywiście mój widok może być wypaczony, ponieważ często żaden kod, z którym pracuję, nie jest zgodny z _żadną_ z zasad SOLID). Osobiście **nie** jestem fanem ActiveRecord (z wyjątkiem pisania aplikacji Ruby on Rails, gdzie AR wydaje się „naturalne”), ponieważ wydaje mi się, że klasa robi za dużo, a dostęp do danych nie powinien być aktywny do samej klasy do obsługi. Wolę używać repozytoriów, które zwracają obiekty biznesowe. Większość kodu, z którym pracuję, używa wariacji ActiveRecord, w postaci (nie wiem, dlaczego metoda jest logiczna): public class Foo { // properties... public Foo(int fooID) { this .fooID = fooID; } public bool Load() { // Tutaj rzeczy z bazy danych... // mapowanie DataReader na właściwości... bool returnCode = false; if (dr.HasRows) returnCode = true; zwróć kod powrotny; } } lub czasami bardziej "tradycyjny" sposób posiadania `publicznej statycznej metody Foo FindFooByID(int fooID)` dla znalazcy i czegoś podobnego do `public void Save()` do zapisywania/aktualizowania. Rozumiem, że ActiveRecord jest zazwyczaj o wiele prostszy do zaimplementowania i użycia, ale wydaje się trochę _zbyt_ prosty dla złożonych aplikacji i możesz mieć bardziej niezawodną architekturę poprzez enkapsulację logiki dostępu do danych w repozytorium (nie wspominając o ułatwieniu wymiany strategie dostępu do danych, np. może używasz Stored Procs + DataSets i chcesz przełączyć się na LINQ lub coś w tym stylu) Jakie są więc inne wady tego wzorca, które należy wziąć pod uwagę przy podejmowaniu decyzji, czy ActiveRecord jest najlepszym kandydatem do pracy?


title: Budowanie frontendu oprogramowania dla sprzętu, który jeszcze nie istnieje

text: Naszym zadaniem jest zbudowanie frontendu programowego do sterowania nieistniejącym jeszcze urządzeniem sprzętowym. Powinniśmy rozpocząć rozwój około pół roku przed udostępnieniem pierwszego prototypu, projekt jest ograniczony czasowo do jednego roku. Nie jest jeszcze jasne, do czego będzie zdolny sprzęt i wbudowane oprogramowanie. Nie ma jeszcze określonych interfejsów. Będzie to miało wpływ na projekt oprogramowania klienckiego. Jest tylko kilka rzeczy, które naprawdę możemy zbudować, o ile interfejsy nie są szczegółowo określone. Jasne, prawdopodobnie po prostu powiesz: _Napisz próbkę_. Nie jest to jednak łatwe zadanie i cała makieta może sama w sobie okazać się całym projektem. Zastanawiam się nad napisaniem warstwy adaptera, w której mogę później podłączyć dowolne urządzenie, o ile ma obiecane możliwości. Ale chciałabym usłyszeć od Ciebie rady, jak radzić sobie z takimi projektami i unikać możliwych pułapek. Na co powinniśmy zwrócić szczególną uwagę? Jak powinniśmy postępować w takim projekcie? **Dodatkowe informacje:** Tworzymy projekt oprogramowania w stylu SCRUM, ale nie tradycyjnym. Zrobimy dużo z góry, aby stworzyć jasną wizję, aby trafić w pożądane cele i zminimalizować liczbę iteracji. Ponadto mamy jasną wizję tego, co ma dostarczyć sprzęt / oprogramowanie wbudowane, po prostu nie wiemy jeszcze, jak sobie z tym poradzą i czy w ogóle mogą wdrożyć wymagania funkcjonalne. Rozpoczęliśmy dokument, aby zebrać interfejsy, które chcielibyśmy mieć dla oprogramowania klienckiego (ponieważ ktokolwiek określi pierwszy, wygrywa, _g_ ). Mamy również dość jasną wizję tego, jak klient powinien wyglądać, aby zapewnić najlepszą wartość biznesową, ale nie jest jeszcze jasne, czy sprzęt może wspierać nasze koncepcje i prawdopodobnie zajmie trochę czasu w projekcie, zanim będziemy mieli pewność. Jednak powinniśmy jak najszybciej rozpocząć rozwój.


title: Jak znaleźć zastępcę, gdy firma chce kogoś mniej doświadczonego?

text: Powiedziałem firmie, w której pracuję, że chcę się wycofać, ale zostanę przez kilka miesięcy, zanim zgłoszę się w dowolnym miejscu, aby pomóc w rekrutacji mojego zastępcy. Zaproponowałem to, ponieważ jestem jedynym programistą i nie chciałem zostawiać ich bezradnych. Problem polega na tym, że chcą zatrudnić kogoś bardzo słabo wykwalifikowanego, aby uniknąć konieczności płacenia wysokiej pensji. Jeśli o mnie chodzi, to ich firma i mogą ją prowadzić tak, jak chcą. Jednak jeśli chodzi o pomoc w znalezieniu i przeszkoleniu kogoś przed wyjazdem, jestem w sytuacji, w której nie wiem, co robić. Aby dać trochę perspektywy, zbudowałem im średniej wielkości system e-commerce przy użyciu frameworka MVC; jest w tym coś więcej, ale na tym zostawię. Kandydaci, których mi zweryfikują, to ludzie, którzy nigdy nie pracowali jako programiści, stworzyli kilka naprawdę kiepskich, statycznych stron internetowych za pomocą programu WYSIWYG i nazywają siebie projektantami stron internetowych. Wiem, że ci ludzie nie mają szans na sukces. Próbowałem to wytłumaczyć firmie, ale oni nie chcą tego słyszeć; uważają, że jedną z tych osób można wyszkolić i zacząć działać na moim poziomie w ciągu około roku. W rzeczywistości nie sądzę, aby ich strona przetrwała rok, jeśli pójdą tą drogą. Myślę, że może myślą, że po prostu staram się wyglądać dobrze, a nowi kandydaci z jakiegoś powodu wyglądają źle, co wcale nie jest prawdą. Chciałbym zostawić to, nad czym ciężko pracowałem, w kompetentnych rękach. Więc jaka jest etyczna i profesjonalna rzecz do zrobienia tutaj? Po prostu powtarzaj im, że ci kandydaci nie są dobrzy, dopóki nie znajdą przyzwoitego, aż nadejdzie czas, żebym odszedł, w którym momencie zostawiam ich bez nikogo? Albo po prostu zaakceptować, że zamierzają się zniszczyć i zrobić wszystko, co w mojej mocy, aby wybrać najlepszych z kandydatów i nauczyć go/ją tego, co mogę, zanim odejdę? Naprawdę chcę po prostu zrobić tutaj właściwą rzecz, żebym mógł odejść na dobrych warunkach. A jeśli rok później zawiodą, mogę mieć czyste sumienie.


title: Mój potencjalny klient bardzo źle pisze po angielsku. Czy to czerwona flaga?

text: Staram się rozpocząć karierę jako freelancer w oDesk. Jeden z potencjalnych pracodawców zaproponował mi wymarzoną pracę: to tworzenie gier dla znanej firmy. Wynagrodzenie wydaje się słuszne (chociaż za wcześnie na dokładne szacunki). Strona firmy wydaje się całkiem fajna, a gra, nad którą pracowałbym, wydaje się żyć i prosperować. Zadałem sobie również pytanie i powiedziano mi, że używają niekompletnego, wykonanego na zamówienie systemu VCS; brzmi to dla mnie zarówno niesamowicie, jak i przerażająco. Moim głównym zarzutem jest to, że trochę przeszkadza mi styl pisania pracodawcy. Ich słownictwo wydaje się być w porządku, ale w niektórych przypadkach gramatyka jest uboga, a literówki są obfite. Wydaje się to być raczej nieostrożnością niż brakiem umiejętności językowych. Nie zrozum mnie źle: kiedy praca jest właściwa, komunikowałbym się w l33t sp34k, gdyby był to jedyny sposób na przekazanie informacji. Sama nie jestem native speakerem, a mówiąc swobodnie, nie dbam o zdolności językowe innych. Martwię się, czy powinienem potraktować to jako czerwoną flagę, że coś pójdzie nie tak w innych obszarach naszego związku. Z drugiej strony - są twórcami gier i prawdopodobnie tworzą świetną grę. Duża część mnie chce tam jechać - szybko, więc skłaniam się do ignorowania moich zastrzeżeń i przyjęcia pracy. Co myślisz?


title: W jaki sposób system ekspercki może uzyskać jakieś znaczenie ze zdania?

text: Jak system ekspercki może odróżnić następujące scenariusze? Jak moglibyśmy zawrzeć jakieś znaczenie zdania, jeśli w ogóle? Maszyna potrzebuje 1 dnia na wyprodukowanie x jednostek, a wiemy, że dwie maszyny takie jak pierwsza potrzebowałyby 1/2 dnia na x jednostek. Jeśli jednak: ciężarówka przewiezie kontener z punktu a do punktu w ciągu 1 dnia, ale dwie ciężarówki nie przetransportują tego samego kontenera o połowę krócej. Ale jak ustalić logiczną regułę, aby wykluczyć przypisywanie wartości logicznej drugiemu zdaniu? Możliwości przetwarzania zdań opisujących proces, którego nie można podzielić na części (co oznacza, że należy uwzględnić znaczenie „podzielny”/„niepodzielny”), a zatem system ekspercki nie może automatycznie przypisać wartości czasu do proces, który ma być wykonany. Udoskonalony system ekspercki byłby wówczas w stanie uniknąć niepowodzeń planowania.


title: Problemy z polityką ciągłej integracji

text: Obecnie nasz model, w odniesieniu do SVN i zautomatyzowanej kompilacji, wygląda tak ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/aiEY1.png) Co, o ile mi wiadomo, nie było sposób, w jaki SVN miał być używany. Ale proces działa dobrze z technicznego punktu widzenia. Celem jest umożliwienie równoległego uruchamiania tych łańcuchów, przy czym różne osoby pracują nad **nowymi funkcjami** , inni **naprawiają nowe błędy i regresje** oraz w jakiś sposób **odpowiadają na opinie klientów**. Trudność pojawia się w _wyjaśnieniu_ tego, nawet osobom, które są w pobliżu od jakiegoś czasu, i zwykle po tym, jak ktoś popełni błąd i zmieni jeden z tych kroków na coś, co ma dla nich więcej sensu ( _tj_ użycie najnowszej wersji kompilacji do wewnętrznych testów i wysyłanie _zarchiwizowanych_ wersji do kontroli jakości klienta). Nie ustalałem polityki, ale rozumiem, co to jest, więc jestem jedną z osób, które muszą ją wyjaśniać/utrzymać. Robiąc tak wiele razy w ciągu ostatniego roku, wydaje się, że nie spełnia zasady najmniejszego zdziwienia. Jak możemy uczynić ten proces bardziej oczywistym/nudnym?


title: Kod testowy, który wkrótce zostanie zmieniony

text: Moje pytanie brzmi, czy powinienem przetestować kod, o którym wiem, że zostanie zmieniony w krótkim czasie. Robię TDD w rubinach i często spotykam się z tym pytaniem. Interesują mnie najlepsze praktyki w tym zakresie, za i przeciw. Dziękuję. **Aktualizacja** Wyjaśnienie: Moje pytanie brzmi w zasadzie, jak porównać „koszt napisania testu” z „faktem, że kod wkrótce się zmieni” i podjąć decyzję.


title: Karta graficzna do programowania równoległego vs tradycyjne metody

text: Dzięki prostemu wyszukiwaniu w amazon można zauważyć, że nowoczesnym podejściem do programowania równoległego jest użycie karty graficznej. Jednak nadal podchodzę do tego trochę sceptycznie. Mój ostatni komputer ma 8-rdzeniowy procesor, którego potrzebuję, aby zaspokoić wszystkie moje potrzeby równoległe, jeśli potrzebuję więcej, prawdopodobnie użyję MPI przez sieć na moich starych maszynach. Podsumowując, dlaczego i/lub kiedy powinienem używać CUDA lub innej metody wykorzystującej moją kartę graficzną zamiast tradycyjnych metod, takich jak wątki pthreads, wątki java, wątki boost lub nowe wątki C++ 11? A co z wykorzystaniem procesów?


title: Kiedy reintegrować gałąź funkcji?

text: Od SVN 1.5 obsługuje funkcję reintegracji. Zastanawiam się, kiedy powinienem się zreintegrować. Czy należy to zrobić przed wydaniem, czy po wydaniu? Jeśli to zrobię **Przed wydaniem** * Zaleta: Nie zapomnij połączyć się z bagażnikiem. * Wada: Scalona wersja może różnić się od wersji QAed. **Po wydaniu** * Pro: Wersja wydana jest taka sama jak wersja QAed. * Wada: Można pominąć niektóre funkcje z bagażnika. Więc kiedy reintegrujesz się?


title: Czy mogę używać kodu GPL jako danych tekstowych w mojej aplikacji?

text: Zasadniczo zastanawiam się, jak licencje wpływają na legalność wykorzystania kodu źródłowego **jako danych**. Mam tu na myśli _dosłownie_ przechowywanie kodu w bazie danych w postaci stringów i używanie go m.in. w przypadku niektórych eksperymentów z podświetlaniem składni lub innych podobnych działań. Przychodzi mi do głowy kilka scenariuszy: * Mój projekt ma zamknięte źródło i chcę używać kodu o otwartym kodzie źródłowym jako danych. Jeśli przechowuję kod na licencji GPL, czy licencja GPL ma zastosowanie do mojego projektu? A co z innymi licencjami? * Mój projekt jest open-source, ale na licencji m.in. MIT. Ponownie, jeśli przechowuję kod na licencji GPL, czy ma to wpływ na mój projekt? Myślałem o GPL konkretnie ze względu na jej wirusową naturę, ale jeśli inne licencje miałyby zastosowanie, chciałbym o nich również usłyszeć.


title: W jakim segmencie adresów URL masz język? /pl/admin/dashboard czy /admin/pl/dashboard?

text: może myślisz, że to kolejne pytanie zrzutu dotyczące języka w adresie URL, ale mam nadzieję, że tak nie jest! Napisałem na ten temat wiele artykułów, ale żaden z nich nie dotyczył „sekcji witryny” (opisanych poniżej). Programuję nową platformę aplikacji w laravel/php i nadal nie jestem w 100% przekonany, gdzie umieścić slug językowy. Jest wiele miejsc, w których można to ująć - niektóre są lepsze, inne gorsze: * example.com/pl/artykuł * pl.example.com/artykuł * example.com/artykuł?lang=pl Moim osobistym wyborem jest umieść język po domenie - a więc pierwsza opcja z powyższej listy. _**A co, jeśli jesteś w jakiejś specjalnej sekcji, takiej jak admin lub api?_** gdzie w takim razie umieszczasz język? * example.com/ **pl/admin** /dashboard * example.com/ **pl/api/v1** /user/login lub * example.com/ **admin/pl** /dashboard * przykład. com/ **api/v1/en** /user/login (w interfejsie pozostaje to samo: example.com/en/some-article) co wolisz? jakie są wady i zalety? Jedną rzeczą jest to, że używanie języka w pierwszych segmentach jest znacznie łatwiejsze do zaprogramowania niż w przypadku niektórych wariantów... **EDYTUJ:** Używam również **dwóch list dostępnych języków**, aby określić, które języki są dostępne dla aplikacji / **backend** i **frontend** (jeśli aplikacja jest czymś w rodzaju CMS). Np. strona internetowa może być tylko w języku angielskim, ale aplikacja (cms) może być w języku czeskim, angielskim, włoskim... P.S. kogo polecasz używać tylko en, cs czy zrobić to z pełną mocą z cz-CZ, en-US ? dzięki za wszelkie przemyślenia! J.


title: Czy istnieje nazwa, kiedy zespół sprzedaży nieodpowiedzialnie obiecuje nieistniejące funkcje?

text: Często zdarza się, że zespół sprzedaży firmy obiecuje nowe funkcje w celu sfinalizowania sprzedaży. Wiele razy te nowe funkcje są wciąż w fazie rozwoju lub są nadal projektowane. Czasami funkcje są sprzedawane, zanim zespół programistów się o nich dowie. Jeśli klient rozumie, że funkcje nie zostały jeszcze wdrożone, może to pomóc w ukierunkowaniu projektu produktu. Jeśli jednak zespół sprzedaży obiecuje te funkcje w nieokreślonym czasie, może to spowodować znaczny stres dla programistów, którzy są zobowiązani przez kierownictwo do dotrzymywania terminów. Ponadto czasami nieistniejące funkcje są sprzedawane klientom jako ukończone lub bliskie ukończenia, gdy programiści mogą nawet nie znać jeszcze wymagań (niezależnie od kwestii prawnych/etycznych). **Czy istnieje słowo lub wyrażenie, które można wykorzystać do opisania niedoinformowanych/nieodpowiedzialnych/nieetycznych zastosowań tej praktyki?** Przypomina to pełzanie funkcji, ale występuje przed rozwojem lub projektowaniem.


title: Programowanie miejsc pracy dla stopnia naukowego

text: Obecnie jestem na ostatnim roku studiów magisterskich z fizyki na uniwersytecie i zamierzam podjąć pracę, która opiera się głównie na programowaniu. W ramach mojego kursu uczyliśmy się C++, Matlaba, a jako hobby uczyłem się HTML, CSS, JAVA i trochę JavaScriptu. Po dojściu do tego etapu na moim dyplomie zdałem sobie sprawę, że to programistyczna strona fizyki, którą lubię najbardziej. W wolnym czasie pracowałem nad kilkoma aplikacjami na Androida i stronami internetowymi, ale tylko rzeczy, które wykorzystują to, co znam w JAVA, HTML itp. Używanie fizyki w programowaniu jest dobrą zabawą, ale nie chcę ograniczać się tylko do fizyki Oferty pracy. Chcę tylko wiedzieć kilka rzeczy: * Do jakiego rodzaju pracy mogę się ubiegać, który wymagałby umiejętności, które już posiadam / mogę popracować nad posiadaniem w ciągu roku * Czy mogę konkurować z absolwentami, którzy mieli dużo więcej programowania w ich kurs na przykład Informatyka? * Czy są jakieś dodatkowe rzeczy, których potrzebuję w moim CV, zanim zacznę ubiegać się o te prace?


Czy dyrektor odpowiedzialny za jedną odpowiedzialność promuje elastyczność? Jeśli nie, jakie są inne metody na uelastycznienie zajęć? Przez elastyczność rozumiem, że klasa jest w stanie działać poprawnie w dowolnym momencie przy niewielkim (lub nawet bez) wysiłku.


title: użycie Enum z flagami w praktyce?

text: Właśnie przeczytałem dzisiaj kilka rzeczy na enum. Użycie flag z enum było dla mnie czymś ciekawym i nowym. Ale często zastosowania praktyczne i teoretyczne są różne. Przechodzę przez wiele artykułów, które cytowali, były dobre, aby uzyskać koncepcję, ale wciąż zastanawiam się, w jakich sytuacjach można użyć Enums z flagą do przechowywania wielu wartości? Będę bardzo wdzięczny, jeśli możesz podzielić się praktycznym doświadczeniem korzystania z enum z flagami.


title: Czy istnieje zalecany sposób przekazywania programowania naukowego/inżynierskiego programistom C?

text: Mam dużo kodu MATLAB, który musi zostać przeniesiony do C (szybkość wykonania ma kluczowe znaczenie dla tej pracy) jako część procesu zaplecza dla aplikacji internetowej. Kiedy próbuję zlecić ten kod programiście C, zakładam (popraw mnie, jeśli się mylę), że niewielu programistów C rozumie również kod MATLAB (rzeczy takie jak indeksowanie i zarządzanie pamięcią są różne itp.). Zastanawiam się, czy są jacyś programiści C, którzy mogą zalecić mi procedurę do naśladowania, aby najlepiej przekazać, co robi kod? Na przykład, czy powinienem podać kod MATLAB i wyjaśnić, co robi linia po linii? Lub, czy powinienem po prostu podać matematykę/algorytm, wyjaśnić to w prostym języku angielskim i pozwolić programiście C zaimplementować go z tym zrozumieniem na swój własny sposób (np. Czy mogę założyć, że programista rozumie, jak pracować ze złożoną matematyką (tj. urojoną) liczb), jak generować histogramy, wykonywać FFT itp.)? A może istnieje lepsza metoda? Spodziewam się, że nie jestem pierwszym, który musi to zrobić, więc zastanawiam się, czy jacyś deweloperzy C napotkali taką sytuację i mogą podzielić się konwencjonalną wiedzą, jak chcieliby, aby to zadanie zostało przeniesione? Z góry dziękuję za wszelkie uwagi.


title: O czym powinienem pamiętać, pisząc niestandardowe wyceny oprogramowania?

text: Poproszono mnie o wycenę rozszerzenia oprogramowania, które obecnie rozdaję za darmo do użytku przez firmę. Mówią mi, że obecnie używają go na miejscu w połączeniu z pewnymi etapami „przetwarzania końcowego”, które chcieliby włączyć do właściwej aplikacji. O czym powinienem pamiętać podczas pisania ofert na zamówienie oprogramowania niestandardowego lub na zamówienie? Jak mogę upewnić się, że wszystkie moje bazy są objęte ubezpieczeniem? Jakie aspekty niestandardowej wyceny oprogramowania są często pomijane?


title: Jak pomyślnie wydać aplikację mobilną?

text: Obejmuje to wszystko, co przyczynia się do sukcesu aplikacji i nie jest programowaniem. Kilka punktów do rozważenia: * Jak sprawić, by ludzie zauważyli Twoją aplikację, skoro co tydzień są wydawane jej setki? Jak sprawić, by artykuł o Twojej aplikacji został opublikowany na blogu aplikacji mobilnej? Czy powinieneś kupować reklamy? A co z komunikatem prasowym? * Jak nakręcić film promocyjny? Jaki materiał jest dobry? Czy powinieneś wybrać animację, czy materiał z prawdziwego życia? * Jak zrobić stronę projektu dla aplikacji? Czy powinien być prosty w konstrukcji? A co z forum opinii? Czy powinieneś używać standardowego forum, takiego jak uservoice.com? * Na jaki rynek należy wydać aplikację? Czy powinieneś trzymać się jednego, czy tylu, ile możesz? * Czy powinieneś poczekać z wypuszczeniem, aż wszystko się rozwiążesz, czy powinieneś zrobić to natychmiast? Czy jest odpowiedni moment na wydanie Twojej aplikacji?


title: Dobre praktyki projektowania baz danych

text: Niedawno dołączyłem do nowego stanowiska jako programista oprogramowania i podczas rozmowy kwalifikacyjnej wszyscy podkreślali wagę i dumę ze standardów jakości firmy w każdym procesie, który mają. (To był jeden z aspektów, które skłoniły mnie do przyjęcia oferty) Kiedy zacząłem przeglądać bazę danych, zdałem sobie sprawę, że daleko jej do ideału, bycia dobrym i bycia niezłym. Zdałem sobie również sprawę, że wszyscy koledzy z mojego zespołu uważają, że baza danych jest złożona, ponieważ biznes jest złożony. Co zatem jest nie tak z tą bazą danych? * niespójne nazewnictwo * zdenormalizowana tabela (z sprzecznymi danymi) * mnóstwo procedur składowanych i tvf z if/switch/case oparte na wartościach w samych tabelach * tvf zależne od tvf zależne od tvf czyniące kod nieczytelnym i niemożliwym do utrzymania * nie Ograniczenia FK i w niektórych przypadkach PK * brak rozróżnienia między abstrakcją danych a logiką biznesową (zbyt wiele hermetyzowanych TVF) Postanowiłem poruszyć tę sprawę podczas mojej następnej recenzji, ponieważ uważam, że mój kierownik (nie techniczny) nie ma pojęcia, co jest dziać się. Potrzebuję pomocy, aby uzyskać listę aspektów, które należy wziąć pod uwagę, aby ocenić jakość projektu bazy danych, a następnie ocenić wynik naszej bazy danych na tej liście. Pomoże to przynajmniej mojemu menedżerowi podjąć kroki we właściwym kierunku (mam nadzieję). Które punkty należy wziąć pod uwagę, aby ocenić, czy baza danych jest dobrze zaprojektowana? Dobrze zaprojektowany oznacza: * spełnia swoje zadanie * nie pęka (lub robi to w rozsądny sposób) * ma strukturę, która ułatwia utrzymanie i rozbudowę


title: O certyfikatach technicznych

text: Jestem programistą Java/J2EE/Oracle PL-SQL od 5 lat i napisałem egzaminy certyfikacyjne SCJP i SCWCD. Ale to było dawno temu. Planuję teraz uzyskać certyfikat, ale nie wiem, którą ścieżkę wybrać. Jest SCBCD, SCEA itp., ale nie uważam ich za zbyt przydatne. Jakie są renomowane i przydatne certyfikaty, które pomogą mi się uczyć, a także wzmocnią moje CV (podkreślam ten pierwszy nieco bardziej niż ten drugi). Nie mam nic przeciwko zapuszczaniu się w nowe technologie. Dzięki za pomoc.


title: Dlaczego system operacyjny jest oznaczony jako 32-bitowy lub 64-bitowy?

text: Dlaczego niektóre systemy operacyjne są oznaczone jako 32-bitowe, a inne 64-bitowe? Jeśli to procesor wykonuje faktyczne wykonanie, dlaczego system operacyjny dba o to, ile bitów jest używanych?


title: Czy automat skończony jest odpowiednim rozwiązaniem w tej sytuacji?

text: Jako przykład pisałem kod testowy, w którym miałem klasę pralki. Ma stan drzwi, który powinien być otwarty lub zamknięty, a także stan działania, włączony lub wyłączony. Chcę zapobiec zmianie stanu pracy z „wyłączony” na „włączony”, gdy drzwi są „otwarte”, a także uniemożliwić ustawienie drzwi na „otwarte”, gdy maszyna jest „włączona”. Mam tę funkcjonalność uzbrojoną w kilka instrukcji if. Czuje się nieelegancko i może szybko zmienić się w kod spaghetti, jeśli chcę dodać inny stan, który nakłada dodatkowe warunki na zmiany innych stanów. Zastanawiam się, czy automat skończony jest rozwiązaniem tej sytuacji? Czy uprościłoby to dodawanie stanów i definiowanie prawidłowych przejść?


title: Po co używać JSP zamiast serwletów?

text: _(Przepisane do ponownego otwarcia:)_ Jakie są względne zalety serwletów nad JSP i odwrotnie? Czy JSP może być preferowane, ponieważ łatwo jest umieścić kod wewnątrz JSP, lub Servlet, ponieważ dzięki nim kod można oddzielić od widoku? Czy są inne względy? Wszelkie informacje na ten temat będą niezwykle pomocne.


title: Wiele ról w Ruby On Rails

text: Zostałem poproszony o złożenie aplikacji w RoR, która ma wiele ról dla użytkowników. Pomysł polega na tym, że użytkownik będzie miał rolę administratora, moderatora, użytkownika itp., a także będzie miał dział, HR, IT, obsługę klienta itp. Aplikacja będzie miała wyznaczone sekcje dla każdego działu do zarządzania danymi i innymi podstawowymi zadaniami opartymi na CRUD. Aplikacja musi umożliwiać użytkownikowi dostęp tylko do działów, do których jest przypisany, użytkownik może mieć wiele działów, użytkownik może być administratorem jednego działu, ale może być tylko użytkownikiem innego działu. Jaki jest najlepszy sposób na połączenie czegoś takiego?


title: Dlaczego języki kompilujące się do C/C++ generują nieczytelny, zagadkowy kod?

text: Jestem skłonny skompilować określony język do C lub C++, aby uzyskać pewne przyspieszenie. Mój pomysł polegał jednak na generowaniu czytelnego kodu i używaniu struktur takich jak `std::vector` i podobnych wszędzie tam, gdzie mogę, oczekując, że CLANG zoptymalizuje go tak bardzo, jak to możliwe. Zauważyłem, że niektóre języki, które kompilują się do C lub C++, nie są takie. Na przykład patrzenie na kod wygenerowany przez Chicken Scheme jest przerażające. Jest to na przykład fragment wygenerowany z `(fn (a b) (sqrt (* a a) (* b b)))`: float f_(float a,float b){ float b_=a*a; pływak c_=b*b; pływak d_=b_+c_; pływak e_=sqrt(d_); powrót e_; }; Czy jest jakiś szczególny powód, dla którego te języki to robią? Czy moje podejście jest w pewnym sensie błędne? EDYCJA: żeby było jasne, jest to przykład "czytelnego" kodu wygenerowanego z mojego języka. Spójrz na kod wygenerowany z Chicken Scheme i wygląda jak instrukcja budowy UFO napisana w obcym języku.


title: Najlepsze praktyki Ruby Sinatra dotyczące struktury projektu

text: Wiele osób chwali zdolność Sinatry do tworzenia prostych projektów w jednym pliku. To świetnie i wszystko, ale co, jeśli chcę użyć Sinatry do nieco większego projektu? Jestem całkiem nowy w Ruby jako całości, ale już znalazłem kilka sposobów na stworzenie aplikacji Sinatra z oddzielnymi plikami modeli, partycjonowaniem różnych grup lub adresów URL na pojedyncze pliki itp. Ale czy jest jakaś najlepsza praktyka?


title: Jakie konkretne praktyki można nazwać „wykonaniem oprogramowania” zamiast „inżynierią oprogramowania”?

text: Chociaż nie jest to nowy pomysł, wydaje się, że w ciągu ostatnich kilku lat nastąpił duży wzrost zainteresowania rzemiosłem oprogramowania (zwłaszcza często polecanej książki Clean Code, której pełny tytuł to Clean Code: A Handbook of Agile _Software Craftsmanship_). Osobiście postrzegam rzemiosło oprogramowania jako dobrą inżynierię oprogramowania z dodatkowym zainteresowaniem zapewnieniem, że efekt końcowy będzie przyjemnością z pracy (zarówno jako użytkownik końcowy, jak i osoba utrzymująca to oprogramowanie) - a także, że skupia się bardziej na poziomie kodowania rzeczy niż procesy wyższego poziomu. Posłużmy się analogią – w latach 50. i 60. wzniesiono wiele budynków w bardzo nowoczesnym stylu, które w niewielkim stopniu uwzględniały ludzi, którzy w nich mieszkali, ani to, jak te budynki będą się starzeć z upływem czasu. Wiele z tych budynków szybko przekształciło się w slumsy lub zostało zburzonych na długo przed ich przewidywanym okresem życia. Jestem pewien, że większość programistów, którzy mają za sobą kilka lat, doświadczyło podobnych baz kodu. Jakie są konkretne rzeczy, które rzemieślnik oprogramowania może zrobić, a których inżynier oprogramowania (prawdopodobnie zły) może nie?


title: Które rzeczy natychmiast dzwonią na alarm, gdy patrzysz na kod?

text: Kilka tygodni temu uczestniczyłem w wydarzeniu poświęconym rzemieślnikom oprogramowania i jednym z komentarzy było: „Jestem pewien, że wszyscy rozpoznajemy zły kod, gdy go widzimy” i wszyscy kiwali głowami mądrze bez dalszej dyskusji. Takie rzeczy zawsze mnie martwią, ponieważ istnieje truizm, że wszyscy myślą, że są ponadprzeciętnymi kierowcami. Chociaż myślę, że potrafię rozpoznać zły kod, chciałbym dowiedzieć się więcej o tym, co inni uważają za zapach kodu, ponieważ rzadko jest to szczegółowo omawiane na blogach i tylko w kilku książkach. W szczególności myślę, że byłoby interesujące usłyszeć o wszystkim, co jest zapachem kodu w jednym języku, ale nie w innym. Zacznę od prostego: > **Kod w kontroli źródła, który ma wysoki odsetek zakomentowanego kodu** > \- dlaczego tam jest? czy miał zostać usunięty? czy jest to w połowie gotowy kawałek > pracy? może nie należało tego komentować, a robiło się tylko wtedy, gdy ktoś > coś testował? Osobiście uważam, że tego typu rzeczy są naprawdę irytujące, nawet jeśli są to tylko dziwne linie tu i tam, ale kiedy widzisz duże bloki przeplatane resztą kodu, jest to całkowicie nie do przyjęcia. Jest to również zwykle wskazówka, że reszta kodu również ma wątpliwą jakość.


title: Czy „Wzorce analityczne: modele obiektów wielokrotnego użytku” nadal są dobrą książką do wykorzystania w swojej tematyce?

text: Czy „Analysis Patterns: Reusable Object Models” Martina Fowlera (opublikowana w 1996 r.) nadal jest dobrą książką do wykorzystania w treści, którą obejmuje? Czy istnieją inne dobre książki, które obejmują tę samą treść? Czy jest więcej aktualnych książek? **Aktualizacja:** czy są jeszcze jakieś odpowiedzi na to pytanie, a także odpowiedzi dotyczące drugiej części dotyczącej książek alternatywnych?


title: Jak wypada porównanie NUnit for C# z funkcją testów jednostkowych zintegrowaną z Visual Studio

text: Muszę pracować w zespole, aby opracować aplikację desktopową średniej skali, stworzoną przy użyciu C# .NET. Wcześniej nie stosowałem testów jednostkowych i programowania opartego na testach. Zdaję sobie sprawę, że istnieje wiele narzędzi i frameworków do testów jednostkowych aplikacji C#. W tej chwili znam Nunit i zintegrowane z Visual Studio narzędzie Unit Testing. Chciałbym wiedzieć, jak te dwie rzeczy się porównują?


title: Jak mogę ukryć swój podpis w programie?

text: Mamy kurs programowania na uniwersytecie, a koledzy zadają kilka pytań dotyczących programowania w naszej grupie na Facebooku. Trochę się waham, czy podzielić się wszystkimi moimi programami, zwłaszcza jeśli jest to coś fajnego dla jednego z zadań, ponieważ są one oglądane przez TA i mogą zauważyć, że ktoś ma ten sam program i zacząć zadawać pytania, skąd on się wziął z. Mimo to czasami chciałbym udostępnić swój kod, aby pomóc innym, ale nie chcę, aby ludzie po prostu chwytali moją pracę. _(Wyjaśnienie: wolno nam współpracować przy zadaniach)_ To oczywiście cienka linia. Chociaż chcę pomóc niektórym ludziom, obawiam się, że mogą nie mieć akademickiej uczciwości, aby samodzielnie przepisać kod. Większość moich kolegów ze studiów nie jest zbyt zaawansowana w swoich umiejętnościach, więc uchodziłoby mi na sucho, powiedzmy, ukrywanie mojego imienia w zakodowanym w Base-64 ciągu znaków umieszczonym w dyskretnym miejscu. Mimo to, może to być zbyt oczywiste, aby losowy ciąg siedział wokół. **Jakie są dostępne opcje, aby ukryć moje imię w programie tak, aby nie wyglądało podejrzanie?** Widziałem w CodeGolf, że zmienili ascii art w inne rzeczy podczas oceny. Czy istnieją podobne strategie, których mógłbym użyć? Idealnym rozwiązaniem byłoby coś, co wygląda jak coś, co pasuje dyskretnie, ale w rzeczywistości ma funkcję udowodnienia, że kodowałem to od początku. Wyjaśnienie: _(Przepraszam, powinienem był to powiedzieć wcześniej)_ Możemy współpracować, ale musimy wyjaśniać nasze programy TA, aby zdobyć punkty. Po prostu dla satysfakcji ukrywanie niektórych Easter Eggów w kodzie innych, jeśli wycieknie, zwłaszcza, że może być kusząca wymiana programów, aby sprawdzić, czy odpowiedzi na problemy, które generują, są równoważne itp. lub zobaczyć, jak inni rozwiązują problem.


title: Licencjonowanie Mongo (AGPLv3)

text: Do mojego produktu dołączę MongoDb(AGPLv3). Mój produkt to SaaS, nie instaluję tego bezpośrednio u klienta. Moje oprogramowanie to witryna ASP.NET MVC. Ale sterowniki MongoDb dla .Net są pod Apache Moje pytania to: 1) Czy powinienem licencjonować oprogramowanie na licencji AGPLv3, jeśli używam Mongo? Używam ich w sterownikach napisanych na Apache, ale gdzieś słyszałem, że jeśli używasz komponentu GPL w swoim oprogramowaniu, musisz licencjonować cały swój produkt na licencji GPL 2) Jeśli licencjonuję swoją witrynę na AGPLv3, czy powinienem dostarczyć kod dla wszystkich klientów? Dziękuję za odpowiedzi?