title: Bezpieczne interfejsy Command-Query-Separation i wielowątkowość

text: Podoba mi się wzorzec separacji zapytań poleceń (z OOSC / Eiffel - w zasadzie albo zwracasz wartość, albo zmieniasz stan klasy - ale nie jedno i drugie). Ułatwia to wnioskowanie o klasie i pisanie klas bezpiecznych dla wyjątków. Teraz, w przypadku wielowątkowości, napotykam poważny problem: oddzielenie zapytania i polecenia w zasadzie unieważnia wynik zapytania, ponieważ wszystko może się zdarzyć między tymi 2. Więc moje pytanie brzmi: jak radzisz sobie z separacją zapytań poleceń w środowisko wielowątkowe? * * * Przykład doprecyzowania: Stos z separacją zapytań poleceń miałby następujące metody: * push (polecenie) * pop (polecenie — ale nie zwraca wartości) * top (zapytanie — zwraca wartość) * puste (zapytanie) Problem polega na tym, że mogę uzyskać status pustego, ale wtedy nie mogę polegać na tym, że top naprawdę pobierze element, ponieważ między wywołaniem empty a wywołaniem top stos mógł zostać opróżniony. To samo dotyczy popu i topu. Jeśli dostanę przedmiot za pomocą góry, nie mogę być pewien, że przedmiot, który wyskakuję, jest taki sam. Można to rozwiązać za pomocą zewnętrznych zamków - ale nie jest to dokładnie to, co nazywam projektowaniem bezpiecznym dla wątków.


title: Jakie jest kanoniczne odniesienie do probabilistycznych struktur danych?

text: Słyszałem o probabilistycznych strukturach danych, takich jak listy przeskakiwania i filtry Blooma, które są niezwykle przydatne i chciałbym ogólnie dowiedzieć się o nich więcej. Czy istnieje kanoniczne odniesienie na ten temat na poziomie Cormena i in.?


title: BDD: Pierwsze kroki

text: Zaczynam od BDD i to jest moja historia: Funkcja: Miesiące i dni do dni Aby widzieć miesiące i dni jako dni Jako fan konwersji dat potrzebuję strony internetowej, na której użytkownicy mogą wprowadzać dni i miesiące i konwertować je na dni. Mam pewne wątpliwości... Czy powinienem napisać swoje scenariusze przed kodowaniem czegokolwiek, czy powinienem najpierw napisać scenariusz, a następnie napisać kod, ponownie napisać scenariusz, a następnie napisać kod i tak dalej... ? Jeśli mam napisać moje scenariusze wcześniej, czy moje kroki mogą zostać zatwierdzone, a kod produkcyjny nadal nie zostanie wykonany? Kiedy powinienem przeprowadzić refaktoryzację mojego kodu? Po wykonaniu funkcji czy po każdym wdrożeniu scenariusza?


title: Etyka i najlepsze praktyki przy forkowaniu bazy kodu

text: Mam pytanie co do właściwych najlepszych praktyk i etycznego kodu forkingowego. Wziąłem bazę kodu na licencji Creative Commons Attribution-NonCommercial-ShareAlike 3.0 i wprowadziłem do niej znaczące zmiany, aby dopasować je do moich potrzeb. Czuję, że moja wersja może przynosić korzyści innym i chcę ją redystrybuować. Nie jestem pewien, jakie mam swobody w zakresie redystrybucji lub co jest etycznie i moralnie akceptowane. Czy mogę zmienić nazwy projektów? Czy powinienem rozpocząć nową wersję v.1 czy kontynuować od oryginalnego numeru wersji? Co uważa się za właściwe przypisanie autorowi oryginalnego? Czy powinienem skonsultować się z autorem i poprosić o pozwolenie przed zwolnieniem (chociaż on już o tym wie)?


title: Czy w społeczności programistów dopuszczalne jest kopiowanie oprogramowania typu open source i rozgałęzianie go?

text: Czy ogólnie rzecz biorąc, rozsądnego programisty, uważanego za moralnie akceptowalnego, jest wziąć gałąź repozytorium open-source i zacząć wprowadzać w nim zmiany i wywoływać własne? Zabrałbyś to do innego open-source. Załóż, że połączysz się z oryginałem. Zauważ, że jest to kwestia tego, co uważa się za dopuszczalne, a _nie_, co jest legalne. Jeśli to jest w porządku, gdzie jest linia określająca, jak bardzo się zmieniasz, która pozwala nazywać to swoim własnym?


title: Migracja z PHP do ASP .NET MVC

text: Planuję migrację serwisu z PHP do ASP .NET MVC. Jednak ze względu na to, że serwis jest duży i migracja nie może być wykonana w krótkim czasie, planuję używać jednocześnie stron MVC i PHP. Pomysł polega więc na zastąpieniu każdej strony PHP lub grupy stron odpowiednikiem MVC. Muszę przerobić każdą stronę i przepisać ją ogólnie, więc pomyślałem, że z różnych powodów mogę równie dobrze przejść do frameworka ASP .NET MVC. Pytanie brzmi, czy ktoś wie, jakie problemy napotkam podczas robienia tego? Oto kilka, o których pomyślałem: \- Loginy \- Planuję przezwyciężyć to za pomocą żądania ajax do witryny ASP .NET w tle i oddzielnego przechowywania informacji logowania dla asp .net. \- Sesje \- Nie jestem pewien, jak mogę udostępniać sesje ani czy w ogóle będę musiał. Poza tym nie jestem pewien, czy pojawi się coś innego. Ktoś doświadczył, że ma kilka rzeczy do powiedzenia?


title: Czego mogę użyć do wygenerowania dokumentacji API z moim niestandardowym formatowaniem?

text: Chcę automatycznie generować dokumentację dla projektu java, ale chciałbym mieć dla niego własną, niestandardową stylizację. Jako przykład weźmy stackoverflow api (stronę opisu metody), czy można to zrobić za pomocą zautomatyzowanego narzędzia? Czy może mnie do tego „zbliżyć”? Nie miałbym nic przeciwko ręcznej zmianie kilku rzeczy, aby osiągnąć pożądany wynik (tj. nie musi być w 100% zautomatyzowany)


title: Czy komentarze pierwszej osoby rozpraszają uwagę i są nieprofesjonalne?

text: Właśnie znalazłem się pisząc następujący komentarz w jakimś (archaicznym Visual Basic 6.0) kodzie, który pisałem: If WindowState <> 1 Then „Formularz nie jest zminimalizowany, więc możemy bezpiecznie zmienić jego rozmiar”… Zakończ, jeśli nie jestem pewien dlaczego podświadomie używam w komentarzach słowa „my”. Podejrzewam, że dzieje się tak, ponieważ wyobrażam sobie, że ktoś przechodzi przez kod, tak jakby faktycznie „wykonywał” wszystkie polecenia w każdej linii, a nie tylko obserwował, jak się dzieje. Z takim nastawieniem mogłem użyć słowa „Mogę zmienić rozmiar”, ponieważ to ja „robię” to obecnie, lub „możesz zmienić rozmiar”, tak jakbym rozmawiał z kimkolwiek „robi” to w przyszłości , ale ponieważ najprawdopodobniej wystąpią oba te przypadki, używam „my” tak, jakbym przeprowadzał kogoś innego przez mój kod. Mogę po prostu przepisać to jako „można zmienić rozmiar” i uniknąć tego problemu, ale wzbudziło to moją ciekawość: czy powszechne jest używanie takiej pierwszej osoby w komentarzach, czy jest to uważane za rozpraszające i/lub nieprofesjonalne?


title: Jak zatrudnić architekta kontraktowego/outsourcingowego do

text: Firma, w której pracuję, ma starszą aplikację, którą zamierzamy przepisać i udoskonalić przy użyciu bardziej nowoczesnych technologii. Jesteśmy bardzo małą firmą (5 osób) i nie mamy zasobów, aby zatrudnić stałego architekta na pełen etat, dlatego poszukujemy architekta jako konsultanta na krótkoterminowe (około 6 miesięcy) zaangażowanie, aby pomóc nam zaprojektować oprogramowanie a następnie zajmiemy się (lub skorzystamy z dodatkowej augmentacji personelu) opracowaniem w oparciu o projekt. Przygotowaliśmy listę ogólnych wymagań wysokiego poziomu, a także kilka innych list bardziej szczegółowych wymagań funkcjonalnych. Jak wykonalne jest to, co próbujemy zrobić? Jakie informacje powinniśmy przygotować, abyśmy mogli dostarczyć potencjalnym kandydatom wystarczającą ilość informacji, aby mogli ustalić, czy będą w stanie wymyślić dla nas projekt, który możemy przejąć i od którego możemy się rozwijać? O co powinniśmy ich poprosić, aby oprzeć naszą decyzję o zatrudnieniu?


title: Czy zmuszanie użytkownika do dodawania cyfr lub wielkich liter naprawdę wzmacnia hasło?

text: Niedawno moja uczelnia zaktualizowała procedurę przechowywania haseł i ma kilka kryteriów, takich jak to, że hasło musi zawierać cyfrę, symbol i wielką literę oraz wymaga długości. Realistycznie rzecz biorąc, kiedy przeprowadzany jest atak brute force / słownikowy, czy nie ułatwia to osobie złamania tego, który działa? Rozumiem, że ma to na celu uniemożliwienie ludziom robienia rzeczy takich jak „hasło”, ale co z takim, jak „nigdy nie zgadniesz mojego hasła”?


title: Jak nadążyć za światem Railsów?

text: Jak powinienem być na bieżąco z ciągle zmieniającą się społecznością Railsów? Od roku próbuję uczyć się Railsów z przerwami, a ceglaną ścianą, na którą ciągle wpadam, jest fakt, że staram się zrównoważyć poznawanie większości najlepszych praktyk społeczności Rails, a one ciągle zmieniają kierunek. Na przykład, oczywiście muszę nauczyć się Railsów i Rubiego (z obydwoma wykonałem trochę pracy, ale trochę zapomniałem). Kiedy używałem go wcześniej, były to wciąż Railsy 2.3.4, więc teraz Railsy 3 są dostępne i zmieniły kilka rzeczy; Nie jestem pewien, czy Ruby 1.9 miał jakieś większe zmiany. Podoba mi się moja kontrola wersji, a świat Rails jest solidnie za Git, więc muszę go używać (znowu używałem go wcześniej, ale nie ostatnio). Chcę mieć pewność, że moja aplikacja jest solidna, więc chcę pisać testy; Wydaje się, że nowym trendem w Railsach jest używanie RSpec lub podobnych frameworków BDD zamiast wbudowanego frameworka testowego oraz mocków/fabryk zamiast osprzętu. Bardzo trudno jest mi nadążyć za wszystkimi rzeczami, które muszę zdobyć, aby odnieść sukces przy użyciu Rails, i wydaje się, że zawsze się zmienia i kończę się sfrustrowany, ponieważ wybiorę coś, a potem kiedy będę badał, jak to zrobić coś, co znalazłem w wielu postach na blogu, które mówią, że już tego nie używaj, zamiast tego użyj tej nowej rzeczy. Więc muszę zapytać, jakie to ma znaczenie? Jeśli mam zamiar wrócić do Railsów, oczywiście chcę używać Rails 3. Użyłem Gita, więc mogę się tego trzymać. Czy powinienem w ogóle zawracać sobie głowę RSpec/HAML/SASS/cokolwiek innego, co „znawcy” są podekscytowani, czy powinienem po prostu skupić się na opanowaniu frameworka i trzymać się wbudowanych rzeczy (np. użyć wbudowanego silnika ERB do HTML, Test: :Jednostka do testowania, Urządzenia zamiast makiet/fabryk itp.) tak dużo, jak to możliwe (głupie pytanie, wiem, ale sposób, w jaki działa mój mózg, zawsze jestem rozdarty między robieniem najłatwiejszej rzeczy, która przyniesie mi korzyść, a robieniem rzeczy, które "właściwy" sposób, jak sugerują naprawdę wysokiej klasy faceci), abym mógł skupić się na faktycznym rozwoju mojej aplikacji? Czy powinienem rozszerzyć to również na JavaScript, co oznacza, że powinienem powiedzieć, że powinienem to zrobić i użyć RJS, czy rzeczywiście warto użyć jQuery (użyłem jQuery do mojej pracy .NET, chociaż w żadnym wypadku nie jestem ekspertem) ze względu na korzyści? Chciałbym "złapać" stos, którego mogę używać i nie odbiegać, ale znowu ciągle się zastanawiam: "Jeśli najlepsi faceci Rails używają teraz XXX, czy krzywdzę się, nie przełączając się na to sam?" Na przykład chciałbym zdecydować się w 100% na: * Framework: Rails (oczywiście) Źródło * Kontrola: Git Test Framework: * Test::Unit w/Factories HTML Engine: * ERB Javascript Framework: jQuery, ale za każdym razem, gdy tego spróbuję z tyłu mojego nagłówka jest głos mówiący, że „robię to źle” i zamiast tego powinienem używać RSpec/Soulda/HAML/library du jour.


title: Jak akceptujesz argumenty w pliku main.cpp i odwołujesz się do innego pliku?

text: Mam podstawową wiedzę na temat programowania i obecnie uczę się C++. Jestem w początkowej fazie budowania własnego programu CLI dla Ubuntu. Jednak trafiłem na kilka przeszkód i zastanawiałem się, czy mógłbym uzyskać jakieś wyjaśnienie. Program, nad którym pracuję, nazywa się „sat” i będzie dostępny tylko z wiersza poleceń. Mam główny.cpp. Jednak moje prawdziwe pytanie dotyczy raczej „najlepszych praktyk” w zakresie programowania/organizacji. Kiedy mój program "sat" jest wywoływany, chcę, aby pobierał dodatkowe argumenty. Oto przykład: > sat zadanie podzadanie Nie jestem pewien, czy zadanie powinno znajdować się we własnym pliku task.cpp dla lepszej organizacji, czy też powinno być funkcją w main.cpp? Jeśli zadanie powinno znajdować się we własnym pliku, w jaki sposób akceptujesz argumenty w pliku main.cpp i odwołujesz się do innego pliku? Jakieś przemyślenia na temat preferowanej metody i materiałów referencyjnych do tworzenia kopii rozumowania?


title: Czy powinieneś stworzyć klasę w ramach metody?

text: Zrobiłem program w Javie będący implementacją tego projektu: http://nifty.stanford.edu/2009/stone-random-art/sml/index.html. Zasadniczo tworzysz wyrażenie matematyczne i używając współrzędnych piksela jako danych wejściowych, tworzysz obraz. Po początkowym zaimplementowaniu tego w serialu, następnie zaimplementowałem to równolegle ze względu na fakt, że jeśli rozmiar obrazu jest zbyt duży lub jeśli wyrażenie matematyczne jest zbyt złożone (szczególnie biorąc pod uwagę fakt, że zrobiłem wyrażenie rekurencyjnie), zajmuje to naprawdę długo. Podczas tego procesu zdałem sobie sprawę, że potrzebuję dwóch klas, które implementują interfejs `Runnable`, ponieważ musiałem wprowadzić parametry metody `run`, czego nie wolno robić bezpośrednio. Jedna z tych klas okazała się średniej wielkości statyczną klasą wewnętrzną (jednak niewystarczająco duża, aby utworzyć dla niej niezależny plik klasy). Drugi jednak potrzebował tylko kilku parametrów, aby określić niektóre indeksy i rozmiar pętli for, którą uruchamiałem równolegle - oto jest: class DataConversionRunnable implementuje Runnable { int jj, kk, w; DataConversionRunnable (kolumna int, macierz int, szerokość int) { jj = kolumna; kk = macierz; w = szerokość; } public void run() { for(int i = 0; i < w; i++) colorvals[kk][jj][i] = (int) ((raw[kk][jj][i] + 1.0) * 255 / 2,0); zwiększLicznik(); } } Moje pytanie brzmi, czy powinienem uczynić ją statyczną klasą wewnętrzną, czy mogę po prostu utworzyć ją w metodzie? Jaka jest ogólna konwencja programowania zastosowana w tym przypadku?


title: Wzorzec projektowy do pomijania kroków w kreatorze

text: Projektuję elastyczny system Wizard, który prezentuje kilka ekranów do wykonania zadania. Niektóre ekrany mogą wymagać pominięcia na podstawie odpowiedzi na monity na jednym lub kilku poprzednich ekranach. Warunki pominięcia danego ekranu muszą być edytowalne przez nietechnicznego użytkownika za pomocą interfejsu użytkownika. Wiele warunków wystarczy połączyć ze słowem „i”. Mam na myśli wstępny projekt, ale wydaje się nieelegancki. Zastanawiam się, czy istnieje lepszy sposób podejścia do tej klasy problemu. **Projekt wstępny** **UI** ![Makieta UI](http://i.stack.imgur.com/biEbk.png) gdzie Pierwsza kolumna pozwala użytkownikowi wybrać pytanie z poprzedniego ekranu. Druga kolumna pozwala użytkownikowi wybrać operator odpowiedni do typu zadawanego pytania. Trzecia kolumna pozwala użytkownikowi wprowadzić jedną lub więcej wartości w zależności od wybranego operatora. **Model obiektowy** public enum Operacje { ... } public class Warunek { int QuestionId { get; ustawić; } Operacje Operacja { get; ustawić; } Lista<obiekt> Parametry { get; zestaw prywatny; } } Lista<Warunek> pageSkipConditions; **Controller Logic** bool allConditionsTrue = pageSkipConditions.Count > 0; foreach (Warunek c w pageSkipConditions) { allConditionsTrue &= Evaluate(previousAnswers, c); } // ... private bool Evaluate(List<Answers> previousAnswers, Condition c) { switch (c.Operation) { case Operations.StartsWith: // logika dla tej operacji // etc. } }


title: Inicjowanie klas pochodnych w ten sam sposób

text: Mam klasę Base, która ma kilkoro dzieci, powiedzmy A, B, C. Do celów testowych chciałbym zakpić te klasy pochodne, wywodząc się z nich. Tak więc MockA wywodzi się z A, MockB wywodzi się z B i tak dalej. Problem polega na tym, że MockA, MockB, ... wszystkie dziedziczą chronione elementy z Base, które muszą być ustawione w ten sam sposób w każdej klasie mock. Kod wygląda tak: MockA::init() { x = 1; // odziedziczone z bazy y = "abc"; // dziedziczone z bazy z = 0.5; // odziedziczone z bazy } MockB::init() { x = 1; // odziedziczone z bazy y = "abc"; // dziedziczone z bazy z = 0.5; // odziedziczone z bazy } i tak dalej. Więc moje pytanie brzmi, jak mogę uniknąć inicjalizacji wycinania i wklejania? Czy mogę to osiągnąć bez dotykania Base, A, B, C, ...?


title: Wywołaj skrypt przez sieć

text: Mam skrypt Pythona na pudełku, które chcę wywołać z serwera Java przez sieć. Wiem, że mogę uruchomić serwer po stronie Pythona, a następnie połączyć się z nim ze strony Java, ale próbuję sprawdzić, czy istnieje sposób na uniknięcie obciążenia związanego z uruchomieniem serwera po stronie Pythona. Czy jest inny sposób na zrobienie tego?


title: czy kodowanie jest ważne?

text: Czy kodowanie jest ważne, aby być dobrym w informatyce? Czy należy zaimplementować algorytm, aby dobrze go poznać? Pamiętam idiom profesora CS, że " **Nigdy nie koduję"**


title: Uwierzytelnianie po stronie klienta za pomocą podpisów zamiast haseł

text: Chcę zapisać pewne dane wygenerowane przez użytkownika z podpisem użytkownika, który je wygenerował (załóżmy, że użytkownik musi wypełnić jakieś formularze danymi i chcę, aby podpisał dane zapisane). Po stronie serwera jest jakiś losowy język serwera (który ma wystarczająco duże biblioteki, aby obsłużyć wszystko, co muszę zrobić), po stronie klienta jest Javascript (a aplikacja internetowa to SPA, aplikacja jednostronicowa). Komputer kliencki może być komórką (dość nowy smartfon... ale wciąż wolny procesor w porównaniu ze standardowymi komputerami stacjonarnymi/laptopami) Backend DB jest „niepewny”. Możliwe jest manipulowanie danymi (wiele osób ma dostęp do maszyny, być może jest ona "w chmurze"), ale istnieje silna sekwencyjna ciągła kopia zapasowa, w której bardzo trudno jest manipulować już zapisanymi danymi (coś podobnego do zabezpieczony dziennik sekwencyjny) (być może skrót dziennika jest przesyłany w sposób ciągły na bezpieczny serwer lub dziennik sekwencyjny jest przechowywany w innej chmurze całkowicie oddzielonej od pierwszej, lub jeśli ma tylko zapisać kilka skrótów, nawet losowy komputer mogę to zrobić). To, co chcę zrobić, to utrudnić stronom trzecim, które mają dostęp do odczytu/zapisu na maszynie DB i dostęp do odczytu do maszyny serwera, do dodawania/modyfikowania rekordów utworzonych przez użytkownika. Do usunięcia zrobię tak: program nie wykonuje żadnej prawdziwej operacji aktualizacji/usuwania. Każda aktualizacja/usunięcie po prostu dodaje nową wersję danych i oznacza starą jako „starą”. Skrót wszystkich danych jest stale zapisywany w zabezpieczonej przed manipulacją kopii zapasowej. To nawet ochroni mnie przed aktualizacjami starych danych. Jedyne, co mnie nie ochroni, to przed dodaniem nowych danych poprzez podszywanie się pod istniejącego użytkownika. Użyję https do zabezpieczenia transmisji (z certyfikatami kupionymi od jakiegoś urzędu certyfikacji SSL). Wiem, że tak naprawdę nie mogę zabezpieczyć strony (jak w „skryptach java, które trafią do użytkownika”), więc jest to słaby punkt (ktoś mógłby zainstalować keylogger bezpośrednio w kodzie javascript). Obserwowałem, ale nie wydaje się możliwe podpisanie kodu javascript, wysłanie go do klienta i pozwolenie klientowi na sprawdzenie podpisu (prawdopodobnie dlatego, że javascript, będąc językiem dynamicznym, pozwoliłby złośliwemu javascriptowi wstrzyknąć się do podpisany kod/w losowym fragmencie biblioteki bazowej javascript, więc bardzo trudno byłoby zaporą ogniową wszystko w istniejącym środowisku). Mogłem sprawdzić podpis od strony serwera (program serwera jest podpisany i wysyła tylko podpisane javascripty). Nie chcę używać certyfikatów SSL po stronie klienta, ponieważ są one trudne w obsłudze dla użytkownika (jeśli użytkownik zmieni komputer, musi ponownie zainstalować certyfikat, jeśli użytkownik zapomni, że ma certyfikat na komputerze można go ukraść ...) Rozwiązaniem, o którym myślałem, było użycie ECDsa, wygenerowanie pary kluczy publiczny/prywatny z hasła użytkownika (plus kilka innych danych), a następnie klient podpisuje dane użytkownika po stronie klienta. Generowanie klucza publicznego/prywatnego odbywa się po stronie klienta. Po utworzeniu użytkownika i wybraniu hasła klient generuje parę kluczy publiczny/prywatny i przekazuje serwerowi wygenerowany klucz publiczny. Użytkownik musi tylko zapamiętać swoje hasło. Najwyraźniej słabym punktem tego jest to, że ktoś mógłby dodać nowy klucz publiczny użytkownika na serwerze i podpisać coś nowym kluczem publicznym, ale byłoby to dość łatwe do zauważenia, ponieważ byłby nowy klucz publiczny. Bardziej sprytnym rozwiązaniem byłaby zmiana starego klucza publicznego, a następnie zrezygnowanie ze wszystkiego, co użytkownik podpisał tym nowym kluczem, aby nie można było wykazać, czy dane zostały naruszone, ale do tego jest dziennik odporny na manipulacje. Kolejny słaby punkt byłby ze strony użytkownika: ktoś mógłby zainstalować keylogger i ukraść hasło, ale to jest problem wszystkich „standardowych” schematów haseł (do tego dodam uwierzytelnianie TOTP, patrz na końcu) Hasło odzyskiwanie byłoby obsługiwane „ręcznie” (super-użytkownik musiałby potwierdzić tożsamość użytkownika, a następnie podpisać zmianę hasła kluczem superużytkownika) Teraz zróbmy to trochę bardziej skomplikowanie: generowany jest klucz prywatny z PBKDF2 soli unikalnej dla każdego użytkownika (przesyłanej przez serwer) plus hasło użytkownika. Niestety, aby oprogramowanie było kompatybilne z telefonami komórkowymi, będę musiał utrzymać niskie iteracje PBKDF2 (mmmh... Na moim starym Optimus W, 1000 iteracji wymaga 8 sekund, podczas gdy w S3 jest to prawie natychmiastowe... Ale 1000 iteracji jest nie bardzo mocne) (być może mógłbym użyć Scrypt zamiast PBKDF2... Powinien być bardziej odporny na ataki GPU) Więc w końcu byłoby tak: Użytkownik wstawia nazwę użytkownika i hasło i naciska przycisk. Klient prosi serwer o sól, liczbę iteracji funkcji haszującej i porę dnia (w celu powstrzymania ataków opartych na ponownym użyciu tej samej sygnatury), a następnie oblicza hash hasła za pomocą PBKDF2/Scrypt , regeneruje klucz prywatny ECC, podpisuje wiadomość (zawierającą żądaną operację i godzinę odebraną przez serwer) i wysyła podpis. Serwer musi pamiętać, jakie wyzwania postawił i na co odpowiedział (a więc jest "wyczerpany"). Po tym mógłbym dodać dwuetapową weryfikację (przy użyciu algorytmu używanego na przykład przez Google Authenticator). Klucz do tego będzie dzielony między użytkownikiem a serwerem. Hasło jednorazowe można było wstawiać do różnych wiadomości podpisanych przez klienta. Serwer mógł zapisać obliczony czas TOTP, aby można go było później łatwo zweryfikować. Więc pytanie brzmi: czy wszystko w porządku? Czy istnieje gotowe rozwiązanie, które zrobi wszystko? Czy w moim rozumowaniu jest dziura?


title: Praca w dużej firmie, takiej jak IBM/Microsoft czy własna mała 1-2-osobowa firma programistyczna?

text: Mam nadzieję, że wszyscy programiści przeszli przez scenę, w jakiej jestem. Jestem programistą na iPhone'a i aplikacje mobilne, a obecnie pracuję w firmie, która jest jedną z najlepszych w moim mieście. Teraz jestem na etapie, w którym mam dwie możliwości. Pierwszy jest z dużą firmą, taką jak IBM, a drugi z moją własną małą firmą, w której jeden z moich przyjaciół i ja zaczynamy. Być może zastanawiasz się, dlaczego zadaję to pytanie zamiast próbować we własnej firmie, ale wiem, że po powrocie do firmy powrót do pracy po zamknięciu firmy byłby dla mnie bolesnym warunkiem. Jakie są twoje preferencje? Jakie rady możesz zasugerować?


title: Jeden czy wiele RESTful API dla dużej firmy?

text: Pracuję dla dużej firmy, która ma kilka nie-RESTful API. Mam za zadanie zbudować aplikację internetową do interakcji z tymi API. Każde API obsługuje i udostępnia bardzo różne procesy biznesowe i dane. Chciałbym zbudować interfejs(y) RESTful (a) obsługujący interfejsy API, aby umożliwić ich ponowne użycie przez inne przyszłe aplikacje sieci Web. Następnie chciałbym, aby JavaScript współdziałał z interfejsami RESTful. Czy powinienem utworzyć jeden RESTful API (jedna subdomena) dla całej mojej firmy http://api.mycompany.com /business_process_1/resource/ /business_process_2/resource /business_process_3/resource i ustawić go na czele bardzo różnych procesów biznesowych i danych? A może powinienem zbudować wiele interfejsów API (wiele subdomen)? http://business-process-1.mycompany.com http://business-process-2.mycompany.com http://business-process-3.mycompany.com


title: ASP.NET MVC: pobieranie danych wejściowych użytkownika w kontrolerze?

text: Chciałem uzyskać Twoją opinię na temat najlepszych praktyk dotyczących uzyskiwania danych wejściowych od użytkownika podczas robienia czegoś w kontrolerze. Jestem w metodzie Action w moim kontrolerze i przetwarzam niektóre dane. Dane mogą zmusić mnie do poproszenia użytkownika o dalsze dane, na podstawie tych danych zrobię coś z tymi danymi. Jaka jest najlepsza praktyka, aby się z tym uporać? 1) Jak wystawić alert lub potwierdzić pole, aby uzyskać dane wejściowe użytkownika z kontrolera? Akcja ta jest inicjowana przez przycisk aktualizacji w siatce Telerik MVC. 2) Jak zachować swoje dane od momentu ich wstępnego przetworzenia, do poproszenia użytkownika o wprowadzenie danych, a następnie kontynuować przetwarzanie danych? To spora ilość danych. Jeśli początkowe żądanie zostało uruchomione z wywołania ajax w funkcji javascript, myślę, że wiedziałbym, jak to zrobić. Prawdopodobnie miałbym metodę Action, która przekaże obiekt JSON z powrotem do metody javascript, która z kolei zapyta użytkownika, a następnie zdecyduje, którą akcję kontrolera wywołać, a następnie przekaże do niego ten obiekt json. Czy jestem tutaj na dobrej drodze? Jeśli tak, mój problem dotyczyłby siatki Telerik MVC. Musiałbym, aby zdarzenie aktualizacji mojej siatki było powiązane po stronie klienta. Każda pomoc lub przemyślenia na ten temat są mile widziane. Steve


title: Dlaczego inżynieria oprogramowania nie jest typową specjalizacją dla przyszłych programistów?

text: Chociaż większość zgadza się, że pewien poziom informatyki jest niezbędny do bycia dobrym programistą, wydaje mi się, że zasady dobrego tworzenia oprogramowania są jeszcze ważniejsze, choć nie tak fundamentalne. Tak jak inżynierowie mechanicy biorą udział w zajęciach z fizyki, ale o wiele więcej zajęć z inżynierii, spodziewałbym się, że teraz, gdy oprogramowanie ma ponad pół wieku, rozwój oprogramowania zacząłby dominować w programie studiów licencjackich. Ale nie widzę na to zbyt wielu dowodów. Czy istnieje powód, dla którego inżynieria oprogramowania nie przyjęła się jako dyscyplina akademicka?


title: Jak chciałbyś być trenowany?

text: Mój szef przechodzi proces certyfikacji „Coaching” i zapytał mnie, czy mógłby mnie poprowadzić. Zgodnie z tym, co od niego zrozumiałem, powinienem mieć cel dotyczący tego, w czym powinienem być coachowany i kilka wstępnych pytań, z których miałby wyniknąć proces coachingu. Jako programista, który lubi korzystać z nowych technologii, a ostatnio szczególnie cieszy się częścią pracy „negocjacją wymagań”, nie mam pojęcia, co mógłbym szkolić ani jakie pytania mógłbym mu zadać. Może macie fajne pomysły?


title: Co mam powiedzieć moim kolegom, gdy skarżą się, że nasza strona oparta na Railsach ma API, ale nie jest usługą sieciową?

text: Ludzie chcą SOAP lub WDSL. Właśnie mam zdefiniowane API. Co z tym jest nie tak?


title: Czy właściwe jest pytać o powody po odrzuceniu po rozmowie kwalifikacyjnej?

text: Myślałem, że dobrze mi poszło w wywiadach, ale najwyraźniej ankieterzy tak nie uważali. Czy po otrzymaniu wiadomości e-mail o odrzuceniu należy zapytać o powód? Przecież nie chcę denerwować HR. Jestem studentką, więc jak na razie nie ma tak dużego doświadczenia w poszukiwaniu pracy. Wytrzymaj ze mną, jeśli to pytanie brzmi głupio.


title: analiza opłacalności ekonomicznej aplikacji na iPhone'a

text: Muszę przeprowadzić analizę opłacalności ekonomicznej aplikacji na iPhone'a i nie wiem, czy mógłbyś mi pomóc w niektórych kwestiach, takich jak tekst linku: * Jak mogę oszacować koszty rozwoju aplikacji na iPhone'a? * Koszt za godzinę pracy programisty? * Czas, jaki 1 programista zajmuje na wykonanie aplikacji podobnej do tekstu linku „Spend Free - Personal Budgeting”, zakładając, że ma doświadczenie w Javie, ale jest nowicjuszem w świecie tworzenia aplikacji dla iPhone'a (ani Objective-C, ani Cocoa Touch nie wiedzą… ) * Czas na testy integracyjne? * Zwrot z inwestycji (ROI)? Gdzie mogę znaleźć informacje?


title: Czy programiści Ruby (i innych języków dynamicznych) używają IoC / Dependency Injection?

text: Jestem przede wszystkim programistą ASP.NET i jedyną rzeczą, z którą zapoznałem się w ostatnich latach, która miała najbardziej dramatyczny wpływ na jakość pisanego przeze mnie kodu, jest nauka korzystania z kontenerów IoC do zarządzania zależnościami między różnymi warstwami aplikacji sprawnie. Ostatnio moim hobby stało się uczenie się Ruby (i Rails) do osobistych projektów i jak dotąd kocham ten język. Jednak jedną z rzeczy, które zauważyłem w różnych samouczkach i odniesieniach, z których korzystałem, było to, że nie było jeszcze żadnej wzmianki o używaniu IoC. Stanowi to wyraźny kontrast do .NET, gdzie jest (a gdzie nie jest, powinien być) wprowadzony do programistów na wczesnym etapie. Doceniam, że jednym z powodów, dla których wstrzykiwanie zależności może nie być konieczne w Rubim, jest to, że wszystko w klasie jest publiczne i wirtualne, tak otwarte na modyfikację, że nie jest tak naprawdę potrzebne do pisania dobrych testów jednostkowych. Ale jest oczywiście wiele innych korzyści związanych z używaniem kontenerów IoC, takich jak opcje odsprzęgania, zarządzanie tworzeniem obiektów i czasem życia itp. Czy w Ruby jest używane wstrzykiwanie zależności? Jeśli nie, dlaczego nie stanowi to problemu?


title: Dlaczego SIT nazywa się SIT, gdy służy do testowania systemu?

text: Powinienem zdefiniować strategię i środowiska testowe i napotkałem raczej problem terminologiczny (ale może to moja wina), więc mam nadzieję, że ktoś mnie tutaj poprawi. Używamy środowiska INT, w którym aplikacja jest wdrażana jako pierwsza, a następnie środowiska SIT, gdzie aplikacja jest przekazywana, jeśli jest dobrze na INT. Tak więc testerzy wykonują wszystkie testy systemowe na SIT. Ale zgodnie ze wszystkimi definicjami, SIT to testowanie integracji systemu, które jest wykonywane po testach systemu i weryfikuje współpracę większej liczby systemów. Dlaczego więc SIT służy właściwie do testowania systemu, a mówi się, że jest to faza, która faktycznie następuje po testowaniu systemu? EDIT: Zgodnie z powszechnymi książkami wiedzy: 1. Jednostka 2. Integracja (moduły na większe kawałki) 3. Test systemu 4. ().. Test integracji systemu --jeśli jest więcej systemów do integracji Nasze aplikacje składają się z db, usług , nakładka. Tak więc, aby wykonać test systemu, muszą być zintegrowane, w przeciwnym razie testerzy nie mogą nic zrobić. SIT poprzedza więc faktyczne testowanie systemu (zarówno funkcjonalne, jak i niefunkcjonalne), które nie pasuje do opisanych procesów. A środowisko dla testerów nazywa się też SIT..


title: Diagramy klas — czy zagregowane/złożone klasy automatycznie widzą się nawzajem?

text: Załóżmy, że w grze gracz ma zwierzaka: Gracz<>------Zwierzak Oczywiście gracz ma dostęp do pól i metod Zwierzaka, ale zakładam, że Zwierzak nie wie o graczu? Potrzebuję, aby Zwierzak miał również dostęp do odtwarzacza, jak mam to wymodelować?


title: Usuwanie elementu wyszukiwania

text: Zastanawiałem się, co ludzie robią w tej sytuacji. Masz obszar administracyjny systemu, w którym pozwalasz użytkownikom definiować listę wartości, które chcą widzieć w listach rozwijanych w całym systemie. Co robisz w swojej aplikacji, gdy użytkownik chce usunąć tę opcję? Co zrobić z rekordami danych, które już używają tej wartości?


title: Jak wyświetlić bity liczby całkowitej w programie Visual Studio

text: O ile wiem, nie można zobaczyć bitów liczby całkowitej w Visual Studio, możesz zobaczyć zmienne w formacie dziesiętnym lub szesnastkowym w oknach Locals i Watch w debugerze. Dlaczego to ograniczenie obowiązuje i czy są jakieś narzędzia/dodatki do postrzegania liczb całkowitych jako bitów?


title: Agregacja danych, taka jak polyvore.com

text: Tworzę witrynę, która będzie agregować damskie buty z całej sieci w jedną witrynę. Trochę jak polyvore.com robi ze wszystkimi swoimi produktami, ale moje będą tylko butami. Co sprawia, że moja praca jest o wiele łatwiejsza, ale nadal nie wiem, w jaki sposób zabieram się do zbierania wszystkich danych. Do tej pory mam dostęp do 3 API. Do tej pory dostarczają ponad 15000 elementów zamówienia, ale istnieją tysiące witryn i miliony produktów. Jaka jest najlepsza metoda agregowania wszystkich tych danych? Czy to w ogóle możliwe? A może powinienem również polegać na aspekcie społecznościowym, takim jak polyvore, gdzie użytkownicy mogą przesyłać dowolne produkty, których nie ma na stronie? Ponadto, czy muszę uciekać się do screen scrapingu? I czy jest to możliwe jako przedstawienie jednoosobowe? Polyvore ma zespół 30 programistów, czy potrzebuję zespołu, aby zrobić to właściwie?


title: Jaki jest najczęściej używany wzorzec projektowy?

text: Jak myślisz, który wzór projektowy jest najbardziej popularny?


title: Jakie są Twoje doświadczenia z testowaniem off-shore lub outsourcingu?

text: **Czy ktoś miał doświadczenie** z zewnętrznymi testami? Czy jest wart dość wysokiej składki, którą musisz zapłacić? Czy możesz po prostu wynająć kilku _off-shore_ 'mechanicznych turków' (którzy oferują te same usługi, ale dużo taniej) ze skryptem testowym jako tańszą alternatywą dla profesjonalnych usług testowania oprogramowania?


title: Czy SugarCRM naprawdę jest odpowiedni do niestandardowego rozwoju (lub w ogóle adekwatny)?

text: Czy z powodzeniem używałeś SugarCRM do niestandardowego rozwoju? Jeśli tak, czy zrobiłeś to programowo, czy za pomocą modułu Builder? Czy odniosłeś sukces? Jeśli nie, dlaczego? Używałem SugarCRM do projektu około dwa lata temu, napotkałem błędy podczas samej instalacji, musiałem zhakować rzeczywisty plik instalacyjny, aby wdrożyć oprogramowanie na serwerze i inne błędy, których teraz nie pamiętam. Dwa lata później wybieram go ponownie do projektu. Czuję, że sam powinienem opracować całość od zera. Kilka przykładów: * Nie mogłem zainstalować go na serwerze (znowu). Musiałem zainstalować go lokalnie, a następnie skopiować pliki i bazę danych na serwer i ręcznie edytować plik konfiguracyjny. * Ciągle otrzymuję błędy wdrażania od konstruktora modułów. Jednym z powodów jest to, że SugarCRM tworzy rekord w tabeli upgrade_history dla pliku, który nie istnieje, ciągle usuwam taki rekord i wraca on uszkodzony. Otrzymuję inne błędy wdrażania, ale ich nie rozgryzłem. następnie muszę wycofać wszystkie pliki i bazę danych, aby spróbować ponownie. * Usunąłem niestandardowy moduł z relacjami, relacje pozostały w innych modułach i nie można ich już usunąć, ostrzeżenia PHP w całym miejscu. * Szybkie tworzenie modułów niestandardowych nie pojawia się, potrzebny jest hack. * Cały katalog pamięci podręcznej to żart, przechowywane są tam stałe dane/pliki. * Interfejs konstruktora modułów zniknie z wymaganych pól. * Edytuj niewłaściwą rzecz, konstruktor modułów nie zostanie ponownie wdrożony, a następnie módl się o szybką naprawę i / lub odbuduj relacje. Moje wrażenie na temat SugarCRM jest takie, że niezależnie od ładnego wyglądu zewnętrznego i pozornej funkcjonalności, jest to oprogramowanie bardzo niskiej jakości. Przestraszyło mnie to nawet bardziej: http://amplicate.com/hate/sugarcrm; cytat: > Wierzę, że te informacje były dostępne, gdy próbowałem je wdrożyć 2 lata > temu... Szukałem w górę i w dół, a jedyne informacje, które znalazłem, były pozytywne. Tak, > to kupa gówna. Edycja społecznościowa była pełna błędów... nic > nie działało. Zasadniczo zostałem zwolniony za wdrożenie tego. Cieszę się jednak, ponieważ teraz pracuję dla siebie, jestem o wiele szczęśliwszy i zarabiam więcej pieniędzy... więc powinienem naprawdę podziękować SugarCRM za to, że tak dużo ssie! Doszedłem do wniosku, że być może niektórzy z was mieli podobne doświadczenia i albo trzymali się SugarCRM, albo przeszli na inne rozwiązanie. Bardzo interesuje mnie, jakie były twoje postanowienia - lub twoja obecna sytuacja - aby podjąć decyzję, ponieważ projekt, nad którym pracuję, jest długoterminowy i czuję, że SugarCRM będzie bardziej przeszkodą niż pomocą . Po kolejnych nieudanych próbach dalszego korzystania z tego oprogramowania nadal natykałem się na ślepe zaułki podczas korzystania z edytora modułów, mogłem naprawić te błędy tylko za pomocą kontroli wersji. Przechodzimy teraz do niestandardowej implementacji przy użyciu Symfony; być może gdybyśmy używali go z jego gotowymi modułami, trzymalibyśmy się tego.


title: Czy php|architekt jest dobry?

text: Trochę trudny temat do wyszukania, ponieważ architekt często pojawia się na temat architektów oprogramowania. Po 8 miesiącach samodzielnej nauki PHP w końcu natknąłem się na stronę php|architect. Czas, jaki zajęło mi znalezienie go, wzbudza podejrzenia co do jego jakości. 3 powiązane pytania: * czy profesjonalni programiści PHP czytają/interesują się php|architektem? * czy jest to dobre źródło dla początkujących PHP? * zakładając, że jedno z powyższych jest twierdzące, jak daleko wstecz w archiwach artykuły pozostają aktualne? (np. czy rzeczy napisane o PHP4 nadal mają znaczenie?)


title: "C++ Templates: The Complete Guide" (c) 2002 - czy jesteś na bieżąco z C++11?

text: Książka _C++ Templates: The Complete Guide_ , (c) 2002, wydaje mi się bardzo pociągająca, ale ponieważ ma 12 lat, obawiam się, że może być nieaktualna. Jest kilka bardzo pochlebnych recenzji Amazon sprzed roku i nie widzę innych bardzo nowych tytułów w szablonach C++. Czy ktoś wie, czy książka o szablonach opublikowana w 2002 roku (w przeciwieństwie do książki poświęconej STL) miałaby składnię lub koncepcje, które zostały zastąpione lub dodane przez, powiedzmy, C++11? Poniższy opis pochodzi z książki Amazona: Szablony są jedną z najpotężniejszych funkcji C++, ale są zbyt często zaniedbywane, źle rozumiane i niewłaściwie używane. C++ Templates: The Complete > Guide zapewnia architektom oprogramowania i inżynierom jasne zrozumienie > dlaczego, kiedy i jak używać szablonów do tworzenia i utrzymywania czystszego, > szybszego i inteligentniejszego oprogramowania w bardziej wydajny sposób. > > Szablony C++ rozpoczyna się od wnikliwego samouczka na temat > podstawowych pojęć i > funkcji językowych. Pozostała część książki służy jako obszerny > odniesienie, skupiając się najpierw na szczegółach > języka, następnie na szerokiej gamie > technik kodowania, a na końcu na zaawansowanych zastosowaniach szablonów. > Przykłady użyte w całej książce ilustrują abstrakcyjne koncepcje i > demonstrują najlepsze praktyki. > > Czytelnicy uczą się > > * Dokładne zachowania szablonów > * Jak uniknąć pułapek związanych z szablonami > * Idiomy i techniki, od podstawowych do wcześniej nieudokumentowanych > * Jak ponownie wykorzystać kod źródłowy bez zagrażania wydajności lub bezpieczeństwu > * Jak zwiększyć wydajność programów C++ > * Jak stworzyć bardziej elastyczne i łatwe w utrzymaniu oprogramowanie >


title: Utracone segmenty UDP

text: Wiem, że UDP nie dba o kolejność segmentów (pakietów) i ich dotarcie do celu. to jak, u licha, możemy przesyłać strumieniowo filmy? * jeśli segment jest zgubiony (nie dociera do celu), cel nie ma o tym pojęcia. więc nie może poprosić cel o retransmisję. * jeśli segment pojawia się poza kolejnością, czy przesyłany strumień wideo nie powinien być zniekształcony? ponieważ kolejność całych segmentów jest teraz nieprawidłowa, ponieważ jeden segment nie jest na swoim miejscu.


title: Jeśli inny zespół nie wykonał żądanego zadania, czy powinniśmy wspominać o tym w każdym Codziennym Scrumie jako przeszkodę, dopóki tego nie zrobi?

text: Czy naprawdę trzeba wspominać o tej samej przeszkodzie (problemie blokującym) w każdym codziennym stand-upie, skoro cały zespół Scrumowy już o tym wie, bo wspominano o tym na poprzednich codziennych standupach?


title: Nazewnictwo interfejsu: prefiks „Can-” kontra sufiks „-Able”

text: Powszechnie używa się '-able' jako sufiksu dla interfejsów, np. Serializowalne Drukowalne Enumerowalne Pijalne Strzelające Obrotowe Myślałem, że „Can-” może być lepsze, ponieważ może być bardziej opisowe. Tak, jest bardziej rozwlekły i dodaje szum do nazwy interfejsu. W szczególności można użyć czasowników biernych. _Np. 1_ czy Strzelać oznacza, że obiekt jest w stanie strzelać (broń może to zrealizować), czy też oznacza, że można do niego strzelić (może to realizować tarcza celownicza). Z prefiksem „Can-” pierwszym z nich będzie „CanShoot”, a drugim „CanBeShotAt” lub „CanShootAt”. _Np. 2_ Dokument „CanBePrinted” i drukarka „CanPrint” A może powinniśmy pozostać przy „-Able” i _pozwolić, by dokumentacja dostarczyła kontekstu?_ Wszelkie opinie.


title: Jak elegancko pracować z wieloma funkcjami drukowania?

text: Pracuję nad projektem Pythona, który jest wykonywany na terminalu (lub konsoli), dla którego planuję zaimplementować GUI. Nie specjalizowałem się w CS, więc naprawdę nie mam pojęcia, jak skutecznie zaprojektować GUI terminala, aby: 1. interfejs użytkownika wyglądał dobrze 2. w GUI jest skierowany do określonego widżetu, powiedzmy, etykiety tekstowej lub dolny pasek lub chowana ramka. Masz jakieś sugestie? Obecnie używam funkcji `print`, aby dostarczyć istotnych informacji o `STDOUT` podczas wykonywania, więc wiele wywołań `print` jest rozprowadzanych tu i tam w kodzie. Zastanawiam się nad użyciem zmiennych podobnych do makr, takich jak „FILE_NOT_EXISTS_MESSAGE” do drukowania, a wszystkie z nich i ich wartości byłyby zdefiniowane w jednym pliku. Czy to standardowy sposób na zrobienie tego? Czy powinienem wprowadzić system logowania? Podsumowując, szukam wzorca do obsługi wyjścia konsoli, który jest skuteczny i można go dostosować.


title: Czy podczas uzyskiwania dostępu do złożonych danych lub manipulowania nimi lepiej jest przechowywać je w wielu małych kawałkach, czy w jednym dużym kawałku?

text: Tworzę aplikację internetową, która manipuluje dość złożonymi danymi: tabulatory gitarowe. Jako odniesienie, tabulatury gitarowe wyglądają tak: Eb|-------------------------------------- -----------------------------------| Bb|------------------------------------------------ -------------------------| Gb|--5-5-5-5------------------------------------------- -------------------------| Db|--5-5-5-5--3-3-3-3--7-7-7-7--5-5-5-5--2-2-2-2--3 -3-3-3--2-2-2-2-5-5-5-5-| Ab|--3-3-3-3--3-3-3-3--7-7-7-7--5-5-5-5--2-2-2-2--3 -3-3-3--2-2-2-2-5-5-5-5-| Eb|-----------1-1-1-1--5-5-5-5--3-3-3-3--0-0-0-0--1 -1-1-1--0-0-0-0--3-3-3-3-| Czy bardziej efektywne dla wydajności byłoby przechowywanie tych danych w postaci dużej porcji, czy też rozbicie ich i przechowywanie na zasadzie „nota po nucie”? Jako przypadek użycia: Użytkownik zmienia pierwszy akord z: na: Eb|--- Eb|--- Bb|--- Bb|--- Gb|--5 Gb|--4 Db|--5 Db| ---4 Ab|--3 Ab|--2 Eb|--- Eb|--- Jeśli przechowuję go jako blok, kod do manipulowania tabulatorami musiałby być znacznie bardziej złożony. Jeśli będę go przechowywać nota po notatce, dostęp do bazy danych będzie musiał być znacznie większy. **Która metoda jest bardziej wydajna?** Potencjalnie wielu użytkowników będzie modyfikować dane. Chcę **najlepiej działającą aplikację internetową.** Będę używał MySQL, jeśli w ogóle wpłynie to na odpowiedź.


title: Jak odpowiadasz na pytanie „wyjaśnij aktualną architekturę swojego projektu” w wywiadach?

text: Aplikacja, nad którą obecnie pracuję, jest nieco ogromna. Nie da się tego wyjaśnić w mniej więcej 15 minut. Ostatnim razem skończyło się rysowaniem diagramów klas i ich powiązania, ale widziałem, że ankieter nie był zadowolony z odpowiedzi. Jakie są główne rzeczy, które należy podkreślić, odpowiadając na to pytanie? Na przykład, jak zarządza się sesją, jak osiąga się trwałość, to niewiele rzeczy. Jakie są inne rzeczy, których nie można przegapić?


title: Jak zoptymalizować produkt kartezjański

text: Czy istnieje lepszy sposób obliczania iloczynu kartezjańskiego. Ponieważ produkt kartezjański to szczególny przypadek, który różni się w każdym przypadku. Myślę, że muszę wyjaśnić, co muszę osiągnąć i dlaczego robię kartezjański produkt. Proszę o pomoc, jeśli kartezjański produkt jest jedynym rozwiązaniem mojego problemu. Jeśli tak, jak poprawić wydajność. ## Tło: Staramy się pomagać klientom kupować produkty taniej. Powiedzmy, że klient zamówił 5 produktów (prod1, prod2, prod3, prod4, prod5). Każdy zamówiony produkt był oferowany przez różnych dostawców. ## Format reprezentacji1: Vendor1 - oferty prod1, prod2, prod4 sprzedawca2 - oferty prod1, prod5 sprzedawca3 - oferty prod1, prod2, prod5 sprzedawca4 - oferty prod1 sprzedawca5 - oferty prod2 sprzedawca6 - oferty prod3, prod4 Innymi słowy ## Format reprezentacji2: Prod1 - oferowane przez sprzedawcę1, sprzedawcę2, sprzedawcę3, sprzedawcę4 Prod2 - oferowane przez sprzedawcę5, sprzedawcę3, sprzedawcę1 prod3 - oferowane przez sprzedawcę6 prod4 - oferowane przez sprzedawcę1, sprzedawcę6 prod5 - oferowane przez sprzedawcę3, sprzedawcę2 Teraz, aby wybrać najlepszego sprzedawcę na podstawie ceny. Możemy posortować produkty według ceny i wziąć pierwszy. W takim przypadku wybieramy prod1 od dostawcy1 prod2 od dostawcy5 prod3 od dostawcy6 prod4 od dostawcy1 prod5 od dostawcy3 ## Złożoność: ponieważ wybraliśmy 4 unikalnych dostawców, musimy zapłacić 4 koszty wysyłki. Również każdy dostawca ma minimalne zamówienie zakupu. Jeśli się nie spotkamy, zapłacimy również tę opłatę. Aby wybrać najlepszą kombinację produktu. Aby obliczyć cenę całkowitą, musimy wykonać iloczyn kartezjański oferowanych produktów. algorytm obliczania ceny całkowitej: dla każdego unikalnego dostawcy if(suma(cena produktu oferowana przez określonego dostawcę * ilość)<minimalny limit zamówienia określony przez konkretnego dostawcę) cena całkowita +=suma(cena produktu * ilość) + minimalna opłata zakupu + cena wysyłki w przeciwnym razie cena łączna +=suma(cena produktu * ilość) + cena wysyłki kończy się w każdym przypadku W naszym przypadku {sprzedawca1, sprzedawca2, sprzedawca3, sprzedawca4} {sprzedawca1, sprzedawca3, sprzedawca5} {sprzedawca6} {sprzedawca1, sprzedawca6} {sprzedawca2, sprzedawca3} 4 * 3 * Aby znaleźć najlepszą kombinację, należy obliczyć kombinację 1 * 2 * 2 = 48. {sprzedawca1, sprzedawca1, sprzedawca6, sprzedawca1, sprzedawca2}=cena całkowita1, {sprzedawca1, sprzedawca3, sprzedawca6, sprzedawca1, sprzedawca2}=cena łączna2, . . {sprzedawca4, sprzedawca5, sprzedawca6, sprzedawca6, sprzedawca3}=cena całkowita48 Teraz posortuj obliczoną cenę całkowitą, aby znaleźć najlepszą kombinację. ## Rzeczywisty problem: Jeśli zamówienie klienta obejmuje więcej niż 15 produktów. Załóżmy, że każdy produkt został oferowany przez 8 unikalnych dostawców, to w efekcie otrzymaliśmy kombinację 8^15=35184372088832. Co zajmuje więcej niż kilka godzin. Jeśli zamówienie klienta obejmuje więcej niż 20 produktów, zajmuje to więcej niż kilka dni. Czy istnieje rozwiązanie, aby podejść do tego problemu pod innym kątem?


title: Zapamiętywanie, buforowanie, buforowanie i archiwizacja stron?

text: Piszę coś o tym, jak iteracyjny Fibonacci jest znacznie lepszy niż rekurencyjny Fibonacci - kilka linijek. Uważam, że głównym powodem tego, podobnie jak wielu wybitnych badaczy, jest to, że nie przeliczasz wartości - przestrzeń kontra czas. Z tego pomyślałem **ah ha!** buforowanie! Ale nie jestem pewien, czy jest to buforowanie, zapamiętywanie, buforowanie czy jedno z innych. Osobiście uważam, że buforowanie to wstępne ładowanie materiału, zanim coś zostanie z nim zrobione, a buforowanie i zapamiętywanie są bardziej oparte na przetwarzaniu. Pojęcie buforowania polega na tym, że otrzymuję z takiego _buforowania_ obraz lub film. Jaka jest różnica między buforowaniem, zapamiętywaniem, buforowaniem i archiwizowaniem stron?


title: Czy jest jakaś baza danych "Set"?

text: Czy istnieje jakaś „ustawiona” baza danych? Na przykład Neo4j to baza danych "graficzna". To, czego szukam, to baza danych, która może być używana do organizowania „elementów” w „zestawy”, a następnie być w stanie przeszukiwać je za pomocą operacji zestawów. Na przykład „przedmioty, które są w zestawie A i B, ale nie w zestawie C”. Lub która z aktualnych baz danych może efektywnie wykonywać takie modelowanie danych? Zestawy nie są ograniczone, można je dodawać/edytować/usuwać jako dane, podobnie jak elementy lub linki w bazie danych wykresów. Na przykład zrobienie nowego zestawu o nazwie D lub Set2347 i dodanie do niego jakiegoś elementu. Przykładem mogą być strony lubiane przez użytkowników, gdzie każda strona jest „zestawem”, który jest lubiany przez użytkowników jako „elementy”, które zawiera. Aby wyjaśnić moje pytanie, lepiej zacytuję komentarz Karla Bielefeldta: > Nie chodzi o to, czy w tym przypadku użycia można użyć relacyjnej bazy danych. Oczywiście, że tak. Możliwe jest użycie relacyjnej bazy danych > dla wykresu, ale i tak mamy grafowe bazy danych, które znacznie ułatwiają > pracę z wykresami. Pytanie, czy istnieje coś podobnego dla zbiorów, nie jest > nierozsądnym lub niejasnym pytaniem, nawet jeśli odpowiedź brzmi „nie”. Może > ludzie mają dobre sposoby na ułatwienie pracy z zestawami na relacyjnych bazach danych >.


title: Jak spowolnić komputer (w celach testowych)?

text: Jak większość ludzi zgadza się, zachęcanie programistów do tworzenia szybkiego kodu poprzez dawanie im wolnych maszyn nie jest dobrym pomysłem. Ale w tym pytaniu jest sens. Mój programista jest szybki, więc od czasu do czasu piszę kod, który jest niepokojąco nieefektywny, ale staje się to widoczne dopiero po uruchomieniu go na komputerach innych osób. Jakie są dobre sposoby na tymczasowe spowolnienie turbodoładowanej maszyny deweloperskiej? Pojęcie „szybkości” obejmuje kilka czynników, na przykład: * Częstotliwość taktowania procesora. * Ilość rdzeni procesora. * Ilość pamięci i pamięci podręcznej procesora. * Prędkość różnych autobusów. * Dysk we/wy. * GPU. *itp.


title: Definicja problemu i wymagań

text: Niedawno zostałem zatrudniony do przeprojektowania systemu zarządzania od podstaw. To mój pierwszy projekt na skalę biznesową. W przeszłości asystowałem przy aplikacjach biznesowych, ale jestem jedynym, który zajmuje się przeprojektowywaniem i programowaniem systemu przy pomocy pracownika firmy. Ten pracownik zbudował poprzednią wersję systemu zarządzania. Wszyscy zgadzamy się, że chcemy, aby zostało to zrobione i to zrobione dobrze. Jestem gotów poświęcić czas z góry na zdefiniowanie problemu i wymagań, dzięki czemu nie muszę zbierać złych nasion podczas testowania. W tej chwili staram się uchwycić problem i zebrać wymagania dla tego systemu zarządzania. Jakie pytania powinienem zadać temu pracownikowi, aby móc przejść dalej z dokumentacją? Zdaję sobie sprawę, że te wymagania mogą się ciągle zmieniać, ale chciałbym mieć punkt wyjścia do pracy. Oto kilka pytań, które zadałem: > Jaki jest cel systemu zarządzania? > Jaki problem próbujemy rozwiązać? > Jakie będą cechy tego systemu? > Kto będzie korzystał z systemu? (Pracownicy? Podmioty zewnętrzne?) > Jakie są zabezpieczenia tego systemu? (Czy podmiot zewnętrzny widzi > co widzi pracownik? itp.)


title: Używanie Map w Javie (lub innych silnie typowanych językach) do pracy z nieustrukturyzowanymi danymi

text: Po zapoznaniu się z podstawowymi typami danych dla frameworków, które zajmują się nieustrukturyzowanymi danymi w java: * biblioteka json java: JsonObject * Mongodb java api: BasicBSONObject * SolrJ (klient Solr java): SolrDocument wydaje się, że wspólnym tematem jest to, że dane są najpierw de- zserializowany do Map, a następnie przekształcony w daną klasę przez odbicie. Pojawia się więc pytanie, dlaczego po prostu nie pracować bezpośrednio z tymi mapami (lub podtypami map)? Możesz rozszerzyć Mapę i stworzyć swój własny podtyp, i nadal będziesz mieć wszystkie korzyści z programowania OO. **Edytuj** Nie przejmuję się kosztem deserializacji, ale elastycznością, jaką oferuje Map w przypadku nieustrukturyzowanych danych. Rozumiem przez to brak konieczności definiowania klasy, do której dane mogą zostać zdeserializowane. **Edytuj 2** Bardziej interesuje mnie pytanie „dlaczego nie (wady)”, ponieważ wspomniany przeze mnie framework pokazał już, że da się to zrobić.


title: Zaczynam być liderem zespołu

text: Po pół roku pracy w firmie dostałem dwóch studentów na stanowisko lidera. Tak więc mam pewną odpowiedzialność za zarządzanie techniczne. Jak sądzę, powinienem być nie tylko liderem, ale nauczycielem i przykładem. Jakie są typowe kroki w kształceniu młodszych programistów? Jak być nie tylko szefem, który zleca zadanie, ale „seniorem”? Czy właściwe jest udzielanie porad, które nie są właściwie związane z kodowaniem (na przykład interakcje międzyludzkie itd.). Chcę być dla nich dobrym liderem, ale nie mam w tym żadnego doświadczenia i nie wiem od czego zacząć. Dziękuję.


title: Klient chce odsprzedać zaprogramowaną przeze mnie aplikację

text: Nie jestem pewien, czy to jest właściwe forum. Jeśli nie, daj mi znać, a przeniosę. Dlatego zostałem poproszony przez klienta o stworzenie dla nich aplikacji internetowej RoR. Zapytał mnie, czy inwestycja jest ich własnością. Powiedziałem tak, w każdej chwili możesz poprosić o migrację kodu źródłowego i bazy danych. Następnie mówi: „Pytam o to, ponieważ planujemy odsprzedać aplikację innym oddziałom. Dlatego pytam, czy rozwój jest nasz i czy mamy prawa go odsprzedać”. Więc myślę, że tak. To znaczy, zapłacili mi za programowanie dla nich. Czy jest jakieś zalecenie od któregoś z was, bardziej doświadczonych programistów? Oczywiście myślę o tym, aby powiedzieć mu, że ma prawo ją odsprzedać, i mogę pomóc mu we wdrożeniu aplikacji na większej liczbie serwerów i skrócić mu umowę o hosting, abym mógł również skorzystać z odsprzedaży mojej aplikacji. Co myślicie?


title: Dlaczego nie warto tworzyć na produkcyjnej bazie danych?

text: Potrzebuję pomocy w zorganizowaniu moich argumentów, dlaczego SZALEŃSTWO rozwijanie w oparciu o dane produkcyjne. **Backstory:** Zacząłem tu pracować sześć miesięcy temu i zauważyłem, że programujemy bezpośrednio w oparciu o dane produkcyjne. Baza kodu jest lokalna, ale baza danych, z którą jesteśmy połączeni, to dane na żywo! Więc muszę być bardzo ostrożny podczas wykonywania operacji aktualizacji / przechowywania, aby niczego nie zepsuć. Niedługo mamy doroczne spotkanie programistyczne i chcę zgłosić swoje obawy i przybyć naładowany argumentami, ale naprawdę ciężko mi wymyślić solidne punkty do czegoś, co powinno być tak oczywiste, jak to. To tak, jakby poprosili mnie o wymyślenie argumentów, dlaczego muszę oddychać. **Moje pytanie:** Jakie są argumenty, by NIE tworzyć bezpośrednio na produkcyjnej bazie danych?


title: Bezpieczne naprawianie danych produkcyjnych bazy danych

text: Zdarzają się błędy i czasami dane muszą zostać naprawione w produkcji. Jaki jest najbezpieczniejszy sposób postępowania z punktu widzenia dużej firmy? Czy są narzędzia, które mogą pomóc? Oto kilka rozważań wpływających na to wymaganie... 1. Musimy rejestrować, kto wykonał zapytanie i co wykonał 2. Najlepiej byłoby dać osobie dostęp do uruchamiania zapytań tylko w odniesieniu do interesujących tabel i tylko przez krótki czas 3 Niezależnie od tego, co jest uruchomione w zapytaniach, trzeba mieć w tym pewną inteligencję, aby nie pozwolić na uruchamianie długiego i blokującego SQL bez wyraźnego pozwolenia 4. Ten proces musi być niezależny od bazy danych lub przynajmniej rozumieć DB2, Oracle i SQL Server. Staramy się zmniejszyć ryzyko, że zapytania ad-hoc poprawiające prod robią „złą rzecz”, a jednocześnie dodać trochę bezpieczeństwa/audytu do procesu. Myśli czy pomysły?


title: Jak radzisz sobie z klientami proszącymi o ręczną edycję danych w bazie danych?

text: Niedawno zacząłem pracować nad starszą aplikacją, która szczerze mówiąc nie robi wszystkiego, co powinna. Brakuje mu wielu funkcji, prawie nie ma możliwości administracyjnych i nie sprawdza połowy danych, które powinien. W związku z tym użytkownikom bardzo łatwo jest zrobić coś głupiego i utknąć. _"Ups, dodałem ten przedmiot niewłaściwego typu do tego elementu i teraz nie pozwala mi go usunąć"_. Rzeczywiście, aplikacja powinna była to sprawdzić, ale pozwalała na dodanie niewłaściwego elementu. A teraz, jeśli chodzi o usunięcie niewłaściwego elementu, staje się niezwykle ochronny i odmawia usunięcia czegokolwiek. Problem polega na tym, że klienci (którzy w rzeczywistości są użytkownikami w firmie) nie przejmują się tym zbytnio. Potrzebują aplikacji do przechowywania danych ze świata rzeczywistego tak, jak powinny, więc proszą programistów o „naprawienie tego” poprzez zmianę danych. W tym przykładzie usunięcie niewłaściwego elementu. W innych przypadkach będzie to ponowne przypisywanie elementów do różnych rodziców, poprawianie różnych wartości itp. Ponieważ aplikacja prawie nie ma GUI administratora, wszystko kończy się bezpośrednio w bazie danych (śmiech!), ryzykując jeszcze więcej problemów- linii, chyba że _dokładnie_ wiesz, jak to działa (czego tak naprawdę nikt nie wie, biorąc pod uwagę ogromną aplikację). Ostatecznie wydaje się, że baza danych stała się ogromnym plikiem Excela, który programiści edytują dzień po dniu na zachcianki klientów, z powodu awarii aplikacji. Jest dla mnie oczywiste, że naprawienie aplikacji w celu uniknięcia takich sytuacji powinno być najwyższym priorytetem, ale wydaje się, że klienci wolą zamiast tego prosić o wiele nowych funkcji i jest to akceptowane jako takie. Co może zrobić deweloper w takiej sytuacji? Czy można w ogóle odmówić edycji DB na rzecz naprawy rzeczy? Jest tak wiele błędów, że wydaje się, że nigdy nie będą czekać tak długo...


title: Ile dodatków ALU jest potrzebnych, aby dodać trzy liczby?

text: Proszę uzasadnić swoją odpowiedź. Jak się dowiedziałem, potrzebne są dwa dodatki. Dzieje się tak, ponieważ każda liczba do dodania musi zostać zmieniona na binarną. Następnie dodawanie odbywa się między dwiema liczbami binarnymi, w których do dodawania używana jest bramka XOR. Gdy wymagany jest bit przeniesienia, wykorzystywana jest bramka AND, która dodaje bit przeniesienia do następnej linii. Dlatego jeśli doda się więcej niż 3 liczby binarne, może być więcej niż jeden bit przeniesienia, a bramka AND tego nie obsługuje. Mam rację, czy wszystko mylę i nic nie ma sensu? Dziękuję za Twój czas.


title: Czytanie/zasoby do doskonalenia umiejętności architekta i starszego inżyniera

text: Pracuję nad doskonaleniem umiejętności architekta / starszego inżyniera. W szczególności chcę skupić się na „zagubieniu się w chwastach” – spędzaniu dużej ilości czasu nad problemem, podczas gdy można było osiągnąć lepsze rozwiązanie i „nie widzeniu lasu dla drzew” – pominięcie pełnego obrazu i jedynie zapewnienie część funkcjonalności - zagadnienia. Jakie są zalecane lektury/materiały źródłowe, które mogą mi pomóc?


title: Projekt Java Swing ActionListener

text: Mam formularz, który zawiera pole do wpisania informacji adresowych oraz tabelę z dodanymi adresami. Oddzieliłem ActionListener dla przycisku „Dodaj adres” w formularzu do jego własnej klasy najwyższego poziomu i uważam, że odwoływanie się do formularza zawierającego pola tekstowe i tabelę jest trudne i kłopotliwe. Czy z punktu widzenia projektowania umieszczanie klasy implementującej ActionListener dla przycisku dodawania adresu jako klasy wewnętrznej w klasie formularza jest złym pomysłem? Klasa ActionListener będzie specjalnie powiązana z samym formularzem nadrzędnym, więc wyobrażam sobie, że klasa wewnętrzna może być lepszą drogą. Zamierzam przeprowadzić dowolną logikę biznesową poza klasą formularza, oczywiście...


title: Porady dotyczące przejścia na stanowisko programisty Java z innych rodzajów tworzenia stron internetowych?

text: Zajmuję się programowaniem stron internetowych, a obecnie pracuję w firmie zajmującej się głównie PHP i Javascript. Od jakiegoś czasu jestem coraz bardziej sfrustrowany niedociągnięciami tego typu rozwoju i chcę przejść do firmy z bardziej zdefiniowanym procesem rozwoju, w której ceni się robienie rzeczy we „właściwy sposób”, np. stosowanie testów jednostkowych, wstrzykiwanie zależności / IoC, itp. Uczyłem się JEE / Java tyle, ile mogę w wolnym czasie, ale naprawdę chciałbym przerzucić się na robienie tego w mojej karierze i całkowicie porzucić świat PHP. Zastanawiam się tylko, czy ktoś może mi doradzić, na czym mam się teraz skupić, aby stać się rynkowym jako programista Java dla początkujących? Zasadniczo czuję, że tak naprawdę nie uczę się niczego nowego w mojej obecnej pracy, co by mi przyniosło korzyści, a to tylko sprawia, że jestem coraz bardziej sfrustrowany, więc myślę, że jeśli jest jakiś sposób na przygotowanie się do zmiany, wolałbym to zrobić wcześniej niż później.


title: Tworzenie narzędzia upraszczającego wprowadzanie tekstu

text: Od kilku miesięcy pracuję nad projektem, aby napisać narzędzie internetowe, które pomoże mi w pracy. Pracuję w call center, a oprogramowanie CRM, które jest używane, jest marne, w zasadzie musimy wprowadzać wszystkie nasze informacje do szablonów notatnika, a następnie wklejać je w polu opisu. Moim początkowym celem było stworzenie interfejsu internetowego dla szablonów, abym nie musiał już używać notatnika. Miałem zamiar napisać go w HTML5/CSS/JS, zarówno jako doświadczenie edukacyjne, jak i, jeśli miałem szczęście, okazję do awansu. Kiedy pracowałem nad kodowaniem tego narzędzia, ciągle zmieniałem podstawy projektu, próbując zintegrować więcej funkcjonalności z moim narzędziem. Doszło do punktu, w którym chcę, aby narzędzie było używane razem z oprogramowaniem CRM przy każdym odebranym telefonie. Chcę móc po prostu skopiować informacje o kliencie z CRM (po prostu za pomocą Ctrl + A/Ctrl + C), a następnie wkleić blok pomieszanego tekstu do pola tekstowego. Program następnie wybierze informacje o kliencie, szukając słów kluczowych w określonych pozycjach, aby wypełnić wybrany przez użytkownika szablon. Reszta informacji jest wprowadzana ręcznie, a dane wyjściowe są generowane po naciśnięciu przycisku. Informacje zostaną również przeanalizowane w pliku tekstowym kopii zapasowej. Plik tekstowy zostanie utworzony automatycznie na podstawie daty. Jeśli plik tekstowy dla bieżącej daty istnieje, po prostu połączy informacje. Kiedy pisałem swój kod, zacząłem się rozpraszać patrząc na różne języki kodowania i możliwości. Wciąż spoglądałem wstecz na to, co ukończyłem i byłem rozczarowany, zaczynałem już dwa razy od zera. Teraz właściwe pytanie: myślę o rozpoczęciu od nowa, pisaniu programu za pomocą AngularJS. Podoba mi się pomysł płynnego, jednostronicowego interfejsu podobnego do aplikacji, ale boję się trafienia na kolejne bariery i rozpoczęcia od nowa używania czegoś innego. Na podstawie mojego opisu tego, jak chcę, aby mój program działał, czy ktoś może zasugerować, jak to wdrożyć? Czy powinienem zajrzeć do innego języka, czy JS jest naprawdę dobrym rozwiązaniem w dzisiejszych czasach? Właśnie odkryłem Darta i jestem zaintrygowany, ale pomysł nauczenia się kolejnego języka jest zniechęcający, a nie ekscytujący. Czuję, że brakuje mi całkiem ważnego punktu. Mam nadzieję, że to pytanie jest odpowiednie dla tego forum. Czuję się trochę zagubiony w StackExchange, a ostatnią rzeczą, jaką chcę zrobić, jest otrzymanie negatywnej uwagi za zły post. Po prostu czuję się trochę zagubiony, jeśli chodzi o ten projekt, a może nawet ogólnie o programowanie. Niezależnie od tego wszelkie opinie będą mile widziane. Nawet skierowanie na forum dla emocjonalnie zrozpaczonych początkujących programistów byłoby mile widzianą odpowiedzią. >.< Dziękuję.


title: Testy jednostkowe – ciężki kod ze skutkiem ubocznym

text: Zaczynam pisać kod C++ do uruchomienia robota i nie wiem, jak włączyć testy jednostkowe, jeśli rzeczywiście mogę. Dostarczono mi bibliotekę pozwalającą na tworzenie "rozkazów" dla robota, które są automatycznie planowane i wykonywane. Mechanizm tworzenia tych poleceń polega na podklasie klasy bazowej poleceń, którą zapewniają, i zaimplementowaniu wirtualnych metod `void Initialize()`, `void Execute()` i `void End()`. Funkcje te są uruchamiane wyłącznie ze względu na ich skutki uboczne, które wpływają na robota (uruchamianie silników, wysuwanie tłoków itp.). Z tego powodu tak naprawdę nie widzę miejsca, w którym można by dołączyć testy jednostkowe do kodu, poza wyśmiewaniem całej biblioteki, abym mógł sprawdzić stany wirtualnego robota przed i po. Czy istnieje sposób na testowanie jednostkowe, który nie jest zbyt uciążliwy? ## Edytuj Myślę, że mogłem wprowadzać w błąd co do funkcjonalności biblioteki. Biblioteka zapewnia większość interfejsu do robota, a także system poleceń/planowania, więc nie jest to tak proste, jak mocowanie klasy bazowej poleceń, musiałbym zakpić cały interfejs na sprzęcie. Niestety po prostu nie mam na to czasu.


title: Jaka jest typowa wielkość zespołu korzystającego z repozytorium Git?

text: Używamy Gita jako naszej kontroli wersji, ale wraz z rozwojem zespołu pojawia się coraz więcej problemów, jeśli chodzi o umieszczenie wszystkich naszych zmian w jednej gałęzi gotowej do wdrożenia. Zastanawiam się, czy może wyrastamy z Gita jako efektywnego narzędzia do współpracy. Wiem, że istnieją duże projekty OSS z wieloma programistami, którzy używają Git, ale są też strażnicy odpowiedzialni za łączenie gałęzi w ostateczną gałąź kompilacji/wdrożenia. W środowisku biurowym, w którym programiści są stosunkowo niezależni i można im zaufać w zakresie scalania własnych zmian, jak wiele osób może efektywnie współpracować na Git? Dodatkowo, czy są jakieś wskazówki dotyczące efektywnego korzystania z Gita? Korzystaliśmy z przepływu pracy rebase, nie jestem do końca przekonany, że przejście do przepływu pracy opartego na scalaniu poprawiłoby sytuację, ale nie widziałem formalnego opisu tego, jak duża grupa współpracowałaby w przepływie pracy scalania (to wygląda na to, że historia po prostu zamieniłaby się w piekło scalania). Dodatek: Aby było łatwo znaleźć dla każdego, kto zastanawia się: * Używamy strategii gałęzi funkcji * Baza kodu jest dobrze zorganizowana i dość przejrzysta. Jest to Python (z niektórymi HTML/JS), MVC przez piramidę dla aplikacji internetowej, oddzielny pakiet (inny folder najwyższego poziomu w tym samym repozytorium, sam podzielony na dobrze zdefiniowane warstwy) dla dużej części funkcji aplikacji innych niż web. * Doświadczamy bólu, jeśli chodzi o scalanie kodu, ponieważ programiści często wprowadzają zmiany w tych samych plikach, na przykład jeden programista jest właścicielem auth, więc dotyka widoków itp. związanych z auth, ale inny programista zajmuje się internacjonalizacją, więc dotykają wszystkich widoków itp.


title: Jakie są dobre sposoby na zrównoważenie wyjątków informacyjnych i czystego kodu?

text: Dzięki naszemu publicznemu SDK mamy tendencję do przekazywania bardzo pouczających komunikatów o tym, dlaczego występuje wyjątek. Na przykład: if (interfaceInstance == null) { string errMsg = string.Format( "Konstrukcja argumentu akcji: {0}, za pomocą pustego konstruktora działała, ale typ: {1} nie mógł być rzutowany na typ {2}. ", ParameterInfo.Name, ParameterInfo.ParameterType, typeof(IParameter) ); wyrzuć nowy InvalidOperationException(errMsg); } Jednak ma to tendencję do zaśmiecania przepływu kodu, ponieważ skupia się raczej na komunikatach o błędach niż na tym, co robi kod. Kolega zaczął refaktoryzację niektórych wyjątków, wyrzucając coś takiego: if (interfaceInstance == null) throw EmptyConstructor(); ... private Exception EmptyConstructor() { string errMsg = string.Format( "Konstrukcja akcji Argument: {0}, poprzez pusty konstruktor działał, ale typ: {1} nie mógł być rzutowany na typ {2}.", ParameterInfo.Name, ParameterInfo.ParameterType, typeof(IParametr) ); zwróć nowy InvalidOperationException(errMsg); } Co czyni logikę kodu łatwiejszą do zrozumienia, ale dodaje wiele dodatkowych metod obsługi błędów. Jakie są inne sposoby na uniknięcie problemu „logiki bałaganu z długimi wyjątkami”? Pytam przede wszystkim o idiomatyczny C#/.NET, ale jak radzą sobie z nim inne języki też bywają pomocne. **[Edytuj]** Byłoby miło mieć również zalety i wady każdego podejścia.


title: Jaki może być pożytek z rozwidlenia repozytorium w organizacji na githubie?

text: Staram się wymyślić jakiś fajny przepływ pracy dla naszej firmy, a do tej pory mamy główne repozytorium na koncie organizacji github i wszyscy, członkowie zespołu pracującego nad oddziałami tego repozytorium. Czy mógłbyś wymienić pewne zalety rozwidlenia repo lub wykorzystania przez członków organizacji? Myślałem, że mógłbym np. zrobić widelec i wykonać upgrade bibliotek, ale ktoś wskazał, że "jakie są różnice w robieniu tego po prostu w innej gałęzi,bez rozwidlenia? Z góry dziękuję za poświęcony czas .


title: Zmiana zmiennej za pomocą serii instrukcji... Jak nazywa się ta technika?

text: Patrzę na funkcję, która ma kilka takich instrukcji: n = returnDifferentVersionOf(n); Np. wartość _tej samej_ zmiennej `n` zmienia się progresywnie kilka razy w trakcie wykonywania podprogramu — zamiast przypisywania nowej zmiennej przy każdej zmianie. Jaka jest ogólna nazwa tej techniki (jeśli istnieje)? * * * Pełniejszym przykładem może być (w Rubim): # reuse same var def cromulentize(str="") str = "wowza" if str.empty? str += " adios!" str = str * 3 str.gsub!('a', 'X') str = str[0..-3] str.upcase end Jak nazywa się ta technika, w przeciwieństwie do tej: # używa diff vars def cromulentize (str="") non_empty_str = str.pusty? ? "wowza" : str adios_str = nie_pusty_str += "adios!" multiplied_str = adios_str * 3 gsubbed_str = multiplied_str.gsub!('a', 'X') spliced_str = gsubbed_str[0..-3] upcased_str = spliced_str.upcase end (Zauważ, że w Rubim wartością ostatniego wyrażenia metody jest wartość zwrotu.)


title: Czy muszę dodać indeks do tabeli z jednym wierszem?

text: Tworzę tabelę parametrów w naszej bazie danych. Ta tabela będzie miała 1 wiersz z wartościami specyficznymi dla środowiska (produkcja, rozwój itp.). Czy jest jakiś powód, dla którego powinienem zdefiniować indeks w tej tabeli? **Aktualizacja** Ta tabela jest tabelą parametrów, która będzie używana do sterowania naszym systemem kolejek zadań. Tabela będzie zdefiniowana w następujący sposób: QueuePrm LogLvl integer ShowMs boolean Restart boolean Ta tabela będzie miała tylko 1 wiersz. Żadna inna tabela w naszym systemie nie będzie się do niej odwoływać.


title: Czy warto poprosić pracowników o utworzenie „pracy” kont GitHub?

text: Przeniosłem wszystkie repozytoria Git naszej firmy do GitHub i teraz chcę dodać pracowników do projektów. Ponieważ większość pracowników ma już osobiste konta GitHub, zastanawiam się, czy powinienem poprosić ich o utworzenie konta _work_ GitHub. Powodem, dla którego myślę o tym, jest zmniejszenie prawdopodobieństwa nieautoryzowanego dostępu do naszej bazy kodu, ponieważ ich konta osobiste mogą być dobrze nagłośnione poprzez ich osobistą aktywność w witrynie, zwiększając szanse na ataki ukierunkowane. Co więcej, jeśli ich konto osobiste zostanie kiedykolwiek naruszone, nie oznacza to, że cały kod firmy jest dostępny dla porywacza. Ponieważ będzie to wiązać się z ciężarem prowadzenia dwóch kont dla pracowników, zastanawiam się, czy jest to właściwe podejście i czy w ogóle ma to sens. Bardzo chciałbym poznać twoje opinie na ten temat. **Aktualizacja** Dziękujemy za wszystkie przydatne informacje. Nie ustawię odpowiedzi jako zaakceptowanej ze względu na subiektywny charakter pytania/odpowiedzi i ponieważ zebrałem najlepsze punkty z kilku różnych odpowiedzi. Zdecydowałem się pójść dalej w ten sposób: przypomnę pracownikom, że związane z pracą powiadomienia e-mail z GitHub będą musiały być wysyłane na ich służbowe konta e-mail ze względów praktycznych. Dlatego bardziej sensowne byłoby tworzenie roboczych kont GitHub. Jeśli chcą używać swoich osobistych kont GitHub i podłączyć je do swoich służbowych kont e-mail, to w porządku. _W każdym przypadku_ , pracownicy będą musieli wyrazić pisemną zgodę na szereg warunków związanych z korzystaniem z GitHub. Są one związane z bezpieczeństwem konta: wybór bezpiecznego hasła za pomocą generatora bezpiecznych losowych haseł, który nie jest używany z żadnym innym kontem, brak dostępu do GitHub przez komputery, które nie są ich własnością ani nie są przez nich administrowane, itp. Na koniec dnia pracownicy będą musieli sami decydują, czy konto służbowe ma dla nich większy sens, czy nie.


title: Czy coś w programowaniu jest naprawdę złe?

text: Tak więc pojawia się kilka pytań, które pytają, czy X jest złe, czy Y jest złe. Uważam, że nie ma żadnych konstrukcji językowych, algorytmów czy czegokolwiek, co jest złe, tylko takie, które są źle używane. Do diabła, jeśli dobrze się przyjrzysz, istnieją nawet prawidłowe zastosowania goto. Czy zatem w programowaniu istnieje absolutne zło, czyli coś, co jest całkowicie niezgodne z najlepszymi praktykami we wszystkich przypadkach? A jeśli tak, co to jest? A może po prostu źli programiści nie wiedzą, kiedy coś jest właściwe? Edycja: Żeby było jasne, nie mówię o rzeczach, które robią programiści (takich jak niesprawdzanie kodów powrotnych lub nieużywanie kontroli wersji - są to wybory dokonywane przez złych programistów), mam na myśli narzędzia, języki, instrukcje, cokolwiek, co jest po prostu zły...


title: Jaka jest średnia żywotność pliku cookie

text: Zastanawiam się, czy są jakieś badania dotyczące żywotności plików cookie na komputerach użytkowników? W przypadku witryny, którą tworzę, chcemy dać użytkownikom pewną personalizację na podstawie wcześniejszej selekcji, gdy wracają w późniejszym czasie. Jednak nasi użytkownicy w większości wrócą kilka miesięcy lub nawet rok później. Oczywiście mogę ustawić czas wygaśnięcia pliku cookie na rok lub dłużej. Ale w nadgodzinach ludzie otrzymują nowy komputer, nową instalację lub po prostu nową przeglądarkę (wersję). Mogą też wystąpić inne zmiany, które powodują usunięcie pliku cookie. Domyślam się, że ciasteczko nie przetrwa nawet roku. Czy warto zapisać to w ciasteczku? Np. jaki procent plików cookie będzie do tego czasu nadal obecny?


title: Przepisałem kod GNU GPL v2 w innym języku: czy mogę zmienić licencję?

text: Przepisałem niektóre części Mercurial (na licencji GNU GPL v2) w C#. Oczywiście dużo zajrzałem do oryginalnego kodu Pythona i niektóre części są bezpośrednimi tłumaczeniami z Pythona na C#. Czy jest możliwe, aby „mój kod” był licencjonowany na innych warunkach, a nawet aby był częścią komercyjnej aplikacji o zamkniętym kodzie źródłowym? Jeśli nie, czy mogę ponownie licencjonować „mój kod” na licencji LGPL, udostępnić go i _następnie_ użyć tej biblioteki C# o otwartym kodzie źródłowym w mojej komercyjnej aplikacji o zamkniętym kodzie źródłowym?


title: Jaka jest dzisiaj rola C++?

text: Obecnie jestem studentem informatyki i zastanawiam się, co jest nadal ważne w dzisiejszym C++, do czego jest używany? Ukończyłem podstawowy kurs C++ na mojej uczelni, ale nie wyobrażam sobie, gdzie mogę wykorzystać swoją wiedzę i w jakim kierunku powinienem się uczyć C++. Innymi słowy, czego powinienem się nauczyć, aby zostać odnoszącym sukcesy programistą C++? Obecnie uczę się Javy tylko dlatego, że nie widzę jasno, w jakim obszarze C++ mógłby być dziś przydatny, ale wyraźnie wiem, jaką pracę będę wykonywał jako programista Java. Ale wciąż mam nadzieję, że C++ nie jest martwy.


title: Czy powinniśmy naciskać na więcej JavaScript w JVM, obok Javy i Scali? A jeśli nie, dlaczego?

text: Ponieważ JavaScript stał się jednym z najczęściej używanych języków, zacząłem zadawać sobie pytanie, dlaczego ludzie nie znajdują sposobów na jego szerokie użycie w JVM. Jako programista, który spędza pół dnia na pisaniu Javy, a drugą połowę na pisaniu JavaScript, widzę w tym duży potencjał. Czy to tylko wyczucie czasu wystrzeliło Scali w górę? Albo charakter samego języka. Chociaż JavaScript i Java to zasadniczo różne języki, z pewnością nie jest problemem skompilowanie kodu bajtowego JS do Java. To właśnie Rhino robił od wielu lat, prawda? A może problem tkwi w wydajności? Cokolwiek to jest, chciałbym wiedzieć.


title: Czy c# dev powinien przełączyć się na VB.net, gdy baza języka zespołu jest mieszana?

text: Niedawno dołączyłem do nowego zespołu programistów, w którym preferencje językowe są mieszane na platformie .net. Dev 1: Zna VB.net, nie zna c# Dev 2: Zna VB.net, nie zna c# Dev 3: Zna c# i VB.net, woli c# Dev 4: Zna c# i VB6 (VB.net powinno być ładne łatwy do odebrania), preferuje c# Wydaje mi się, że liderami myśli w przestrzeni .net są deweloperzy c# niemal powszechnie. Myślałem też, że niektóre narzędzia innych firm nie obsługują VB.net, ale kiedy zacząłem się tym zajmować, nie znalazłem żadnych dobrych przykładów. Wolałbym, aby cały zespół był na c#, ale jeśli nie ma żadnego dobrego powodu, aby odsunąć tę kwestię od preferencji, to nie sądzę, aby był to właściwy wybór. Czy są jakieś powody, dla których powinienem odwodzić ludzi od VB.net?


title: Jakie najlepsze praktyki należy zastosować w skrypcie logowania PHP?

text: Chcę przepisać moje skrypty logowania dla witryn klientów, aby były bezpieczniejsze. Chcę wiedzieć, jakie najlepsze praktyki mogę w tym zastosować. Panele sterowania chronione hasłem są w obfitości, ale niewiele wydaje się wprowadzać najlepsze praktyki w zakresie pisania kodu, szybkości i bezpieczeństwa. Będę używał PHP i bazy danych MYSQL. Kiedyś używałem md5, ale widzę, że sha256 lub sha512 byłyby lepsze (wraz z bezpiecznym haszem i solą). Niektóre skrypty logowania rejestrują adres IP przez całą sesję lub nawet agenta użytkownika, ale chcę tego uniknąć, ponieważ nie jest kompatybilny z serwerami proxy. Jestem też trochę w tyle za najlepszymi praktykami w używaniu sesji w PHP 5 (ostatni raz czytałem PHP 4), więc niektóre najlepsze praktyki z tym będą pomocne. Dziękuję.


title: Czy wysyłka aplikacji komputerowej Clojure jest realistyczna?

text: Obecnie wysyłam aplikację Java na komputery stacjonarne. Jest to zwykła stara aplikacja Java 5 Java / Swing i do tej pory wszystko działało ładnie. Java 5 była celem, ponieważ niektórzy użytkownicy korzystali z wersji OS X / komputerów, które nigdy nie będą miały Java 6 (możemy wkrótce znieść to ograniczenie i przełączyć się na nowszą Javę i po prostu porzucić moich użytkowników, którzy utknęli przy Javie 5). Szybko nabieram tempa z Clojure, ale tak naprawdę nie zrobiłem jeszcze wielu Clojure-to-Java i Java-to-Clojure i zastanawiałem się, czy realistyczne jest dostarczanie aplikacji komputerowej Clojure zamiast aplikacji Java ? Aplikacja, którą wysyłam, ma obecnie około 12 MB z całym _.jar_, więc dodanie Clojure nie wydaje się być zbyt dużym problemem. Moim planem byłoby mieć Clojure wywołania Java API: moja aplikacja jest już podzielona na kilka niezależnych słoików. Jeśli dobrze rozumiem, wywoływanie Clojure z Javy jest trudniejsze niż wywoływanie kodu Java z Clojure, dlatego zasadniczo przepisałbym cały interfejs użytkownika (część interfejsu użytkownika, mieszanie komponentów Swing i samodzielnie wykonanych BufferedImages i tak musi zostać przepisany ze względu na wzrost wyświetlacza siatkówki) i wykonaj wszystkie „okablowanie” z Clojure. To jest problem, z którym się borykam: czy realistyczne jest wysyłanie aplikacji komputerowej Clojure? (z pewnością nie wydaje się to być zbyt rozpowszechnione, ale wysyłanie zwykłych aplikacji desktopowych Java też nie jest tak powszechne, a ja i tak to robię) Technicznie, co należałoby zrobić? (w porównaniu z wysyłką aplikacji Java)


title: Wydajność C++ Typecasting VS

text: Załóżmy, że projektujemy grę wideo. Mamy na mapie kilka duszków i chcemy wywołać jakąś metodę danego duszka w określonej pozycji. Używamy _jednego szeroko znanego frameworka C++_. Posiada klasę `GraphicsItem`, z której pochodzą WSZYSTKIE nasze duszki. Teraz framework ma metodę, aby uzyskać wskaźnik `GraphicsItem` w dowolnej pozycji na mapie. Mamy teraz dwie możliwości: 1. Rzutowanie z `GraphicsItem*` do naszego `Sprite*` i wywołanie metody `Sprite`. (Wiemy na pewno, że wszystkie elementy graficzne na mapie są instancjami `Sprite`) 2. _Zrób kilka szalonych rzeczy, takich jak_ Przechowuj wskaźniki do `Sprite` w jakimś kontenerze, iteruj przez nie, porównaj wartości adresów i uzyskaj od razu `Sprite* ` bez odlewania. Pytanie brzmi: jaka jest najlepsza praktyka w tym przypadku? Zawsze mówiono mi, żebym unikał typowania, ponieważ oznacza to, że masz problemy z projektowaniem. Ale jak mogę zmienić projekt, aby uniknąć tutaj rzutowania typów? A dodatkowa iteracja nad kontenerem z porównaniem jest po prostu… szalona…


title: Jako student, jak odpowiedzieć na przypadkowe pytanie: „Czy 'coś' w temacie jest dla Ciebie niejasne?”

text: Próbując stworzyć listę tematów/tematów programowania, które były dla mnie niejasne, nie byłem w stanie niczego wymyślić. Wiem, że nie mogę wszystkiego wyjaśnić. Jakie kroki mogę podjąć, aby uzyskać dokładną samoocenę swojej wiedzy i „wiedzieć, czego nie wiem”?


title: Jak komunikować się ze współpracownikiem, który uważa frameworki za hit wydajności?

text: Jak można sprzedać pomysł taki jak „powinniśmy używać jQuery, ponieważ jest wysoce zoptymalizowany i kompatybilny z różnymi przeglądarkami” lub „framework encji jest fajny, ponieważ jest schludny i automagicznie dba o nasz model”, gdy powszechną odpowiedzią jest utajone stwierdzenie, takie jak „jquery nie działa dobrze” lub „elementy wprowadzają 12 kolumn w tabeli, gdy potrzebujemy tylko 10”? Jestem pragmatycznym facetem, który ma tendencję do ufania aksjomatom, które opracowałem przez doświadczenie (nie jest to problem z wydajnością, dopóki nie pojawi się widoczne spowolnienie). Nie wiem, czy istnieje konkretna „kategoria”, do której pasuje druga skrajność, podczas gdy wszystko jest problemem wydajności, dopóki nie zostanie udowodnione, że jest inaczej… lub nawet od czego zacząć komunikację tutaj.


title: Czy zapisujesz testy jednostkowe lub TDD jako wymaganie pozycji w swoich umowach lub zestawieniach pracy?

text: Jeśli tak, czy omawiasz pokrycie, ciągłą integrację, kontrolę jakości lub cokolwiek związanego z różnicą między testowaniem jednostkowym, testowaniem funkcjonalnym i ogólnie TDD? Jeśli klienci pytają, czy po prostu stwierdzasz, że przeprowadzisz test jednostkowy, ale pominiesz szczegóły?


title: Co zmotywowałoby Cię do darmowej pracy programistycznej do pracy po pracy?

text: Nie mówię o pracy w godzinach nadliczbowych przy projekcie, ale R&D lub testowych aplikacjach, które przynoszą korzyści firmie. Stałyby się one narzędziami nauczania, aw końcu narzędziami sprzedaży. Wiem, że nawet pytanie brzmi szalenie, ale widzę trend w tej branży w odniesieniu do szybko zmieniającej się technologii i problem z nakłonieniem programistów do przyniesienia wiedzy po godzinach zdobytej w domu. Można by pomyśleć, że rozlałoby się to naturalnie, ale większość potencjalnych klientów się wstrzymuje, ponieważ praca byłaby wtedy „zarządzana” przez firmę, a teraz byłaby własnością firmy. Czy istnieją solidne programy lub inicjatywy, które stymulują wymianę w przód iw tył, w których można coś wnieść do stołu i zostać za to nagrodzonym? **EDYTUJ** Czy ktokolwiek może przekazać dodatkowe informacje zwrotne na ten temat: _Czy istnieją solidne programy lub inicjatywy, które stymulują wymianę w przód i w tył, w których można coś przynieść do stołu i zostać za to nagrodzonym?_ Wygląda na to, że występuje nieporozumienie tutaj, gdzie niektórzy użytkownicy są pod wrażeniem, staram się wymyślić, jak uzyskać bezpłatną pracę od kolegów. Wręcz przeciwnie. Chcę wiedzieć, czy istnieją programy lub pomysły, które mogą cię zmotywować, a niekoniecznie muszą to być pieniądze.


title: Jak mogę pomóc open source wygrać w przyszłości z zamkniętymi systemami, takimi jak iPhone i iPad?

text: Chciałbym poświęcić dużo czasu w ciągu najbliższych kilku lat, aby pomóc open source w walce z zamkniętymi systemami, takimi jak iPhone i iPad w przestrzeni obliczeniowej urządzeń mobilnych i urządzeń. Jeśli to jest mój cel, jaka jest lepsza strategia — robić prace programistyczne dla Androida lub Ubuntu? Wiem, że Ubuntu jest w tyle na froncie mobilnym, ale działa świetnie na netbookach i stopniowo przenosi się do przestrzeni tabletów. I pojawiają się pytania, czy Android jest naprawdę wierny duchowi open source. http://www.wired.com/epicenter/2010/10/is-android-open/ Jakieś sugestie? Jestem przede wszystkim programistą Ruby, który dużo programował na iOS.


title: Najlepsze praktyki dotyczące wtyczki gRaphael

text: Poszukuję najlepszych praktyk przy tworzeniu wtyczki dla gRaphaela. Szukam czegoś takiego jak jquery, gdzie w swojej dokumentacji masz najlepsze praktyki pisania wtyczki. Do tej pory niczego nie znalazłem, więc zaczynam sobie wyobrażać, że sprowadza się to tylko do najlepszych praktyk z javascriptem, a nie z konkretną kolejnością kodu lub konfigurowalnością... jakieś myśli?


title: Czy zgłoszenia błędów powinny być ponownie otwierane, czy też należy otwierać zgłoszenia jako nowe?

text: Obecnie w moim miejscu pracy używamy FogBugz do zarządzania wszystkimi naszymi funkcjami i błędami w naszych różnych aplikacjach internetowych. Gdy do jednej z naszych aplikacji internetowych ma zostać dodana nowa funkcja, tworzona jest nowa sprawa. Na przykład „Utwórz formularz przesyłania CSV”. Następnie pracuję nad sprawą, rejestrując czas, który nad nią spędziłem. Po zakończeniu tej sprawy rozwiązuję ją i zostaje ona przypisana z powrotem do otwierającego sprawę (zazwyczaj kierownika projektu), który następnie zamyka sprawę. Jeśli są jakieś błędy w tej funkcji, mój Project Manager ponownie otwiera sprawę i przypisuje ją z powrotem do mnie z listą wypunktowanych błędów. Moim zdaniem uważam, że te wypunktowane błędy powinny być otwierane jako pojedyncze przypadki błędów, aby można je było łatwiej śledzić i nie zaśmiecać oryginalnymi opisami przypadków. Moi menedżerowie nie zgadzają się ze mną twierdząc, że łatwiej jest obliczyć całkowity czas spędzony na funkcji, jeśli to wszystko w jednym przypadku. Ponadto uważają, że jest to mniej mylące dla naszych klientów, ponieważ mają tylko 1 numer sprawy dla tej funkcji. Chciałbym jednak podkreślić, że błędy powinny być rozpatrywane w oddzielnych przypadkach, ponieważ jest to po zakończeniu oryginalnej sprawy. Czy mam rację stwierdzając, że błędy powinny być ponownie otwierane jako nowa sprawa? A jakie są plusy/minusy każdego sposobu zarządzania tym?


title: Czy można użyć frameworka Metro UI do tworzenia Exposé?

text: Czy możliwe jest użycie frameworka za interfejsem Windows 8 Metro UI do stworzenia aplikacji podobnej do Exposé dla Windows? Wypróbowałem Maca i naprawdę podoba mi się ta funkcja, z drugiej strony podoba mi się to, że mogę przeciągnąć ekran z górnej części ekranu do interfejsu Metro, ale jest to całkowicie bezużyteczne. Więc wyobraź sobie, czy możliwe jest użycie tej funkcji w aplikacji typu Exposé dla systemu Windows. Czy to w ogóle wykonalne? Jeśli nie, to może na późniejszym etapie? Jestem początkującym programistą, ale może to być fajny projekt. Z góry dziękuję za wszelkie odpowiedzi, sugestie i informacje.


title: Czy mogę używać funkcji architektonicznych programu Visual Studio 2010 do wymuszania projektowania w kodzie bez pakietów funkcji?

text: Studiuję narzędzia architektoniczne Visual Studio 2010 do zarządzania cyklem życia aplikacji. Po naszkicowaniu kilku diagramów modelowania zastanawiamy się teraz, jak powinien wyglądać naturalny przepływ pracy, aby przekonwertować to na kod zgodny z architekturą. Zauważyliśmy, że zakładka UML Explorer śledzi encje utworzone w diagramach klas, diagramach sekwencji i diagramach komponentów, ale nie w przypadku diagramów warstw i diagramów aktywności. Główny problem polega na tym, że kiedy modelowanie jest gotowe, w jaki sposób można go przekonwertować na zgodny kod? Możliwe ścieżki to: * "musisz ręcznie śledzić wszystko"; * „możesz użyć cechy X i/lub techniki Y”; * „Nie da się tego zrobić bez pakietu Modeling Feature Pack”; Z tego, co do tej pory prowadziłem badania, wszystko wskazuje na to, że pakiet funkcji jest potrzebny, ale zastanawiam się, jaki sens miałoby posiadanie tych standardowych projektów modelowania, jeśli największe zalety modelowania (śledzenie i walidacja kodu programistycznego) nie mogą być wykonane.. AKTUALIZACJA: Ten wpis na blogu pokazuje, jak używać diagramu warstw projektu modelowania (poprzez flagę Walidacja na karcie właściwości projektu modelowania) do ZGŁASZANIA BŁĘDÓW BUDOWANIA w przypadku naruszenia zależności warstwy (które można utworzyć ręcznie). Wydaje się to obiecujące i zastanawiam się, które więcej z tych ukrytych funkcji może mieć „niepełny funkcji” Visual Studio 2010. Dzięki za wszelką pomoc


title: Czy istnieje ogólna metoda oceny optymalności algorytmu optymalizacji?

text: czy istnieje ogólna metoda oceny optymalności algorytmu optymalizacji, na przykład algorytm rozwiązujący problem NP-trudny lub NP-zupełny? Jedyną metodą, jaką do tej pory wymyśliłem, jest porównanie wyników algorytmu ze znanymi już optymalnymi rozwiązaniami. Jeśli nie, to czy istnieją konkretne metody rozwiązywania szczególnych problemów? **EDYTUJ** Wyjaśnienie: Przez optymalność rozumiem, jak blisko wyniku jest wynik rozwiązania optymalnego.


title: Co odróżnia wyjątkowych programistów od naprawdę dobrych?

text: Wiesz kim oni są. Są gwiazdami rocka programowania: * Kodują 10X szybciej. * Ich kod po prostu działa. * Nie tylko znają swój podstawowy język od wewnątrz i na zewnątrz, ale także wiedzą, jak działa pod maską. * Znają odpowiedź na większość pytań, zanim je zadasz. * Kilku z nich wymyśliło zasady programowania, z których wszyscy korzystamy. * I mają też tendencję do nietypowej pokory. O co chodzi z tymi ludźmi? Czy jest coś w ich procesie myślowym, co zasadniczo różni się od ponadprzeciętnego programisty? A może są to po prostu bardzo utalentowani ludzie, którzy ciężko pracują? Innymi słowy: jak mogę być taki jak oni? Wiem, czego myślę, że muszę się nauczyć, aby być tak dobrym, ale wygląda na to, że nauczenie się tego zajmie mi następne dziesięć lat, a wtedy moja wiedza stanie się przestarzała.


title: Jak zachować wiele różnych odmian do wdrożenia, używając Git do programowania?

text: Chociaż istnieje wiele podobnych pytań dotyczących używania GIT do utrzymywania różnych wersji, żadne nie wydaje się odpowiadać na mój konkretny przypadek. Nie mam nic przeciwko temu, jak używać GIT do mojego rozwoju, używając różnych gałęzi do robienia poprawek, wersjonowania itp. Jednak tworzę komercyjną aplikację, która musi śledzić różne moduły i konfiguracje dla **RÓŻNYCH** klientów. I NIE chcę, aby klient miał dostęp do modułu lub kodu, za który nie zapłacił. Jednak chciałbym użyć GIT do wdrożenia na ich serwerze lub aby móc wdrożyć bezpośrednio na serwerze klienta za pomocą ssh/rsync, a nawet na moim serwerze w unikalnym katalogu, a następnie spakować pliki źródłowe przy użyciu standardowego procesu. Podam przykład: Klient A: * Wdróż podstawową aplikację * Wdróż tylko Moduł A (np. forum) * Wdróż Klient A określony motyw z Klientem A określonym logo Klient B: * Wdróż podstawową aplikację * Wdróż Moduł A (np. forum) * Wdróż moduł B (np. system często zadawanych pytań) * Wdrożenie specyficznego motywu klienta B z logo klienta B Serwer programistyczny: * Zawiera podstawową aplikację * Zawiera moduł A (np. forum) * Zawiera moduł B (np. system często zadawanych pytań) * Zawiera klienta A i klienta B motywy ze wszystkimi logo * Zawiera uwagi dotyczące rozwoju, które NIE mogą być widoczne dla klienta * Zawiera pliki kompilacji używane z Phingiem - NIE mogą być dostępne dla klientów Bardzo ważne jest zrozumienie, że GIT na serwerze deweloperskim zawiera zastrzeżone dane dla Klienta A i Klienta B Dlatego Klient A nie może nigdy widzieć moich notatek programistycznych, moich plików kompilacji Phing, modułu B (system często zadawanych pytań) lub kodu/danych/obrazów dla Klienta B. Nie muszę przechowywać odmian modułu lub podstawowej aplikacji f lub klientów indywidualnych. Wszystko jest standardowe w całym systemie, a unikalna jest tylko konfiguracja/wariacja wdrożenia dla każdego klienta. Z przyjemnością używam podmodułów GIT, aby oddzielić niektóre części, jeśli to pomoże. Zauważ, że cały mój kod jest w PHP i chętnie wdrażam rozwiązania wykorzystujące PHP, Perl, Python lub skrypty, ale nie chcę używać Javy na serwerze docelowym. Idealnie, jeśli to możliwe, chciałbym uniknąć rozwiązań Ruby. Mam dostęp do SSH na serwerze klienta i mogę również używać rsync przez SSH, ale muszę mieć możliwość wykonania skryptu na serwerze klienta, aby wyczyścić pamięć podręczną itp. Po aktualizacji. Moja maszyna programistyczna to **Windows** \- tak, niefortunnie, ale prawda. Jeśli nie mogę osiągnąć tego, czego potrzebuję w systemie Windows, uruchomię CentOS/Fedora w VMWare. Nie jest to wdrożenie na wielu serwerach wymagające jednoczesnej aktualizacji w całej farmie serwerów, chociaż byłoby miło móc rozsyłać aktualizacje aplikacji do wszystkich różnych klientów zgodnie z harmonogramem lub za pomocą jednego polecenia/procedury, zamiast wykonywać to ręcznie dla każdego z nich. Musiałbym również mieć możliwość wypychania konkretnych aktualizacji klienta do poszczególnych klientów w razie potrzeby (na przykład aktualizacje HTML lub logo). Czy mogę więc użyć GIT do wdrożenia, a przynajmniej śledzić różne konfiguracje za pomocą oddziałów? A może po prostu będzie zbyt bałagan? Czy mogę ukryć Klienta B przed Klientem A, w tym w historii zatwierdzeń, w określonej gałęzi, aby upewnić się, że ktoś biegły w GIT w organizacji klienta nie może pobrać kodu, którego nie może zobaczyć (a jest to **umowny** wymóg projekt)? Jeśli tak, jak mam to zrobić w GIT? Jeśli nie, jak mogę **najlepiej** zarządzać procesem kompilacji, który pozwala mi wdrażać konfiguracje specyficzne dla klienta? Zauważ, że początkowo będę zarządzał około 20 różnymi klientami, a liczba ta może wzrosnąć do 100 lub więcej różnych konfiguracji, ponieważ każda z nich będzie zawierać własny kod HTML i logo oraz odmianę opartą na potencjalnie unikalnym wyborze 15-20 modułów. Cieszę się, że mogę utrzymywać setki różnych plików konfiguracyjnych XML, jeśli tego wymaga. Znam Capistrano, ale czytając o nim, wydaje mi się, że nie pasuje on do mojego konkretnego przypadku. Jeśli uważasz inaczej, nie wahaj się tak powiedzieć.


title: Jak duże umiejętności programistyczne powinienem posiadać jako ekspert ds. bezpieczeństwa komputerowego?

text: Mam dość wszechstronne zrozumienie środowiska programowego (od maszyny do kodu), jednak mam ograniczone doświadczenie w programowaniu czegokolwiek. Czy naprawdę muszę nad tym popracować? czy wystarczy zrozumienie pojęciowe?


title: Jakie są skuteczne sposoby pomagania komuś w nauce języka/struktury programowania w skoncentrowany sposób?

text: Oto trochę tła: * Mam kogoś, kto jest zmotywowany, aby pomóc mi w projekcie, który ma już napisany dobry kawałek kodu * Osoba nie ma doświadczenia w CS, ale zna podstawy (funkcje, zmienne, obiekty, klasy, itp.) * Celem nie jest uczynienie tej osoby z dnia na dzień deweloperem rockstar - wystarczy, że będzie w stanie przyciągnąć swoją wagę do tego konkretnego projektu. * Projekt jest projektem Railsowym, ale jeśli są ogólne odpowiedzi, chciałbym je wyróżnić. Obecne podejście, które jest przyjmowane, polega na nadaniu tej osobie prostej funkcji (która ma już napisaną podobną funkcję). Następnie popychanie ich, gdy się zdezorientują, jednocześnie starając się nie podawać im pełnych kawałków kodu. Niezależnie od tego są bardzo zdezorientowani i sfrustrowani i poruszają się powoli. Nic dziwnego, ale zastanawiam się, czy istnieją jakieś wskazówki lub triki, które pomogą im skuteczniej uczyć się i dotrzeć do cudownego „ah-ha!” chwile.


title: Ekspert bezpieczeństwa komputerowego korzystający z gotowych narzędzi czy własnych?

text: Jako konsultant ds. bezpieczeństwa cyfrowego, kiedy „w porządku” jest używanie narzędzi stworzonych przez kogoś innego (głupie, by wymyślać koło na nowo, prawda?) i kiedy powinienem tworzyć własne?


title: Czy w specyfikacji powinienem opisać, co produkt robi (najlepiej) lub co powinien/musi robić?

text: Piszę specyfikację niemiecką (nie jestem Niemcem). Różnice mogą pojawiać się dla tego procesu w różnych kulturach, zwłaszcza w terminologii, ale zazwyczaj jest to idea: * **Klient** zapisuje swoje **potrzeby i życzenia** w dokumencie zwanym deklaracją zakresu lub **dokumentem wymagań **. * **Dostawca** stara się zrozumieć **rzeczywistą potrzebę** klienta (która może różnić się od tego, co zostało napisane _i_ od tego, co klient zamierzał powiedzieć _i_ od tego, co klient _myśli_, że potrzebuje itp.) * Dostawca pisze **specyfikację** na **produkt**, która powinna zaspokoić potrzeby klienta. * Specyfikacja musi być **na tyle dokładna, aby powstał produkt** (występują problemy z niejednoznacznością). * Klient i dostawca mogą sprawdzić, czy się zrozumieli i omówić szczegóły produktu. * Klient **zgadza się** ze specyfikacją (lub przynajmniej jej aktualną iteracją) i dostawca jest gotowy do rozpoczęcia **pracy**. (oczywiście można się spodziewać, że nie zgadzasz się z tym procesem, ale nie ma to znaczenia dla mojego problemu): jestem teraz gdzieś w okolicach ostatnich dwóch kroków i zostałem skrytykowany, ponieważ napisałem, co produkt _musi_ zrobić, i nie to, co zrobi idealnie. Zwykle w stylu > Produkt musi być w stanie wykonać zadanie A I miałem napisać > Produkt wykonuje zadanie A Jest to prosta gra słów, ale czuję, że mówię, co produkt _robi_ , podczas gdy produkt nie jest nawet na drodze jeszcze do zrobienia, jest zła. Skłaniałbym się do traktowania specyfikacji jako umowy dotyczącej tego, czego oczekuje się od produktu (co musi zrobić i jak powinien), a nie tego, co _robi_. Mówiąc inaczej, czuję, że to jest specyfikacja, a nie instrukcja produktu końcowego…… Czy powinienem powiedzieć, co produkt _musi zrobić_ lub co _robi_?


title: Jak powstają algorytmy?

text: Jestem pod wrażeniem wydajności niektórych algorytmów i zauważyłem, że sposób rozwiązania problemu może być i/lub wydawać się naprawdę nieintuicyjny. Może to zabrzmi głupio, ale chciałbym wiedzieć: * **Jak autorzy wymyślają niesamowite algorytmy? Czy po prostu myślą o problemie i kończą z odpowiedzią? Czy są geniuszami?** * Co prowadzi mnie do kolejnego pytania: **Jak długo zajmuje im znalezienie rozwiązania? Godziny, dni, miesiące, lata?** Wiem, że na te pytania nie ma jednoznacznej odpowiedzi. Ale chciałbym wiedzieć, jak to zwykle działa w odniesieniu do najczęściej używanych/znanych algorytmów.


title: Przegląd kodu, jeśli nikt w zespole nie ma wiedzy w jakiejś technologii?

text: Przykładowa sytuacja: Zespół programistów Java rozpoczyna projekt iOS. Tylko jeden programista posiada wiedzę na temat Objective-C/iOS i na początku będzie sam pracował nad tym projektem. Jak w takiej sytuacji możemy wykonać przeglądy kodu? Jakich procesów, podejść, narzędzi użyje ten programista?