title: Większy kod jest wciąż szybszy

text: Podczas kompilacji kodu C za pomocą `gcc` istnieją optymalizacje kompilatora, niektóre ograniczające rozmiar kodu, a inne tworzące szybki kod. Z flagi `-S` widzę, że `-O2/03` generuje więcej asemblacji niż kod `-Os`. W jaki sposób więcej montażu jest nadal szybsze niż mniej montażu?


title: Otwarta aranżacja biura z osobami niebędącymi programistami (sprzedaż itp.) rozmawiającymi przez cały dzień?

text: Jestem tylko ciekaw tego, mam zamiar odejść z tej pracy z różnych powodów, ale jedno jest takie, że biuro, w którym pracuję, jest całkowicie otwarte z kilkoma pracownikami niebędącymi programistami w pobliżu, rozmawiającymi prawie przez cały dzień przez telefon , telefonowanie do sprzedaży itp. Jest to oczywiście straszne dla koncentracji i moim zdaniem śmieszne, że ktoś uważa, że jest to właściwy sposób na prowadzenie biznesu, w którym głównym aspektem biznesu jest tworzenie oprogramowania. Jestem tylko ciekaw, jak często by to było, gdyby ktoś inny miał taką sytuację. Wydaje mi się, że to oczywista oznaka złego pracodawcy, powinienem był to sobie wcześniej uświadomić, ale od razu potrzebowałem pracy, więc ją wziąłem. Rozumiem, że programiści mogą mieć wspólny pokój lub przestrzeń, ale myślę, że normą byłoby oddzielenie rzeczy, jeśli chodzi o ludzi, którzy żyją przez telefon od tych, którzy muszą skoncentrować się na zadaniu programistycznym.


title: Jak zapakować projekty poboczne online związane z tworzeniem stron internetowych?

text: Zasadniczo chcę wiedzieć, jak ludzie zbierają poboczne projekty związane z tworzeniem stron internetowych online, aby zarobić dodatkowe pieniądze. Poszukuję stron internetowych lub portali, które pozwalają twórcom stron internetowych na podejmowanie nowych ciekawych projektów, które mogą wykonać w wolnym czasie.


title: Czy musisz zakazać atomów, aby uzyskać dobre wsparcie dla wykrywaczy wyścigów?

text: Wydaje się, że Helgrind traktuje atomy w taki sam sposób, jak normalne operacje odczytu/zapisu. Tak więc użycie atomów spowoduje wiele fałszywych alarmów. Nie wiem dokładnie, jak ThreadSanitizer radzi sobie z atomami, ale znalazłem metodę o nazwie tsan_atomic32_load. Zakładam, że potrafi odróżnić atomy od normalnych operacji odczytu/zapisu. W praktyce jednak najlepszym sposobem wydaje się unikanie atomów w celu użycia narzędzi do wykrywania warunków wyścigu. W przeciwnym razie otrzymasz zbyt wiele fałszywych alarmów. Istnieją specjalistyczne narzędzia do weryfikacji współbieżnych struktur danych, np. Spin. Chociaż wygląda na potężnego, wydaje się, że jest poza zasięgiem zwykłych aplikacji. **Jak duże projekty radzą sobie z problemem fałszywych wyników dodatnich?** Czy zniechęcają do używania atomów, czy używają plików tłumiących, czy po prostu nie zawracają sobie głowy wykrywaczami ras?


W aplikacji WPF MVVM ujawniłem mój obiekt modelu w moim viewModel, tworząc instancję klasy Model (która powoduje zależność) w ViewModel. Zamiast tworzyć oddzielne właściwości VM, zawijam właściwości modelu wewnątrz mojej właściwości ViewModel. Mój model jest po prostu klasą proxy wygenerowaną przez framework encji: public częściowa klasa TblProduct { public TblProduct() { this.TblPurchaseDetails = new HashSet<TblPurchaseDetail>(); this.TblPurchaseOrderDetails = nowy HashSet<TblPurchaseOrderDetail>(); this.TblSalesInvoiceDetails = nowy HashSet<TblSalesInvoiceDetail>(); this.TblSalesOrderDetails = nowy HashSet<TblSalesOrderDetail>(); } public int ProductId { get; ustawić; } ciąg publiczny Kod Produktu { get; ustawić; } ciąg publiczny NazwaProduktu { get; ustawić; } public int CategoryId { get; ustawić; } ciąg publiczny Kolor { get; ustawić; } public Nullable<liczba dziesiętna> współczynnik zakupu { get; ustawić; } public Nullable<dziesiętny>SalesRate { get; ustawić; } ciąg publiczny ImagePath { get; ustawić; } public bool IsActive { get; ustawić; } public wirtualny TblCompany TblCompany { get; ustawić; } public virtual TblProductCategory TblProductCategory { get; ustawić; } publiczny wirtualny TblUser TblUser { get; ustawić; } publiczny wirtualny ICollection<TblPurchaseDetail> TblPurchaseDetails { get; ustawić; } publiczny wirtualny ICollection<TblPurchaseOrderDetail> TblPurchaseOrderDetails { get; ustawić; } publiczny wirtualny ICollection<TblSalesInvoiceDetail> TblSalesInvoiceDetails { get; ustawić; } publiczny wirtualny ICollection<TblSalesOrderDetail> TblSalesOrderDetails { get; ustawić; } } Oto mój ViewModel: public class ProductViewModel : WorkspaceViewModel { #region Constructor public ProductViewModel() { StartApp(); } #endregion //Konstruktor #region Właściwości private IProductDataService _dataService; public IProductDataService DataService { get { if (_dataService == null) { if (IsInDesignMode) { _dataService = new ProductDataServiceMock(); } else { _dataService = new ProductDataService(); } } return _dataService; } } //Pobierz i ustaw obiekt Model private TblProduct _product; public TblProduct Produkt { get { return _product ?? (_product = nowy TblProduct()); } ustaw { _produkt = wartość; } } #region Właściwości publiczne public int ProductId { get { return Product.ProductId; } set { if (Product.ProductId == wartość) { return; } Produkt.IdProduktu = wartość; RaisePropertyChanged("Identyfikator Produktu"); } } public string ProductName { get { return Product.ProductName; } set { if (Product.ProductName == wartość) { return; } Produkt.NazwaProduktu = wartość; RaisePropertyChanged(() => NazwaProduktu); } } private ObservableCollection<TblProduct> _productRecords; public ObservableCollection<TblProduct> ProductRecords { get { return _productRecords; } ustaw { _productRecords = wartość; RaisePropertyChanged("RekordyProduktu"); } } //Wybrany produkt private TblProduct _selectedProduct; public TblProduct SelectedProduct { get { return _selectedProduct; } set { _selectedProduct = wartość; if (_selectedProduct != null) { this.ProductId = _selectedProduct.ProductId; this.ProductCode = _selectedProduct.ProductCode; } RaisePropertyChanged("WybranyProdukt"); } } #endregion //Właściwości publiczne #endregion // Właściwości #region Komendy private ICommand _newCommand; public ICommand NewCommand { get { if (_newCommand == null) { _newCommand = new RelayCommand(() => ResetAll()); } return _newCommand; } } prywatny ICommand _saveCommand; public ICommand SaveCommand { get { if (_saveCommand == null) { _saveCommand = new RelayCommand(() => Save()); } return _saveCommand; } } prywatny ICommand _deleteCommand; public ICommand DeleteCommand { get { if (_deleteCommand == null) { _deleteCommand = new RelayCommand(() => Delete()); } return _deleteCommand; } } #endregion //Polecenia #region Metody private void StartApp() { LoadProductCollection(); } private void LoadProductCollection() { var q = DataService.GetAllProducts(); this.ProductRecords = new ObservableCollection<TblProduct>(q); } private void Save() { if (SelectedOperateMode == OperateModeEnum.OperateMode.New) { //Przekaż obiekt Model do Dataservice w celu zapisania DataService.SaveProduct(this.Product); } else if (SelectedOperateMode == OperateModeEnum.OperateMode.Edit) { //Przekaż obiekt Model do Dataservice w celu aktualizacji DataService.UpdateProduct(this.Product); }             Zresetować wszystko(); Załaduj kolekcjęproduktów(); } #endregion //Metody } Oto moja klasa Service: class ProductDataService:IProductDataService { /// <summary> /// Obiekt kontekstu modelu Entity Framework /// </summary> private MaizeEntities Context { get; ustawić; } public ProductDataService() { Context = new MaizeEntities(); } public IEnumerable<TblProduct> GetAllProducts() { using(var context=new R_MaizeEntities()) { var q = from p in context.TblProducts gdzie p.IsDel == false select p; zwróć nowy ObservableCollection<TblProduct>(q); } } public void SaveProduct(TblProduct _product) { using(var context=new R_MaizeEntities()) { _product.LastModUserId = GlobalObjects.LoggedUserID; _product.LastModDttm = DateTime.Now; _product.CompanyId = GlobalObjects.CompanyID; context.TblProducts.Add(_product); kontekst.ZapiszZmiany(); } } public void UpdateProduct(TblProduct _product) { using (var context = new R_MaizeEntities()) { context.TblProducts.Attach(_product); context.Entry(_product).State = EntityState.Modified; _product.LastModUserId = GlobalObjects.LoggedUserID; _product.LastModDttm = DateTime.Now; _product.CompanyId = GlobalObjects.CompanyID; kontekst.ZapiszZmiany(); } } public void DeleteProduct(int _productId) { using (var context = new R_MaizeEntities()) { var product = (z c in context.TblProducts gdzie c.ProductId == _productId select c).First(); product.LastModUserId = GlobalObjects.LoggedUserID; product.LastModDttm = DateTime.Now; product.IsDel = prawda; kontekst.ZapiszZmiany(); } } } Ujawniłem mój obiekt modelu w moim viewModel, tworząc jego instancję za pomocą słowa kluczowego new, a także utworzyłem instancję mojej klasy DataService w VM. Wiem, że spowoduje to silną zależność. A więc: 1. Jaki jest najlepszy sposób na udostępnienie obiektu Model w ViewModel? 2. Jaki jest najlepszy sposób korzystania z usługi DataService w maszynie wirtualnej?


title: Jakie są Twoje opinie na temat „Gamifikacji”?

text: Obejrzałem ciekawy film w Google Talk (ostrzeżenie o godzinie twojego czasu) o grywalizacji tego, co robisz. Oczywiste jest, że zestaw witryn StackExchange stosuje sporo z tych zasad. Jest coś fascynującego w robieniu pracy zabawnej, ale zastanawiam się, ile domen problemowych może zawierać te pomysły? Na pewno dotyczą aplikacji społecznościowych, ale czy to wszystko? Koncepcja wirtualnego programu lojalnościowego jest również bardzo atrakcyjna. Krótki opis grywalizacji: Istnieje system punktacji i nagród. Na przykład reputacja w StackExchange jest rodzajem punktacji. Odznaki to rodzaj nagrody. Dodatkowe przywileje, które zdobywasz wraz ze wzrostem reputacji, są również rodzajem nagrody. Przykładem programu lojalnościowego bez realnego wykupu może być promocja, którą jakiś sklep spożywczy przeprowadził jakiś czas temu, w której kupujesz ich produkty i otrzymujesz w zamian kredyty FarmVille. Brak prawdziwych pieniędzy lub rąk wymiany towarów, a koszty dla sprzedawcy są w najlepszym razie minimalne. Jednak przynosi prawdziwe pieniądze za te wirtualne zwroty. Bezwstydne użycie linku JohnL: http://en.wikipedia.org/wiki/Gamifikacja **UWAGA:** Mówca odnosi się do czterech klas użytkowników, którzy wydają się być archetypami. Są Achievers, Socializer, Explorer i Killers. Wyczynowcy najprawdopodobniej odnoszą się do nas wszystkich, programistów – lubimy załatwiać sprawy. Najwyraźniej 80% ludzi to socjalizatorzy i lubią lekkie, niekonfrontacyjne interakcje. Odkrywcy udają się do każdego zakątka gry/aplikacji, aby odkryć wszystkie pisanki i ukryte funkcje, które mogą. Zabójcy nie tylko chcą wygrać, chcą, abyś przegrał i zdobył pochwałę/status za pokonanie cię.


title: Czy powinienem słuchać swojego pracodawcy i korzystać z narzędzi CASE?

text: Mój pracodawca (Not a Developer) uważa, że narzędzia CASE pomogą nam ulepszyć nasz proces rozwoju i dokumentację. Nie jestem tego pewien, jesteśmy małym zespołem 5 deweloperów budujących rozwiązania bankowości mobilnej dla klientów lokalnych. Myślę, że narzędzia CASE będą stratą czasu i pieniędzy, ponieważ trzeba je kupić, a my będziemy potrzebować trochę czasu, zanim się do nich przyzwyczaimy i będziemy z nimi wydajnie pracować przy modelowaniu i tak dalej. Inną kwestią jest generowanie kodu, naprawdę uważam, że kod generowany przez CASE nie będzie tak dobry, jak kod pisany przez dobrych programistów. Myślę, że jeśli będziemy trzymać się zwinnych zasad, wzorców projektowych, użyjemy TDD i utrzymamy nasz kod w czystości. powinniśmy być dobrzy. A jeśli chodzi o analizę i projektowanie, myślę, że proste diagramy UML na tablicy powinny załatwić sprawę. Dokumentacja jest dobra i ważna, ale powinna być jak najmniejsza i nie powinniśmy skupiać się na Dokumentach i zapominać o kodzie. To jest to, co myślę. Mam rację? czy powinienem posłuchać mojego pracodawcy i rozpocząć poszukiwania odpowiedniego narzędzia CASE?


title: Czy pakiet zależny od Rcpp wymaga licencji GPL?

text: Piszę pakiet komercyjny, który do obliczeń używa języka R (GPL). GPL FAQ wyraźnie stwierdza, że interpretery języka programowania na GPL nie nakładają ograniczeń licencyjnych na "program" (plik tekstowy z kodem R). Na razie w porządku. Część pakietu jest skompilowana przy użyciu Rcpp, który również korzysta z GPL. W następnym akapicie w FAQ czytamy: > Jednak gdy interpreter jest rozszerzony, aby dostarczać "powiązania" z innymi > udogodnieniami (często, ale niekoniecznie, bibliotekami), interpretowany program > jest efektywnie połączony z udogodnieniami, których używa poprzez te powiązania . Można zinterpretować, że R zapewnia wiązanie do bibliotek Rcpp (`Rcpp.dll` w pakiecie windows). Bezpiecznym założeniem jest to, że skazi to mój kod GPL, ale czy to naprawdę słuszny wniosek? Częścią mojej niepewności jest ścisłe powiązanie mojego kodu z `Rcpp.dll`. W bibliotece dll znajdują się odniesienia do Rcpp, ale nie jestem wystarczająco biegły, aby wiedzieć, czy są to odniesienia do środowiska programistycznego, czy do wywołań umieszczanych na symbolach w bibliotece Rcpp. Jeśli to pierwsze, to uważam, że biblioteka Rcpp jest łączona przez R, a nie przez moją bibliotekę. Podejrzewam jednak to drugie, ponieważ Rcpp zapewnia klej (właściwie cukier), aby uprościć pisanie i wykonywanie kodu. Istnieje niezliczona ilość powiązanych dyskusji związanych z GPL w dystrybucji kodu. Aby wymienić tylko kilka: * Wewnątrz maszyny wirtualnej * Ujawnienie własności intelektualnej * Konsekwencje zależności GPL * Używanie biblioteki GPL w oprogramowaniu komercyjnym NB: Generalnie jestem wielkim zwolennikiem OSS i brałem udział w rozwoju i dystrybucji w przeszłości. Pytania o „ochronę kodu” często wywołują problemy programistów open-source, często skutkując gorącymi debatami na temat filozofii oprogramowania. Dostrzegam wartość po obu stronach i chcę mieć pewność, że spełniam literę i (jeśli to możliwe) ducha prawa. Nie łowiem luki w licencji; Szukam pomocy w interpretacji i umieszczeniu tego w kontekście. **Czy pakiety R zależne od Rcpp są wymagane do korzystania z GPL?**


title: Cykl wydawniczy jako gra

text: Zastanawiam się nad tym, jak zwiększyć zaangażowanie deweloperów w wydanie i stworzyć cykl wydań jako gry dla większej zabawy w biurze. Aktualne sugestie * Budowanie wieży z cegieł * Wspinaczka na hipotetyczny Everest, gdzie każdy obóz jest etapem uwalniania * Niektóre systemy odznak, takie jak system StackExchange


title: Jakie są niektóre scenariusze użycia w świecie rzeczywistym dla node.js

text: Chciałbym zacząć majstrować przy Node.js, ale nie jestem pewien, czy istnieją sytuacje, w których node.js byłby uważany za właściwą rzecz do użycia. Ostatnią rzeczą, jakiej chce programista, jest nauczenie się nowej technologii i jej właściwe wykorzystanie. Czy możesz podać rzeczywiste przykłady tego, gdzie node.js byłby właściwie używany


title: Scrum: Jak pracować nad jedną historią na raz

text: Zostałem nominowany jako scrum master w nowo utworzonym zespole scrumowym. Zrobiliśmy już kilka sprintów. Na początku starałem się, aby mój zespół pracował nad jedną historią na raz. Ale to nie zadziałało. Mój zespół miał trudności z rozłożeniem zadań w taki sposób, aby można było jednocześnie pracować nad jednym opowiadaniem. Może robimy coś źle? Na przykład: mamy historię do stworzenia nowego dialogu. Tworzymy następujące zadania: * Tworzenie klas modeli * Odczytywanie danych modeli z bazy danych * Łączenie klas modeli z widokiem * Implementacja obsługi okna dialogowego * Zapisywanie danych przy zamknięciu * Dokumentacja testowa * Opis rozwiązania Czy te zadania mogą być wykonywane przez więcej niż jedną osobę jednocześnie ? Zadania – mniej lub bardziej – budują się nawzajem. Czy może źle projektujemy zadania?


title: Jakimi kryteriami należy się kierować przy ustalaniu wynagrodzenia programisty?

text: Ostatnio brałem udział w dyskusji o tym, jakimi kryteriami należy się kierować przy ustalaniu wynagrodzenia dla programisty: argumenty różniły się od „to kwestia wyboru pracodawcy” do innych argumentów, które uwzględniały wykształcenie, doświadczenie, rozumienie technologii itp. Nie tak dawno przeczytałem świetny post na blogu Stack Exchange na ten temat i nie mogłem się z nim bardziej zgodzić, ale niewielu pracodawców kieruje się opisaną logiką. Z Twojego doświadczenia, które elementy są najważniejsze przy ustalaniu wynagrodzenia dla programisty? Jakie kryteria są najczęściej stosowane w takich sytuacjach? Które kryteria _powinny_ być stosowane najczęściej? I wreszcie, w jakim stopniu wykształcenie formalne (uniwersyteckie, wyższe) ma znaczenie przy ustalaniu wynagrodzenia?


title: Surowe wskaźniki C++ do przechowywania

text: Widzę wielu ludzi, którzy mówią, że nigdy nie powinno się używać surowych wskaźników. A co w przypadku, gdy przechowujesz surowy wskaźnik w klasie, ale sposób, w jaki są one zapełniane, polega na uzyskaniu wskaźnika do obiektu, który nie został utworzony dynamicznie? Jestem ciekaw, czy to zła praktyka, a jeśli tak, jak to ulepszyć. Wydaje mi się to idealne, ponieważ nie muszę samodzielnie usuwać niczego, co jest tak ograniczone / nie ma szans na wyciek pamięci? Idea „jeśli tego nie stworzyłeś, nie usuwasz tego”. Mogę kontrolować wszystko przez zakres zmiennej, którą przekazuję, prawda? Jeśli wyjdzie poza zakres, to to, na co wskazuje, nie będzie już ważne i zrzuci wyjątek, jeśli spróbuję uzyskać do niego dostęp i będę mógł go złapać i obsłużyć. Ciekawi Cię przemyślenia/komentarze/obawy na ten temat. class Object { private: Object* object; public: void Object() { obiekt = NULL; } void AddObject(Object* obj) { obiekt = obj; } Object* GetObject() { return obiekt; } }; int main() { Obiekt obj1; Obiekt obj2; // obj2 nie został utworzony dynamicznie, więc nie ma potrzeby używania inteligentnego wskaźnika obj1.AddObject(&obj2); zwróć 0; }


title: Gdzie mogę znaleźć miarodajne porównanie języków komputerowych?

text: Doszedłem do punktu w mojej karierze, w którym chcę uważać się za mniej „inżyniera {x}”, gdzie {x} jest specyficznym językiem programowania, i chcę być bardziej niezależnym od języka inżynierem oprogramowania. Oczywistym następnym krokiem jest rozpoczęcie nauki jak największej liczby języków, aby zdobyć doświadczenie, ale w ciągu dnia jest tylko tyle godzin, że wolałbym zajmować się tym w bardziej efektywny sposób. Ponadto moim celem końcowym nie jest praktyczna biegłość w 20 językach, ale raczej głębsze zrozumienie różnic między językami programowania oraz tego, jakie kompromisy i wybory projektowe dokonali i dlaczego. Mam tendencję do lepszego uczenia się, gdy najpierw widzę przegląd aktualnego krajobrazu, zanim zagłębię się w szczegóły. Czy istnieje dobra, długa forma (tj. nie wpis na blogu) dotycząca analizy porównawczej języka, która dobrze sprawdza się w badaniu różnic w funkcjach języka programowania? A może alternatywnie dobry tekst opisujący projektowanie języka programowania?


title: Przenoszenie rozwoju projektów na wyższy poziom

text: Od jakiegoś czasu szukam porady, jak poradzić sobie z projektem, nad którym pracuję, ale bezskutecznie. Jestem prawie na czwartej iteracji ulepszania „aplikacji”, nad którą pracuję; pierwsze dwa razy były w programie Excel, trzeci raz w programie Access, a teraz w programie Visual Studio. Dziedzina to produkcja. Podstawową ideą jest to, że biorę dane tylko do odczytu z ogromnego serwera Sybase, filtruję je i codziennie tworzę znacznie mniejsze tabele w programie Access (za pomocą funkcji usuwania i dołączania zapytań), a następnie robię mnóstwo rzeczy. Dokładniej, używam serii zapytań do łączenia danych z wielu tabel lub grupowania danych w określony sposób (funkcje agregujące), a następnie umieszczam te dane w tabeli (aby móc sortować i manipulować danymi za pomocą DAO.recordset i uruchamiać wiele niestandardowych algorytmów). Proces ten jest następnie powtarzany wielokrotnie w całej bazie danych, aż do utworzenia zestawu odpowiednich tabel. Wiele razy tworzę pole w zapytaniu o wartości takiej jak 1.1, aby po dodaniu go do tabeli móc przechowywać informacje w polu z algorytmów. W miarę postępu procesu liczba pól dla tabel zmienia się. Cała aplikacja składa się z 4 baz danych „back-end” połączonych ze sobą na współdzielonym dysku, z różnymi danymi wyjściowymi (albo aplikacjami dostępowymi typu front-end lub Excel). Pytanie brzmi więc: **Czy jest to powszechny sposób działania aplikacji opartych na danych?** Każda baza danych zaplecza jest codziennie aktualizowana świeżymi danymi, a każda aktualizacja zajmuje około 10 sekund (dla trzech) i 2 minuty (dla 1). **Cele projektu:** Chcę/wkrótce przenoszę się na SQL Server. Front End będzie aplikacją webową (znam podstawy webdevelopera i podoba mi się elastyczność administracji), a visual-studio będzie IDE z c#/.NET. Czy te algorytmy powinny być uruchamiane "wewnątrz bazy danych" lub przy użyciu serii funkcji C# na każdym żądaniu serwera. Wiem, że nie powinno się przechowywać danych w bazie danych, chyba że jest to rzeczywisty punkt danych, aw programie Access mam wiele kolumn, które po prostu przechowują obliczenia z algorytmów w vba. Prawda jest taka, że widziałem wiele profesjonalnych aplikacji Access i nigdy nie widziałem takiej, która ma złożoność lub jest nawet zbliżona do tego, co robi moja (na lepsze lub gorsze). Ale wiem, że niektóre profesjonalne aplikacje są 1000 razy lepsze niż moje. Byłem całkowicie sam i potrzebuję wskazówek, jak podejść do tego projektu we właściwy sposób. **Jakie byłoby dobre podejście do naśladowania?**


title: Czy pisanie skryptu powłoki z wieloma instrukcjami if-else i pętlami for jest złą praktyką?

text: Utrzymuję kilka skryptów powłoki procesu danych, które są pełne instrukcji if-else i pętli for. Staram się, aby skrypty były uporządkowane i łatwe do debugowania. Kiedy czytam kilka sugestii dotyczących najlepszych praktyk dotyczących kodu powłoki, wydaje mi się, że nie jest najlepszym rozwiązaniem posiadanie wielu instrukcji if-else i for pętli. Co więc powinienem zrobić, aby napisać skrypt python lub c++ zamiast tych logicznych procesów?


title: Plusy i minusy serializacji natrętnej i nieinwazyjnej?

text: Interesują mnie plusy i minusy serializacji: natrętna i nieinwazyjna. Z jednej strony wydaje się, że nie jest inwazyjny, jest łatwy w użyciu - klasa, która ma być serializowana, nie powinna być aktualizowana. Wydaje się to wygodne w prostych przypadkach. Np. XStream.Net implementuje takie podejście. Problemy mogą się jednak pojawić, jeśli ta klasa jest w jakiś sposób połączona z innymi klasami, np. przechowuje indeksy obiektów globalnych, które również powinny być serializowane. W tym przypadku nieinwazyjne podejście wygląda niebezpiecznie. O inwazyjnym wdrożeniu. Dobrze, że programista może bezpośrednio określić, co i jak serializować (oczywiście, jeśli technologia serializacji jest wystarczająco elastyczna). Np. Microsoft .Net ma inwazyjne podejście zaimplementowane do serializacji XML \- atrybuty powinny być określone dla klas i członków. Inne pomysły?


title: dlaczego zestaw naturalnie uporządkowany jest generowany przy 9, ale nie 10 cyfrach?

text: kod znaleziony pod adresem: błąd krytyczny... Środowisko wykonawcze Java: EXCEPTION_ACCESS_VIOLATION Zakładając, że problem wskazany powyżej jest spowodowany przez aplikację testową, a nie konkretnie przez metodę generateRandomDigits(). Gdy NUMBER_OF_DIGITS_TO_ORDER wynosi <= 9, otrzymuję naturalnie uporządkowane zestawy (tylko próbuję udowodnić, że jest to możliwe), ale gdy jest ustawione na 10, nigdy nie dostaję takiego zestawu i uruchamiałem go wiele razy. Czemu? Jestem bardziej niż otwarty na sugerowane ulepszenia metody generateRandomDigits() - wydaje się to nieco zawiłe.


title: Zalety Java ByteArrayInputStream w porównaniu z tablicą bajtów?

text: Mam scenariusz, w którym mój proces Java będzie otrzymywał strumień danych binarnych: public class DataHandler { public void handleData(DATA data) { // TODO: Zrób coś z danymi } } DANE”. Mógłbym użyć `byte[]`: public class DataHandler { public void handleData(byte[] data) { // TODO: Zrób coś z danymi } } Lub `ByteArrayInputStream`: public class DataHandler { public void handleData(ByteArrayInputStream dataStream ) { // DO ZROBIENIA: Zrób coś z dataStream } } Dla mnie „`ByteArrayInput` **`Stream`** ” oznacza ciągły **strumień** danych, który jest stale modyfikowany. Opierając się na tym, wydaje się, że `ByteArrayInputStream` lepiej pasuje do mojego przypadku użycia, ponieważ prawdopodobnie dodaje kilka dzwonków i gwizdów na zwykłym `byte[]`. Ale potem widzę, że jego konstruktor pobiera `byte[]` i nie pozwala na dodanie do niego więcej `bajtów` po zakończeniu konstrukcji, co w tym konkretnym przypadku niekoniecznie musi coś dla mnie zrobić. Więc moje pytania: 1. Czy w moim przypadku użycia istnieją jakieś korzyści z `ByteArrayInputStream` nad `byte[]`? Dlaczego? Dlaczego nie? Jakie są czynniki, które wpływają na tę decyzję (ogólnie)? 2. Czy istnieje lepszy sposób na reprezentowanie prawdziwego _strumienia_ przepływających danych (które ostatecznie przychodzą jako bajty) poza metodami, które tutaj zalecam?


title: Czy mam rację co do różnic między algorytmami Floyda-Warshalla, Dijkstry i Bellmana-Forda?

text: Studiowałem te trzy i przedstawiam swoje wnioski z nich poniżej. Czy ktoś mógłby mi powiedzieć, czy zrozumiałem je wystarczająco dokładnie, czy nie? Dziękuję Ci. 1. Algorytm Dijkstry jest używany tylko wtedy, gdy masz jedno źródło i chcesz poznać najmniejszą ścieżkę z jednego węzła do drugiego, ale zawodzi w takich przypadkach 2. Algorytm Floyda-Warshalla jest używany, gdy dowolny ze wszystkich węzłów może być źródło, więc chcesz, aby najkrótsza odległość dotarła do dowolnego węzła docelowego z dowolnego węzła źródłowego. To nie działa tylko wtedy, gdy występują cykle ujemne **(to jest najważniejszy. To znaczy, jest to ten, którego jestem najmniej pewien:)** 3.Bellman-Ford jest używany jak Dijkstra, gdy jest tylko jeden źródło. To może obsługiwać wagi ujemne i **działa tak samo jak Floyd-Warshall z wyjątkiem jednego źródła, prawda?** Jeśli chcesz się przyjrzeć, odpowiednie algorytmy to (dzięki uprzejmości Wikipedii): Bellman-Ford: procedura BellmanFord( list vertices, list edge, vertex source) // Ta implementacja pobiera graf, reprezentowany jako listy wierzchołków // i krawędzi, i modyfikuje wierzchołki tak, aby ich atrybuty odległości i // poprzednika przechowywały najkrótsze ścieżki. // Krok 1: inicjalizacja wykresu dla każdego wierzchołka v w wierzchołkach: jeśli v jest źródłem, to v.distance := 0 else v.distance := nieskończoność v.predecessor := null // Krok 2: wielokrotnie rozluźniaj krawędzie dla i od 1 to size(vertices)-1: dla każdej krawędzi uv w krawędziach: // uv to krawędź od u do v u := uv.source v := uv.destination if u.distance + uv.weight < v.distance: v .distance := u.distance + uv.weight v.predecessor := u // Krok 3: sprawdź cykle ujemnej wagi dla każdej krawędzi uv na krawędziach: u := uv.source v := uv.destination jeśli u. distance + uv.weight < v.distance: error "Wykres zawiera cykl wagi ujemnej" Dijkstra: 1 funkcja Dijkstra(Wykres, źródło): 2 dla każdego wierzchołka v in Wykres: // Inicjalizacje 3 dist[v] := in skończoność ; // Nieznana funkcja odległości od 4 // źródła do v 5 previous[v] := undefined ; // Poprzedni węzeł w optymalnej ścieżce 6 // ze źródła 7 8 dist[source] := 0 ; // Odległość od źródła do źródła 9 Q := zbiór wszystkich węzłów w Graph ; // Wszystkie węzły na wykresie są 10 // niezoptymalizowane - stąd znajdują się w Q 11, podczas gdy Q nie jest puste: // Główna pętla 12 u := vertex w Q z najmniejszą odległością w dist[] ; // Rozpocznij węzeł w pierwszym przypadku 13 if dist[u] = infinity: 14 break ; // wszystkie pozostałe wierzchołki są 15 // niedostępne ze źródła 16 17 usuń u z Q ; 18 dla każdego sąsiada v u: // gdzie v nie zostało jeszcze usunięte 19 z Q. 20 alt := dist[u] + dist_between(u, v) ; 21 if alt < dist[v]: // Relaks (u,v,a) 22 dist[v] := alt ; 23 poprzedni[v] := u ; 24 spadek klucz v w Q; // Zmień kolejność v w kolejce 25 return dist; Floyd-Warshall: 1 /* Przyjmij funkcję edgeCost(i,j), która zwraca koszt krawędzi od i do j 2 (nieskończoność jeśli nie ma). 3 Załóżmy również, że n jest liczbą wierzchołków, a edgeCost(i,i) = 0 4 */ 5 6 int path[][]; 7 /* Dwuwymiarowa macierz. Na każdym kroku algorytmu ścieżka[i][j] jest najkrótszą ścieżką 8 od i do j przy użyciu wierzchołków pośrednich (1..k−1). Każda ścieżka[i][j] jest inicjowana do 9 edgeCost(i,j). 10 */ 11 12 procedura FloydWarshall () 13 dla k := 1 do n 14 dla i := 1 do n 15 dla j := 1 do n 16 ścieżka[i][j] = min ( ścieżka[i][j ], ścieżka[i][k]+ścieżka[k][j] );


title: Jak opanować złożoność tworzenia stron internetowych?

text: Przez większość swojej kariery jestem programistą po stronie serwera, a dopiero niedawno zacząłem spędzać więcej czasu na tworzeniu stron internetowych. Jestem zdumiony ilością rzeczy, które muszę opanować, aby napisać porządną aplikację webową. Wystarczy wymienić kilka narzędzi/technologii, których muszę się nauczyć, * Język programowania po stronie serwera (Java/JSP, ASP, PHP, Ruby lub coś innego) * Przyzwoity framework webowy (dla każdej aplikacji średniej i dużej wielkości). * HTML i CSS * Javascript * Biblioteka Javascript (JQuery/ExtJS itp. głównie dla AJAX). Dobrze wiedzieć, nawet jeśli nie jest to konieczne. * Przynajmniej podstawowa wiedza na temat projektowania stron internetowych - układy, kolory, czcionki itp. * Dobra znajomość bezpieczeństwa sieci. * Dobre zrozumienie problemów z wydajnością/skalowalnością. * Testowanie, problemy ze zgodnością przeglądarek itp. Lista jest długa. Tak więc moje pytanie do doświadczonych twórców stron internetowych brzmi: Jak udaje wam się uczyć i być na bieżąco z tak wieloma rzeczami? Opracowując aplikację internetową, jak radzisz sobie z zawiłościami związanymi z tymi obszarami, a jednocześnie udaje ci się napisać aplikację, która jest dobrze zaprojektowana, przyjazna dla użytkownika, bezpieczna, wydajna i skalowalna. Czy jako twórca stron internetowych trzeba być specjalistą we wszystkich branżach, czy też specjalizować się w jednym lub dwóch obszarach, a resztę pozostawić innym członkom zespołu?


title: Czy można bezpiecznie używać LAST_INSERT_ID() w systemie takim jak Point of Sale?

text: Czy bezpiecznie jest używać `LAST_INSERT_ID()` w systemie używającym `MySQL` jak Point Of Sale, gdy z systemu korzysta jednocześnie wielu użytkowników?


title: Skąd tyle szumu wokół zamknięć?

text: Dlaczego wśród programistów jest tyle szumu wokół zamknięć? W swojej karierze nigdy celowo ich nie używałem, chociaż nie rozumiem do końca czym one są. UPD: tylko dla wyjaśnienia. Pytanie brzmi, dlaczego koncepcja zamknięcia stała się dziś tak gadatliwa.


title: ado.net lub EF dla systemu POS

text: Posiadamy system POS, który został opracowany przy użyciu ado.net, obecnie zależy nam na tym, aby aplikacja była naprawdę szybka w tworzeniu transakcji (sprzedaży). Zwykle nie ma problemów z wydajnością w przypadku komputerów z wyższej półki, ale w przypadku komputerów z niższej półki transakcje trwają naprawdę wolno. Głównym problemem jest zapisywanie transakcji, które zwykle wywołuje wiele procedur składowanych w celu wstawiania rekordów w ramach pojedynczej transakcji. Zwykle zajmuje to trochę czasu na słabszych komputerach PC. Musimy poprawić wydajność, ponieważ większość klientów będzie używać tylko słabszych komputerów PC jako kasjerów. Jednym z rozwiązań, o którym myślimy, jest wykorzystanie struktury encji do dostępu do danych. Cały projekt jest napisany przy użyciu ado.net, a czas programowania przy przejściu na framework encji byłby bardzo długi. Jakieś sugestie?


title: Czy schemat XML powinien być określony w specyfikacji oprogramowania?

text: Czy dołączylibyście schemat XML dla nowego formatu pliku do dokumentu specyfikacji oprogramowania, czy też uznalibyście to za zbyt szczegółowe? A może w tym momencie wymaganie XML byłoby już zbyt specyficzne?


title: Jakie są zalety i wady posiadania subdomeny dla każdego konta użytkownika?

text: Zauważyłem dwa typy projektowania używane w aplikacjach internetowych, niektóre z konkretną subdomeną dla treści użytkowników, a niektóre z tą samą strukturą adresów URL dla wszystkich kont. Np.: „unikalna.domena.com” i „inna_unikalna.domena.com” dla poddomen dla witryn takich jak blogspot, wordpress, basecamp itp., podczas gdy w innym podejściu „domena.com/działanie1” i „domena.com/działanie2” treść jest wyświetlana zgodnie z zalogowanym użytkownikiem, ale adres URL jest taki sam dla każdego użytkownika. Jakie są główne różnice między tymi dwoma rodzajami konstrukcji?


title: Co daje korzystanie z ZeroMQ w Erlangu, czego Erlang już nie miał?

text: Jestem tylko przelotnie zaznajomiony z jednym i drugim, ale wydaje się, że większość tego, co oferuje ZeroMQ, jest już wbudowana w Erlanga, ale istnieje powiązanie Erlang-ZeroMQ, które jest dość aktywne zgodnie z jego stroną github. czego mi brakuje?


title: Jedna usługa internetowa wiele witryn

text: Nie wiem, czy jest to w ogóle możliwe, czy wyobrażam sobie (zgodnie z moim nawykiem nadmiernego myślenia) przebrnie przez wiele problemów, ale daj mi szansę. Mam pomysł, w którym chciałbym mieć pojedynczą usługę internetową, do której użytkownik wyśle żądanie, na przykład logując się. Odpowiedź zwrotna dyktuje adres URL, do którego są przekierowywani, więc zasadniczo oznacza to dla mnie mniej konserwacji w zakresie aktualizacji usług internetowych itp. jak wszystko w jednym miejscu. To, co próbuję zrobić, to mieć pojedynczą usługę, która kieruje ludzi do właściwego serwera, aby uzyskać dane, zamiast posiadania wiedzy użytkownika końcowego o adresie punktu końcowego itp. Na przykład mam system w Internecie i chcę go widoczne na moich urządzeniach z systemem Windows, Android i Apple, ale dla każdego klienta istnieje konkretna witryna. W idealnej sytuacji chcę tylko, aby użytkownik wprowadził swoje dane logowania, a usługa internetowa zajmie się resztą, tj. Pobiera dane z właściwego źródła danych. Wyobrażam sobie, że jest to powszechna praktyka w wielu systemach, ale domyślam się, że istnieje czynnik ryzyka polegający na tym, że użytkownik otrzymuje dane z innego żądania, jeśli dzieje się to w tym samym czasie? Oczywiście jest to ogromna wada i być może idę tutaj zupełnie złą drogą. Byłbym wdzięczny za wszelkie zasoby do linków, książek itp. Nie byłem pewien, czego szukać w Internecie, więc pomyślałem, że to najlepsze miejsce na takie pytania. Jest to system, który opracowuję, aby pomóc mi lepiej zrozumieć usługi internetowe. Mały projekt, nad którym pracuję, pomoże mi poznać różne techniki i podejścia do rozwoju :)


title: Nowy kierownik zespołu – jak radzić sobie z urażonym byłym rówieśnikiem

text: Powiedziano mi, że mam być kierownikiem zespołu w nadchodzącym projekcie. Nigdy wcześniej nie byłem kierownikiem zespołu, ale obowiązki są takie, jakich zwykle można się spodziewać, z obrotowymi drzwiami 3 do 4 innych programistów przez 8 lub 9 miesięcy, jakie zajmuje ukończenie projektu. Mój problem polega na tym, że jeden z programistów, który bez wątpienia będzie pracował nad tym projektem, będzie problemem. Ma większe doświadczenie ode mnie, kilka razy nazwał mnie idiotą i powiedział, że podjął tę pracę, ponieważ jest naturalnym przywódcą. Spodziewał się awansu na stanowisko kierownicze z każdym nowym projektem (co do tej pory się nie zdarzyło) i nawet raz powiedział mi, że mam się do niego zgłosić, mimo że faktyczny lider zespołu nie miał takich złudzeń. Co więcej, zarówno zaobserwowałem, jak i słyszałem od innych, że jest wyjątkowo nieprofesjonalny (ogląda niepracujące filmy na stronach klientów - bez słuchawek, ubiera się nieprofesjonalnie, przychodzi do pracy spóźniony, robi nieodpowiednie żarty itp.) Wziął lub próbował aby wielokrotnie przypisywać sobie zasługi za moją pracę lub spostrzeżenia, podczas gdy pracowałem z nim jako rówieśnik. Mój obecny lider zespołu powiedział mi, że wyrzuciła 1/2 kodu tego gościa, kiedy opuścił jej projekt, ponieważ jakość nie była dobra. Mogę iść dalej. Obawiam się, że ten facet będzie aktywnie działał przeciwko mnie, ponieważ będzie miał żal, że musi zgłosić komuś, kogo uważa za gorszego, zwłaszcza, że dostałem taką możliwość przed nim. W przeszłości z powodzeniem radziłem sobie z tym typem osobowości jako rówieśnik, a nawet zgłaszając się do takich menedżerów. Nie miałem do czynienia, ani nawet nie myślałem, że będę miał do czynienia z tego typu postacią, która do mnie zgłasza. Moje pytanie brzmi: jakich strategii mogę użyć, aby skutecznie i profesjonalnie sobie z tym poradzić? Zwłaszcza teraz, zanim stanie się to problemem, czy jest jakiś sposób, aby to odciąć, zanim wymknie się spod kontroli itp. Jeśli ktoś ma podobne doświadczenia, jak sobie z tym poradził?


title: Schemat paradygmatu

text: Czy ktoś ma schemat pokazujący wszystkie istotne paradygmaty programowania. Coś takiego, ale z paradygmatami jako tytułami byłoby idealne: ![obraz strony pomocy](http://i.stack.imgur.com/rARsG.png)


title: Jak przekonwertować HTML na PDF za pomocą PHP?

text: PDF lub Portable Document Format to popularny typ pliku, który jest często używany w dokumentach online. Świetnie nadaje się do dystrybucji pisanych treści do pobrania i jest często używany zarówno przez rządy, jak i firmy. Ponieważ jest to format znany wszystkim, wiele aplikacji umożliwia użytkownikowi konwersję innych typów dokumentów na format PDF. PHP to jeden z języków programowania, który ma wbudowaną możliwość konwersji do formatu PDF. Skrypty PHP mogą być używane do przekształcania typów plików, takich jak HTML, w pliki PDF.


title: Co powinno być przechowywane w UserContext?

text: Z mojego ogólnego zrozumienia wierzę, że UserContext dla aplikacji internetowej ma przechowywać informacje o uwierzytelnianiu i autoryzacji użytkownika (role użytkownika). W ramach ról użytkownika istnieją definicje dotyczące tego, kto może uzyskać dostęp do jakich danych i odpowiednio odpowiednie dane referencyjne są również ładowane do UserContext. Czy to dobra praktyka do ładowania i używania danych referencyjnych z UserContext? Czy ma to jakikolwiek wpływ na liczbę sesji w porównaniu z rozmiarem danych przechowywanych w JVM? Myślę, że używamy UserContext tylko do uwierzytelniania i autoryzacji, ale ładujemy dane referencyjne z pamięci podręcznej na żądanie i używamy ich w razie potrzeby.


title: Czy lepszą praktyką jest wstępne zainicjowanie atrybutów w klasie, czy dodanie ich po drodze?

text: Przykro mi, jeśli jest to NIEZWYKLE niedojrzałe pytanie, ale jestem ciekaw, jakie są sprawdzone metody i nie mogę znaleźć dobrej odpowiedzi w Google. W Pythonie zwykle używam pustej klasy jako kontenera struktury danych super-catchall (coś w rodzaju pliku JSON) i dodaję atrybuty po drodze: class DataObj: "Catch-all data object" def __init__(self): pass def processData(inputs): data = DataObj() data.a = 1 data.b = "sym" data.c = [2,5,2,1] Daje mi to ogromną elastyczność, ponieważ obiekt kontenera może zasadniczo przechowują wszystko. Więc jeśli pojawią się nowe wymagania, po prostu dodam je jako kolejny atrybut do obiektu DataObj (który przekazuję w moim kodzie). Jednak ostatnio wywarło na mnie wrażenie (przez programistów FP), że jest to okropna praktyka, ponieważ bardzo utrudnia czytanie kodu. Trzeba przejść przez cały kod, aby dowiedzieć się, jakie atrybuty ma DataObj. **Pytanie** : Jak mogę napisać to od nowa, aby uzyskać większą łatwość konserwacji bez poświęcania elastyczności? Czy są jakieś pomysły z programowania funkcjonalnego, które mogę zaadoptować? Szukam tam najlepszych praktyk. **Uwaga** : jednym z pomysłów jest wstępne zainicjowanie klasy ze wszystkimi atrybutami, które spodziewamy się napotkać, np. class DataObj: "Catch-all data object" def __init__(self): data.a = 0 data.b = "" data.c = [] def processData(inputs): data = DataObj() data.a = 1 dane .b = "sym" data.c = [2,5,2,1] Czy to rzeczywiście dobry pomysł? A jeśli nie wiem, jakie są moje atrybuty a priori?


title: Kiedy budować (kod) a kiedy kupować (pobrać wtyczkę)

text: Ostatnio pracowałem z dużą grupą utalentowanych programistów, co doprowadziło do dyskusji na temat tego, kiedy powinniśmy zacząć budować własne komponenty (web js/css), a kiedy pobierać i modyfikować istniejące komponenty, które nie do końca pasują do potrzeb projektu. Czy ktoś zna lub może zasugerować najlepsze praktyki dotyczące tego typu zagadek?


title: Koncepcja wyszukiwania rozmytego bazy danych

text: Myślałem o tym i próbowałem wymyślić rozwiązania dotyczące rozmytego przeszukiwania bazy danych, jeśli na przykład użytkownik wpisze błąd ortograficzny. Jakieś rażące problemy z logiką stojącą za tym? Czy to zadziała i czy zostało to zrobione wcześniej? Nasza tabela, którą chcemy przeszukać: **tblArticles** Body - Soundex_Body - CharacterCoded_Body Tak więc przechowujemy surowy tekst do fizycznego wyświetlenia. Pozostałe 2 kolumny są używane do wyszukiwania, które jest wstępnie obliczone w następujący sposób: **Soundex** Treść jest dzielona na słowa i tłumaczona na wersję Soundex. IE, wynikowe ciało może wyglądać tak: H252 B54 C23 E33... itd. Więc ktoś może wpisać „dinozaur”, a treść artykułu brzmi „dinozaur”, oba oceniają na B26. Następnie uruchamiamy LIKE na wartości soundex wyszukiwanego terminu. **Kod znaków** Biorąc pod uwagę mapowanie znaków, które mapuje znaki na liczby pierwsze, IE: h = 2 e = 3 l = 5 o = 7 p = 11 c = 13 help = 2*3*5*11 = 330 hello = 2*3*5*5*7 = 1050 piekło = 2*3*5*5 = 150 hlep = 2*5*3*11 = 330 wiolonczela = 13*3*5*5*7 = 6825 Jeśli użytkownik miał na myśli aby wpisać „hello”, ale zamienili dwa lub więcej znaków, na przykład „hlelo”, otrzymaliby tę samą liczbę. Podziel surowe ciało na słowa, zakoduj każde słowo jako pierwsze i zapisz w bazie danych, dając pole, które wygląda tak: 330 6825 330 1050... itd. Możemy wtedy polubić wyszukiwanie tej wartości, aby dopasować błędne typy. **Korzyści** * Ochrona przed literówkami * Ochrona przed błędną pisownią fonetyczną * Bardziej przyjazny dla osób nie będących rodzimym językiem angielskim * Będzie działać w każdym języku (w którym działa soundex) Komentarze i przemyślenia? Rodzaj wielowarstwowego poszukiwania. Możesz oczywiście zważyć zwracane wartości, aby było jeszcze lepiej (tzn. dosłowne dopasowanie treści tekstu jest warte więcej), ale czy jest to dobre rozwiązanie w przypadku błędów ortograficznych i wyszukiwania osób nie będących rodzimymi użytkownikami języka angielskiego?


title: Konfiguracja side-by-side w systemie Linux/ELF

text: Jedną z najlepszych/najgorszych innowacji w oprogramowaniu Microsoftu (doskonała pod względem kompatybilności; fatalna pod względem wydajności) jest konfiguracja Windows Side by Side. Dzięki temu różne komponenty programu mogą mieć wiele wersji bibliotek wykonawczych C/C++ załadowanych do tego samego procesu. To zawsze robiło na mnie wrażenie ze względu na doskonałą kompatybilność wsteczną, jaką zapewnia. Na przykład możesz uruchomić stary program, który łączy się z bardzo starymi środowiskami wykonawczymi C/C++ i łączyć go z lub dynamicznie wstrzykiwać nową bibliotekę DLL, która zależy od nowego środowiska wykonawczego C/C++, a wszystkie oddzielne wystąpienia środowisk wykonawczych będą współistnieć jednocześnie w przestrzeni adresowej i będą wywoływane przez zestaw, który się do nich odwołuje. Jednak w Linuksie pliki binarne, dla których nie jest dostępne źródło, mają tendencję do "gnicia" z czasem - dość szybko. Powodem jest to, że większość interesujących programów w końcu musi połączyć się z powrotem do bibliotek zainstalowanych w katalogach systemowych (`/usr/lib`, itp.). Ale ponieważ środowiska wykonawcze C/C++ i biblioteki systemowe często zmieniają ABI, Twój program po prostu przestaje działać po uaktualnieniu dystrybucji. Może to być również spowodowane na przykład przez oprogramowanie z „zaplecza”, które ostatecznie łączy się z bibliotekami systemowymi. Przykładem jest OpenGL, którego ze względu na różnorodność i zmienność implementacji nie mogą zapewnić dystrybucje binarne. Po prostu muszą zależeć od implementacji OpenGL systemu. Ale jeśli twój system OpenGL łączy się z `libstdc++`, możesz potencjalnie umrzeć. Dzieje się tak, że stary plik wykonywalny ładuje swoją lokalną kopię `libstdc++`, a współdzielona biblioteka OpenGL ładuje systemową kopię `libstdc++`. Te dwa konflikty, a jeden z nich nie chce się załadować, co zwykle oznacza, że OpenGL odmawia pracy, a program ulega awarii. Dla „zwykłego” programisty aplikacji, czy coś takiego jak WinSxS jest możliwe do osiągnięcia w Linuksie bez większych zmian architektonicznych w formacie binarnym ELF i ABI jądra Linuksa? A może jest to coś, co musiałoby zostać wbudowane w biblioteki systemowe w czasie kompilacji i wdrażane przez długi czas, wprowadzając zmiany w ELF, glibc, libstdc++, kompilatorach i tak dalej?


title: Jak modelowane są obiekty w funkcjonalnym języku programowania?

text: W odpowiedzi na to pytanie (napisane przez Pete'a) są pewne rozważania na temat OOP kontra FP. W szczególności sugeruje się, że języki FP nie są zbyt odpowiednie do modelowania (trwałych) obiektów, które mają tożsamość i stan zmienny. Zastanawiałem się, czy to prawda, czyli innymi słowy, jak modelować obiekty w funkcjonalnym języku programowania. Na podstawie mojej podstawowej wiedzy o Haskell sądziłem, że można w jakiś sposób wykorzystać monady, ale naprawdę nie wiem na tyle na ten temat, aby wymyślić jednoznaczną odpowiedź. W jaki więc sposób jednostki z tożsamością i zmiennym stanem trwałym są zwykle modelowane w języku funkcjonalnym? **EDYTUJ** Oto kilka dalszych szczegółów, aby wyjaśnić, co mam na myśli. Weźmy typową aplikację Java, w której mogę (1) wczytać rekord z tabeli bazy danych do obiektu Java, (2) zmodyfikować obiekt na różne sposoby, (3) zapisać zmodyfikowany obiekt w bazie danych. Jak miałoby to być realizowane m.in. w Haskell? Najpierw wczytałbym rekord do wartości rekordu (zdefiniowanej przez definicję danych), wykonałbym różne przekształcenia, stosując funkcje do tej wartości początkowej (każda wartość pośrednia jest nową, zmodyfikowaną kopią oryginalnego rekordu), a następnie zapisałem końcową wartość rekordu do bazy danych. Czy to wszystko? Jak mogę się upewnić, że w każdym momencie tylko jedna kopia akt jest ważna/dostępna? Nie chcemy, aby różne niezmienne wartości reprezentujące różne migawki tego samego obiektu były dostępne w tym samym czasie.


title: btnBack vs backButtonField

text: Do tworzenia Blackberry GUI. Używam konwencji nazw, takich jak backButtonField, a niektórzy z moich kolegów używają btnBack. Ale czasami utknąłem z nazwami takimi jak loginVerticalFieldManager to bardzo długa nazwa. W tym czasie vfmLogin wygląda lepiej Więc dla nazw komponentów GUI, jakiej konwencji powinienem przestrzegać?


title: Czy powinienem unikać lub obejmować zadawanie pytań innym programistom w pracy?

text: Jako student CS, ludzie wokół mnie albo się uczą, albo płacą za naukę, ale jako programista, ludzie wokół mnie mają swoje własne zadania. Nie płacą im za nauczanie mnie i odwrotnie, płacę mi za wkład. Kiedy po raz pierwszy zacząłem pracować jako spółdzielnia programistyczna, zostałem wprowadzony do ogromnej bazy kodu napisanego w języku, którego nigdy wcześniej nie używałem. Miałem mnóstwo pytań, ale nie chciałem niepokoić wszystkich moich współpracowników – to zmarnowało ich czas i zraniło moją dumę. Zamiast tego spędziłem dużo czasu przeskakując między IDE a przeglądarką, próbując zrozumieć to, co już zostało napisane i odróżnić oczekiwane zachowanie od objawów błędów. Pytałem moich współpracowników, gdy czułem, że źródłem mojego braku zrozumienia jest wewnętrzna koncepcja, której nie znalazłbym w Internecie, ale poza tym starałem się ograniczyć moje pytania do godzin lunchu. Oczywiście zdarzały się sytuacje, w których traciłem czas, próbując zrozumieć coś w kodzie w Internecie, który miał w swoim sercu wewnętrzną koncepcję, ale ogólnie czułem, że byłem wystarczająco produktywny podczas mojego pierwszego semestru, wnosząc około można się było spodziewać i uzyskać całkiem przyzwoite zrozumienie dużych części produktu. Zastanawiałem się, co starsi programiści sądzą o tym sposobie myślenia. Czy nowi programiści powinni zadawać więcej pytań, aby przyspieszyć, czy też powinni sami przeprowadzić własne badania? Widzę korzyści dla obu sposobów myślenia i spodziewam się dużej różnorodności odpowiedzi, ale myślę, że nowi programiści mogą docenić twoje odpowiedzi, nie zastanawiając się nad zadawaniem tego pytania.


title: Projekty open source C++ TDD

text: Czy są jakieś projekty open source, które są napisane w C++ w sposób zwinny (może TDD?). Próbuję przyczynić się do projektu open source C++, aby nadrobić zaległości w języku i nie jestem pewien, gdzie szukać, ponieważ język nie jest już głównym nurtem wśród hipsterów :P **Edytuj**: Nie myślę, że wyraziłem się jasno (przepraszam, angielski nie jest moim językiem ojczystym) - chcę przyczynić się do projektu open source napisanego w C++, który przestrzega reguł TDD i takich, a nie frameworków TDD zaimplementowanych w C++ (choć może to być opcja ).


title: Czy poleganie na sparametryzowanych zapytaniach jest jedynym sposobem ochrony przed wstrzyknięciem SQL?

text: Wszystko, co widziałem na temat ataków typu SQL injection, wydaje się sugerować, że sparametryzowane zapytania, szczególnie te w procedurach składowanych, są jedynym sposobem ochrony przed takimi atakami. Podczas mojej pracy (w średniowieczu) procedury przechowywane były postrzegane jako kiepska praktyka, głównie dlatego, że były postrzegane jako mniej łatwe w utrzymaniu; mniej testowalny; silnie sprzężone; i zamknęliśmy system u jednego dostawcy; (to pytanie dotyczy kilku innych powodów). Chociaż kiedy pracowałem, projekty praktycznie nie zdawały sobie sprawy z możliwości takich ataków; przyjęto różne zasady, aby zabezpieczyć bazę danych przed różnego rodzaju korupcją. Reguły te można podsumować następująco: 1. Żaden klient/aplikacja nie miał bezpośredniego dostępu do tabel bazy danych. 2. Wszystkie dostępy do wszystkich tabel odbywały się przez widoki (a wszystkie aktualizacje tabel podstawowych zostały wykonane przez wyzwalacze). 3. Wszystkie elementy danych miały określoną domenę. 4. Żaden element danych nie mógł być zerowy – miało to konsekwencje, że administratorzy baz danych czasami zgrzytali zębami; ale został wymuszony. 5. Odpowiednio skonfigurowano role i uprawnienia – np. zastrzeżoną rolę, aby tylko widoki miały prawo do zmiany danych. **Czy więc zestaw (wymuszonych) reguł, takich jak ten (choć niekoniecznie ten konkretny zestaw) jest odpowiednią alternatywą dla sparametryzowanych zapytań w zapobieganiu atakom typu SQL injection? Jeśli nie, dlaczego nie? Czy baza danych może być zabezpieczona przed tego typu atakami za pomocą (tylko) specyficznych środków bazodanowych?** **EDYTUJ** W świetle otrzymanych wstępnych odpowiedzi, znaczenie pytania uległo nieznacznej zmianie. Pytanie podstawowe bez zmian. **EDIT2** Podejście polegające na sparametryzowanych zapytaniach wydaje się być jedynie peryferyjnym krokiem w obronie przed atakami na systemy. Wydaje mi się, że bardziej podstawowe mechanizmy obronne są pożądane i mogą sprawić, że poleganie na takich zapytaniach nie będzie konieczne lub mniej krytyczne, nawet w przypadku obrony przed atakami typu Injection. Podejście zawarte w moim pytaniu polegało na „opancerzeniu” bazy danych i nie miałem pojęcia, czy jest to realna opcja. Dalsze badania sugerują, że istnieją takie podejścia. Znalazłem następujące źródła, które dostarczają wskazówek do tego typu podejścia: http://database-programmer.blogspot.com http://thehelsinkideclaration.blogspot.com Podstawowe cechy, które zaczerpnąłem z tych źródeł to: obszerny słownik danych połączony z obszernym słownikiem danych bezpieczeństwa 2. Generowanie wyzwalaczy, zapytań i ograniczeń ze słownika danych 3. Minimalizuj kod i maksymalizuj dane Odpowiedzi, które otrzymałem do tej pory są bardzo przydatne i wskazują na trudności wynikające z ignorowania sparametryzowanych zapytania, ostatecznie nie odpowiadają na moje oryginalne pytania (teraz wyróżnione pogrubioną czcionką).


title: Wyjątek podczas rejestrowania wyjątku: czy słuszne jest ich ignorowanie?

text: Moje pytanie dotyczy php, ale myślę, że może być przydatne w innych językach. Loguję do tabeli wszystkie wyjątki, które może zgłosić kod: try{ //Jakiś kod } catch (Wyjątek $e) { $log = new Log(basename($_SERVER['PHP_SELF']), $_SESSION['id' ], LogType::WYJĄTEK, $e); spróbuj { $log -> addLog(); } catch (Exception $e2) { // } } Funkcja addLog wstawia informacje o wyjątku do bazy danych. Ale (na przykład w przypadku utraty połączenia z bazą danych) ta funkcja może zgłosić wyjątek. Nie widzę, co mam zrobić z tym wyjątkiem, z wyjątkiem ignorowania go. Wiem, że ignorowanie wyjątków to zła praktyka, ale co mogę zrobić w tym konkretnym przypadku? Jeśli nie ma problemu, aby go zignorować, czy istnieje lepszy sposób na wskazanie, że ten wyjątek nie powinien być brany pod uwagę?


title: Rekonstrukcja drzewa Huffmana przy użyciu minimalnej ilości informacji w nagłówku

text: Piszę program kodujący huffmana w C. Staram się zawrzeć jak najmniej informacji w nagłówku, wiem, że najprostszym sposobem na dekompresję pliku w nagłówku byłoby przechowywanie częstotliwości każdego znaku w plik, ale dla dużego pliku z 256 znakami zajęłoby 2304 bajty ((1 bajt na znak + 8 bajtów na `długą` częstotliwość) * 256), co moim zdaniem nie jest optymalne. Wiem, że mogę zrekonstruować drzewo ze skanowania w przedsprzedaży i skanowania w kolejności, ale to nie wymaga zduplikowanych wartości. To źle, ponieważ teraz muszę przechowywać każdy węzeł w drzewie (w drzewie Huffmana: `n*2 - 1` gdzie `n` jest liczbą unikalnych znaków), dwa razy, przy czym każdy węzeł ma wartość `long` (co może zająć `((256*2 - 1) * 2) * 8 = 8176` bajtów. Czy jest jakiś sposób, którego tu brakuje, czy są to moje jedyne opcje? Dzięki.


title: Jakiego interfejsu używa Python do implementacji gniazd?

text: Kiedy programowałem w Pythonie, uważam, że łączyłem się z warstwą transportową za pomocą gniazd. Jeśli Python został zaprogramowany przez ludzi, musieli użyć interfejsu, który był „niższy” niż gniazda, aby zapewnić _nam_ interfejs do gniazd. Zakładam, że firewalle, również programowane przez ludzi, wykorzystują interfejsy niższych warstw w ten sam sposób, więc czy jest sposób na dostęp do tych niższych warstw pod względem programistycznym?


title: Czy podczas przeprowadzania testów PHPUnit często używa się oddzielnej bazy danych do testowania?

text: Uruchamiam testy z tej samej bazy danych, której używam w rozwoju. Przypominam sobie, że używałem Railsów i do testowania użyłem osobnej bazy danych (głównie dlatego, że tutorial, o którym mówiłem). Jednak miało sens. Zastanawiałem się, czy to był powszechny sposób robienia rzeczy lub czy istnieje alternatywa. Czy ktoś może rzucić na to trochę światła?


title: cx_Freeze'd licencja aplikacji

text: Mam program Pythona spakowany do .exe przy użyciu cx_Freeze. Próbuję zrozumieć konsekwencje licencjonowania: * czy muszę odtwarzać umowę licencyjną cx_Freeze? * czy muszę odtwarzać licencję Pythona (PSF)? * ponieważ python ma wbudowane standardowe moduły, które mogą mieć jeszcze inną licencję, czy muszę je dołączyć (to dlatego, że cx_Freeze prawdopodobnie też je spakuje, nawet jeśli ich nie używam)? Wszelkie wskazówki będą mile widziane!


title: Badanie pokazuje, że lines_written/time są niezależne od języka dla większości programistów. Gdzie można go znaleźć?

text: Badanie pokazuje, że lines_written/time są niezależne od języka i aplikacji dla większości programistów. Gdyby to było prawdą, oznaczałoby to, że im bardziej zwięzły jest język, tym bardziej produktywny może być programista. Gdzie można znaleźć to badanie?


title: Przypadki użycia „prywatnych” interfejsów?

text: Zastanawiałem się, czy istnieje prawidłowy przypadek użycia umożliwiający prawidłowe zdefiniowanie określonych właściwości wewnętrznych i funkcji klasy w sposób podobny do tego, jak interfejs definiuje właściwości i funkcje publiczne klasy. Wyobraź sobie zadanie, jakie masz do zbudowania klasy opisującej człowieka. Oczywiście, każdy człowiek jest istotą humanoidalną, ale nie każda istota humanoidalna jest człowiekiem, więc prawdopodobnie miałbyś interfejs IHumanoid z takimi funkcjami (ponieważ nie jest przydatne zakodowanie planu ciała w klasie): public interface IHumanoid { funkcja get head():IHead; funkcja get torso():ITorso; funkcja get leftArm():IArm; funkcja get rightArm():IArm; funkcja get leftLeg():ILeg; funkcja get rightLeg():ILeg; } Dalej i oczywiście, każdy człowiek jest ssakiem, ale nie każdy ssak jest człowiekiem, więc prawdopodobnie istnieje inny interfejs IMammal z dwiema definicjami dla mężczyzn i kobiet unoszących się gdzieś w pobliżu: interfejs publiczny IMammal { function procreate(partner:IMammal):void; } interfejs publiczny IMaleMammal extends IMammal { function inseminate(female:IFemaleMammal):void; } interfejs publiczny IFemaleMammal extends IMammal { function conceive(partner:IMaleMammal):Boolean; funkcja dajNarodziny():IMammal; funkcja pielęgniarka(potomstwo:IMammal):void; } Zatem nasza klasa prawdopodobnie wygląda teraz mniej więcej tak: public class Human implementuje IHumanoid, IMammal { private var _head:IHead; prywatna var _torso:ITorso; prywatna var _leftArm:IArm; prywatna var _rightArm:IArm; prywatna var _leftLeg:ILeg; prywatna var _rightLeg:ILeg; public function Human() { // ctor... } public function get head():IHead { return _head; } public function get torso():ITorso { return _torso; } funkcja public get leftArm():IArm { return _leftArm; } funkcja public get rightArm():IArm { return _rightArm; } funkcja public get leftLeg():ILeg { return _leftLeg; } funkcja publiczna get rightLeg():ILeg { return _rightLeg; } public function procreate(partner:IMammal):void { // funkcja "abstrakcyjna" } } public class MaleHuman rozszerza Human implementuje IMaleMammal { override public function procreate(partner:IMammal):void { if (partner is IFemaleMammal) { inseminate(partner) ); } } funkcja public inseminate(female:IFemaleMammal):void { female.conceive(this); } } public class FemaleHuman extends Human implementuje IFemaleMammal { override public function procreate(partner:IMammal):void { if (partner to IMaleMammal) { conceive(partner); } } public function conceive(partner:IMaleMammal):Boolean { // ... } public function giveBirth():IMammal { // ... } public function nurse(offspring:IMammal):void { // ... } } Od tego momentu możemy dalej implementować nasze klasy i wszystko działa dobrze i dobrze, dopóki nie otrzymamy zadania użycia istniejących interfejsów do zaimplementowania innych klas. Może goryl, orka i dziobak. Ignorując ogromny problem, jaki dziobak będzie stanowił dla naszej obecnej struktury interfejsu (*kaszel* ssak składający jaja *kaszel*), mamy „problem”, że nic nie stoi na przeszkodzie, aby dać mózgowi gorylowi 2, płucom orki 8 i połowie dziobaka kilkanaście wątrób. I chociaż możemy być wystarczająco zdyscyplinowani, aby podążać za strukturą, którą zwykle mają ssaki, nie możemy zagwarantować tego samego, jeśli otworzymy API dla innych programistów, którzy mogą kodować kilka poważnie zepsutych rzeczy, które nadal wyglądają dobrze dla świata zewnętrznego. Dlatego zastanawiałem się, czy istnieje prawidłowy przypadek użycia, aby stworzyć coś w rodzaju "interfejsu prywatnego", który definiuje funkcje i właściwości niepubliczne. Być może coś podobnego: struktura public SMammal { function get brain():IBrain; funkcja pobierz wątrobę():ILiver; funkcja get leftLung():ILung; funkcja get rightLung():ILung; funkcja get leftKidney():IKidney; funkcja get rightKidney():IKidney; } public class Człowiek implementuje IHumanoid, IMammal podąża za SMammal { funkcja prywatna pobierz brain():IBrain { // ... } funkcja prywatna pobierz liver():ILiver { // ... } // itd. itd. } funkcja istnieje w dowolnym języku programowania? Czy do rozwiązania tego problemu można użyć klas abstrakcyjnych? A może nie powinniśmy się tym przejmować, dopóki interfejs publiczny jakoś działa zgodnie z oczekiwaniami?


title: Czy możliwe jest stworzenie jednego tokenizera, aby to przeanalizować?

text: To wykracza poza ten inny wątek pytań i odpowiedzi, ale wchodzi w szczegóły, które są poza zakresem pierwotnego pytania. Generuję parser, który ma przeanalizować gramatykę kontekstową, która może przyjmować następujący podzbiór symboli: `,`, `[`, `]`, `{`, `}`, `m/[a- zA-Z_][a-zA-Z_0-9]*/`, `m/[0-9]+/` Gramatyka może przyjmować następujący ciąg `{ abc[1] }, }` i przetwarzać go jako (`{`, `abc[1]`, `},` `}`). Innym przykładem byłoby wzięcie: `{ abc[1] [, }` i przetworzenie go jako (`{`, `abc[1]`, `[,`, `}`). Jest to podobne do gramatyki używanej w Perlu dla składni qw(). Nawiasy klamrowe wskazują, że zawartość ma być tokenizowana białymi znakami. Nawias zamykający musi być sam w sobie, aby wskazać koniec grupy tokenizowanej z białymi znakami. Czy można to zrobić za pomocą pojedynczego leksera/tokenizera, czy też przy parsowaniu tej grupy konieczne byłoby posiadanie osobnego tokenizera?


title: Dlaczego w językach programowania błędy są nazywane „Wyjątek”, ale nie „Błąd”?

text: Właściwie to myślałem o tym od dłuższego czasu. Sam nie jestem native speakerem, ale nadal mam wieloletnie doświadczenie w programowaniu i zawsze o to pytałem. Dlaczego nazywa się to wyjątkiem, ale nie błędem, ponieważ są to błędy. Może to być „PageNotFoundError”zamiast „PageNotFoundException”.


title: Właściwy sposób na „skompilowanie” projektu javascript?

text: Zajmuję się tworzeniem małej biblioteki javascript o otwartym kodzie źródłowym i zastanawiałem się nad odpowiednią metodą kompilacji źródła w jeden plik javascript. Łatwiej jest programować, jeśli kod jest podzielony na wiele plików, ale biblioteki są dołączane jako jeden duży plik, gdy są używane w innej aplikacji. Moja obecna metoda „kompilacji” polega na użyciu makefile do skopiowania każdego podmodułu do głównego pliku, a następnie zminifikowania go. Jaki jest właściwy sposób, aby to zrobić?


title: Niechronologiczne wdrożenie TFS?

text: Mamy następujący scenariusz: Zestaw zmian nr 1 to niedokończone sprawdzanie do zbudowania Zestaw zmian nr 2 to ukończone małe zadanie.. Zestaw zmian nr 5 kończy pracę wykonaną w CS nr 1 Wszystkie one wpływają na tę samą wyjściową bibliotekę dll. Jak wdrażamy zmiany wykonane w CS#2 bez innych prac? Jak możemy uniknąć powtórzenia się tej sytuacji w przyszłości?


title: Zarządzanie wieloma osobami pracującymi nad projektem z GIT

text: Jestem bardzo nowy w GIT/GitHub (tak nowy, jak od wczoraj). Chciałbym wiedzieć, jaki jest najlepszy sposób na zarządzanie wieloma osobami pracującymi nad tym samym projektem za pomocą Github. Obecnie zarządzam jednym projektem z czterema programistami. 1. Jak mam postępować z przepływem pracy i upewnić się, że wszystko jest zsynchronizowane? (Uwaga: wszyscy programiści będą mieli jedno uniwersalne konto.) 2. Czy każdy programista musi być w innym oddziale? 3. Czy będę w stanie obsłużyć 2 osoby pracujące na tym samym pliku? Proszę o szczegółową odpowiedź, nie jestem nieśmiałym czytelnikiem. Muszę to dobrze zrozumieć.


title: Jak znaleźć błąd w aplikacji serwera tcp, dla której nie ma kodu źródłowego?

text: Mam aplikację kliencką c++/cli tcp wysyłającą dane w określonym formacie, takim jak **`L,20100930033425093,-5.929958,13.164021`** do głównej aplikacji na porcie 9000. Główna aplikacja jest faktycznie wykonywana przez innego dostawcę i Nie mam do tego kodu źródłowego. Teraz mogę komunikować się z żądaną aplikacją za pomocą adresu IP i numeru portu. Ale dane, które powinny być widoczne w GUI głównej aplikacji, nie są wyświetlane. Ale użyłem innej aplikacji demonstracyjnej serwera gniazd z tym samym adresem IP, co główna aplikacja, aby odbierać dane, które wysyłam. Działa idealnie. Teraz nie wiem, gdzie jest błąd ani czy strumień jest odbierany po drugiej stronie. Jak mogę skutecznie rozwiązać tę sytuację. Proszę o to w szerszym ujęciu, aby uzyskać kilka pomysłów. Wszelkie sugestie lub dyskusje na ten temat będą pomocne?


title: Czy jest jakiś film online, który daje przydatny wgląd w programowanie w niektórych językach lub ogólnie?

text: Ostatnio zacząłem oglądać serię wykładów Douglasa Crockforda na temat Javascript i innych tematów. Zastanawiam się: czy są też takie wykłady/wykładowcy dla innych języków? **EDYTUJ:** Dzięki za kilka odpowiedzi, na pewno je sprawdzę. Muszę jednak powiedzieć, że osobiście interesują mnie języki i technologie związane z tworzeniem stron internetowych lub wszelkiego rodzaju filmy, których treść może dotyczyć więcej niż jednego języka. Oczywiście każdy dobry zasób wideo online jest nadal mile widziany, ponieważ chcę, aby to pytanie było jak najbardziej przydatne dla innych osób. Również punkty bonusowe, jeśli zawartość można pobrać i obejrzeć w iTunes.


title: Czym jest niezobowiązujące podejście do analizy oprogramowania

text: Kiedy myślę o analizie oprogramowania, pierwszą rzeczą, która przychodzi mi do głowy, jest SSADM i UML. Ale to, czego chcę, to widok systemu na wysokim poziomie, zanim zdecyduję się na paradygmat programowania. Gdzie się mylę? Jak podejść do problemu na wysokim poziomie i ogólnie, zanim zdecyduję się na paradygmat? Jakie są dostępne diagramy/narzędzia, które mogą mnie wspierać? Edycja: Niektóre przykłady narzędzi, które wydają się być tym, czego szukam, to... Schemat blokowy - http://en.wikipedia.org/wiki/Block_diagram Schemat przepływu danych - http://en.wikipedia.org /wiki/Schemat_przepływu danych


title: Jak zgłosić błąd/poprawkę dla dyskretnej walidacji jquery?

text: Znalazłem mały błąd w zdalnej walidacji microsoft mvc3, dotyczący JavaScriptu Clientside zaimplementowanego w dyskretnym javascript jquerys. Problem/błąd można naprawić, dodając kilka wierszy do pliku jquery.validate.unobtrusive.js, który jest dołączony do instalacji Microsoft mvc3. Nie mogę znaleźć repozytorium błędów na jquery.com lub w jego obszarze wtyczek. Czy nie widzę drzewa w lesie, czy też nie zwariowałem - gdzie mam się udać z tym problemem - mam już gotową poprawkę, ale obawiam się, że następnym razem jquery.validate.unobtrusive.js zostanie zaktualizowany ( nowa wersja) i jest stosowana do mojego projektu, moja poprawka jest nadpisana. Wygłupiałem się też dodając jakiś javascript, który po załadowaniu jquery.validate.unobtrusive.js podmienia adapter (który ma błąd) na własną wersję - problem w tym, że jest dosyć brzydki i co robić?


title: Konwencja nazewnictwa plików dla obrazów przechowywanych w kontroli wersji?

text: Moja aplikacja ma plik ikony, który jest przechowywany w kontroli wersji. Teraz jutro może zdecyduję się zmienić ikonę. Rozważam dwie możliwe konwencje nazewnictwa dla pliku ikony: 1. Utrzymuj stałą nazwę pliku, np. application.ico 2. Czy nazwa pliku odzwierciedla charakter obrazu, np. happyface.ico Opcja 1 nie mówi co plik jest. Mogłoby to dawać złudzenie, że dwa szalenie różne obrazy są w jakiś sposób różnymi „wersjami” tego samego. W przypadku opcji 2 musiałbym nie tylko dodać nowy plik i usunąć stary, ale także zmodyfikować plik zasobów, aby odzwierciedlić nową nazwę pliku ikony. Pod podobnym, ale innym kątem: strona internetowa z obrazem w nagłówku. Czy nazwa pliku to header.jpg czy sunrise-family- smiling.jpg? Czy nazwy plików graficznych powinny odzwierciedlać ich funkcję w aplikacji czy ich zawartość? Jaka byłaby najlepsza praktyka w tym zakresie?


title: Jak to jest programować bez wzroku?

text: Za namową ojca niedawno zapisałam się na ubezpieczenie rentowe. Zaczęłam się zastanawiać, gdybym stała się ślepa, jak by to było pisać kod bez wzroku? Stare pytanie na Stack Overflow dotyczy dostępnych narzędzi, ale bardziej interesuje mnie doświadczenie, zwłaszcza kogoś, kto stracił wizję po nauczeniu się programowania. Wiem, że mój własny styl jest bardzo wizualny: pisząc kod po raz pierwszy, często piszę duży blok kodu, przeglądam go, aby zobaczyć, co ma sens, aby go rozdzielić, a następnie refaktoryzować go na osobne funkcje przez wycinanie/wklejanie . Wygląda na to, że byłoby to trudne bez _zobaczenia_ kodu. Czy po nauczeniu się pracy z narzędziami, takimi jak czytnik ekranu, doświadczenie jest w zasadzie takie samo? A może ma to bardziej istotny wpływ na sposób pisania kodu?


title: Określanie, czy dwa binarne drzewa wyszukiwania mają ten sam zestaw wartości

text: Oto pytanie z rozmowy kwalifikacyjnej: > Mając dwa binarne drzewa wyszukiwania, napisz program, który określi, czy zawierają one ten sam zestaw wartości. Załóżmy, że nie ma duplikatów. Moim pomysłem jest wykonanie przechodzenia w kolejności dla obu drzew i porównanie każdego elementu jeden po drugim. Zajmuje czas `O(n)` i przestrzeń `O(n)`. Jak mogę to zrobić w czasie `O(lg(n))` i przestrzeni `O(1)`?


title: Znajdowanie poddrzewa na drzewie

text: Mam drzewo: a / \ b c / \ d f / \ g h I wzór: x / \ y z / \ q p Jako wyjście chciałbym mieć: x: a y: b z: c q: d p: f i x: b y: f z: c q: g p: h Czy jest jakiś algorytm, któremu mógłbym przyjrzeć się?


title: Jak pisać historyjki użytkownika dla API frameworka

text: Potrzebuję pomocy w zrozumieniu, jak powinny wyglądać historyjki użytkowników dla frameworka do testowania stron internetowych, który tworzymy dla działu QA naszej organizacji. Staramy się uruchomić ten projekt za pomocą Scrum. Produkt będzie miał 3 warstwy: 1. Klasy użytkowe ułatwiające pracę z podstawowym narzędziem do automatyzacji sieci. 2. warstwa API typu page-object, która pozwoli naszym testerom pisać testy z perspektywy tego, jakie usługi oferują nasze strony, a nie z perspektywy narzędzia do automatyzacji sieci. 3. warstwa deklaratywna, która umożliwi pisanie testów w języku angielskim – być może scenariusze typu Ogórek. Ta warstwa zostanie zmapowana na warstwę interfejsu API obiektu strony, więc jeśli testu nie można wykonać deklaratywnie, autor testu może przejść do warstwy interfejsu API obiektu strony. Użytkownikiem końcowym tego frameworka jest nasza grupa QA, która będzie pisać testy na poziomie deklaratywnym lub, jeśli zajdzie taka potrzeba, na poziomie API obiektu strony. Moje pytanie brzmi, jak powinny wyglądać nasze historyjki użytkowników? Obecnie mamy historie, które opisują, co automatyzacja sieciowa powinna być w stanie zrobić (tj. znaleźć elementy na stronie, czekać na pojawienie się elementów), ale to nie może być prawda. Po pierwsze, moglibyśmy dostarczać tego rodzaju rzeczy już teraz, dając grupie QA podstawowe narzędzie automatyzacji. Te historie wyraźnie nie są warte demonstrowania w przeglądzie sprintu. Po drugie, historyjki powinny wskazywać wartość biznesową, która w tym przypadku nie polega na znajdowaniu elementów na stronie, ale na: * posiadaniu testów opartych na aktualnym, popularnym i skutecznym narzędziu do automatyzacji sieci. * posiadanie czytelnych testów * posiadanie rzeczywistych testów oddzielonych od narzędzia do automatyzacji sieci, które je obsługuje. Dobrze, ale jak podzielić produkt na bardziej szczegółowe historie użytkowników?


title: Dodanie podwójnego NIE JEST równe sumie podwójnego jako całości

text: Jestem świadomy błędów zmiennoprzecinkowych, ponieważ zdobyłem pewną wiedzę z moim pytaniem zadanym tutaj w Błędach zmiennoprzecinkowych SE. To, co jest dla mnie trudne do zrozumienia, to wyjście następującego programu. podwójne d1 = 0 + 1,123 + 2,456; podwójne d2 = 3,579; pływak f1 = 0f + 1.123f + 2.456f; pływak f2 = 3,579f; długi l1 = (długi) (0 + 1,123 + 2,456); długi l2 = (długi)3,579; System.out.println(d1==d2); // Wyjście = fałsz; System.out.println(f1==f2); // Wyjście = prawda; System.out.println(l1==l2); // Wyjście = prawda; > Dlaczego wynik to " **false" dla double** i **nie dla float** , nawet jeśli > float to 32-bitowa pojedyncza precyzja, a podwójna 64-bitowa podwójna precyzja. > Oracle docs Jakakolwiek pomoc w tym zakresie byłaby bardzo mile widziana.


title: Jakie są wskazówki dotyczące przesyłania przypadków testowych z kodem pytania do rozmowy kwalifikacyjnej?

text: Udzieliłem wywiadu dużej firmie internetowej. Po opisaniu problemu do rozwiązania ankieter poprosił mnie o przesłanie przypadków testowych wraz z kodem na maila. Nie jestem pewien, czy powinienem ujawnić problem, ale dotyczył on binarnych drzew wyszukiwania. Napisałem 4 przypadki testowe, różniące się od 0 do 10 węzłów. Zostałem odrzucony. Jakie są wskazówki dotyczące pisania przypadków testowych na rozmowy kwalifikacyjne? (Jak dużej sprawy spodziewają się ankieterzy? Ile spraw spodziewają się ankieterzy? itp.)


title: Łapiesz błąd?

text: Czy wyłapywanie błędu za pomocą `try ... catch` jest lepszą praktyką niż wyłapywanie błędu za pomocą odpowiedniej analizy/sprawdzenia błędów? Na przykład, usuwanie z pustej listy: Czy otaczanie klauzulą try catch uważa się za bardziej efektywny sposób niż testowanie, czy lista jest wcześniej pusta? A może to to samo? Dziękuję. P.S: Jeśli podobne pytanie zadano wcześniej na forum, prosimy o skierowanie go.


title: Zadania, zadania, czynności, operacje... którego terminu użyć i kiedy?

text: Moja aplikacja ma wiele różnych asynchronicznych „rzeczy”, które wykonuje: * Są rzeczy, które są uruchamiane z harmonogramu (co 5 minut) * Są rzeczy, które są uruchamiane, gdy użytkownik kliknie przycisk * Są rzeczy, które są uruchamiane przez przychodzące wywołanie usługi sieciowej Używam następujących terminów: * Rzeczy zaplanowane = Zadania * Rzeczy uruchamiane przez użytkownika = Zadania * Rzeczy uruchamiane przez usługi sieciowe = Operacje Zadania są dość skomplikowane, więc są implementowane przy użyciu hierarchii różnych obiektów, które wywołać Działania (operacje i zadania mogą również zacząć używać tych działań jako swoich elementów konstrukcyjnych). Czuję, że mogę używać niewłaściwych terminów – na przykład, czy spodziewałbyś się, że coś, co dzieje się automatycznie co 5 minut, będzie Pracą lub Zadaniem? Czy istnieje na to standard branżowy? Wszystkie słowa wydają się oznaczać to samo.


title: Jakie istnieją subkultury programowania/oprogramowania? Co je definiuje? Do którego należysz?

text: Zewnętrznemu światu programiści, informatycy, inżynierowie oprogramowania i programiści mogą wydawać się podobni, ale jest to dalekie od przypadku ludzi, którzy tworzą oprogramowanie do życia. Umiejętności i wiedza każdego pojedynczego programisty mogą być bardzo szerokie, podobnie jak jego narzędzia (system operacyjny, język i tak, preferowany edytor), a ta różnorodność rodzi wiele subkultur w oprogramowaniu - na przykład programiści, którzy aktywnie korzystają ze Stack Overflow i tej witryny, w porównaniu do wielu innych, którzy tego nie robią. Jestem ciekaw, aby usłyszeć od innych, jakie subkultury oprogramowania zetknęli się, do których należeli, podziwiali, nie lubili, a nawet stworzyli. Na początek spotkałem: * **Firmy i programiści Microsoft**: cały ich stos pochodzi z Redmond w stanie Waszyngton. E-mail to Outlook to e-mail. Sieć to IE i IIS. Mają duże segregatory swojej subskrypcji MS Developer Network pełne wielu wersji VB, .net, Visual Studio itp. Unika pracy z powłoką/wierszem poleceń. Nie patrz, o co tyle zamieszania z open-source i tym wszystkim. Firmy zorientowane na MS są zwykle 9-5 i dość korporacyjne (kierowane przez menedżerów biznesowych, a nie ludzi zajmujących się oprogramowaniem). W dzisiejszych czasach (biorąc pod uwagę szeroką dostępność narzędzi innych niż MS) jest to antyteza kultury hakerskiej. * **Ludzie CS'a ze starej szkoły** : często bardzo dobrze znają Lispa i Uniksa; czasami sami napisali półpopularnego Lispa lub narzędzie systemowe. Niewiele, jeśli w ogóle, rzeczy związanych z „inżynierią oprogramowania” są dla nich nowe i nie robią na nich wrażenia. Poznaj referencje, historię i implikacje wyższego poziomu dotyczące języków programowania, takich jak Lisp, C, Prolog i Smalltalk. Może być rozgoryczony wynikami AI w latach 80-tych i 90-tych. Zwykle są użytkownikami Emacsa. Potrafi wpisywać wielowierszowe polecenia powłoki bez mrugnięcia okiem. Ich rady mogą być tajemnicze, ale zawierają złoto, kiedy już je zrozumiesz. * **Twórcy stron internetowych dla początkujących** : dorastali na komputerach i grach wideo, ale często zaczęli programować dopiero pod koniec lat 90. lub na początku XX wieku. Wygodne z 1 do 1,5 języka skryptowego/dynamicznego; uważaj, że C i języki poza Ruby/Perl/Python są niepotrzebne/magiczne. Być może początkowo uważał HTML za programowanie. Kupuj Maca i bądź fanatyczny/irracjonalny. Używaj frameworków bardziej niż je buduj. Często przesadnie entuzjastycznie nastawieni do NoSQL i/lub Ruby On Rails. * **New-school CS**: dużo szkoleń w zakresie statystyki, modeli bayesowskich i wnioskowania; nie mów „AI”, mów „uczenie maszynowe”. Więcej Javy niż Lisp, ale mogą być również ekspertami w Haskell. Widzenie największych sukcesów w świecie rzeczywistym przez ekspertów w swojej dziedzinie (Google, finanse/kwanty) często sprawia, że są (nad) pewni siebie. Ale duże zbiory danych i ich rozproszone przetwarzanie naprawdę zmieniają świat. Powyższe przykłady w żadnym wypadku nie są kompletne, poprawne, ortogonalne ani obiektywne. :) Właśnie to, co widziałem osobiście i które dostarczyłem, aby wywołać dyskusję i zarys szerszego pytania. Nie krępuj się!


title: Czy język może obsługiwać coś takiego jak „Ponów/Napraw”?

text: Zastanawiałem się tylko, czy język może obsługiwać coś takiego jak blok Retry/Fix? Odpowiedź na to pytanie jest prawdopodobnie powodem, dla którego jest to zły pomysł lub odpowiednik czegoś innego, ale ten pomysł wciąż pojawia się w mojej głowie. nieważne F() { spróbuj { G(); } fix(WrongNumber wn, out int x) { x = 1; } } void G() { int x = 0; retry<int> { if(x !=1) throw new WrongNumber(x); } } Po uruchomieniu bloku poprawek blok ponawiania zostanie uruchomiony ponownie...


title: Metody abstrakcyjne używane jako metody statyczne w javie?

text: Próbując napisać jakiś ogólny kod, wstawiam do mojej abstrakcyjnej klasy metodę, która zwraca pewne statyczne informacje o tym, jak klasa powinna być traktowana. Ta metoda nie używa żadnych danych stanu i byłaby statyczna, z wyjątkiem tego, że statyczne metody abstrakcyjne nie są dozwolone. Czy to zapach kodu? czy jest coś, co należy zrobić, aby tego uniknąć? Nie napisałem jeszcze prawdziwego kodu. Oto krótki przykład koncepcyjny. Trochę niechlujne programowanie mądre, aby zrobić to szybko. zasadniczo sposób, w jaki kod zwraca informacje do modelu, w tym przypadku o tym, jak powinien być traktowany w ramach ogólnych funkcji modelu. Załóżmy, że wyliczenie przechowuje w tym przypadku dowolny stan konfiguracji. public abstract modelObject{ public abstract ModelGroup getModelGroup; public final void addToModel(){ Model.store(this.getModelGroup, this); } } public class myObject extends modelObject{ public ModelGroup getModelGroup(){ return ModelGroup.MyGroup; } } public class DifferentClass extends ModelObject{ public ModelGroup getModelGroup(){ return ModelGroup.differentGroup; } }


title: Jak zareagować na błędne/nieodpowiedziane pytania podczas rozmowy kwalifikacyjnej?

text: Dzisiaj odbyłem mój pierwszy wywiad z potencjalnymi praktykantami. Chociaż były to głównie pytania otwarte, miałem dla nich kilka trywialnych zadań programistycznych: * Napisz funkcję, która zwraca prawdę, jeśli boki trójkąta (wszystkie liczby całkowite) a, b i c mogą reprezentować trójkąt prostokątny. * FizzBuzz. * Oblicz N-ty element Fibonacciego za pomocą rekurencji (jeśli nie wiedzieliby, czym jest Fibonacci, napisałbym im nawet definicję F(n) = F(n-1) + F(n-2); F(1) = 1; F(0) = 1). * Zaimplementuj strukturę Lista liczb całkowitych i napisz funkcję, aby ją odwrócić. Są to oczywiście bardzo proste zadania i nie byłem przygotowany na to, że ktoś ich nie rozwiąże. Jak mam się zachowywać, gdy zmagają się z tymi pytaniami? Czy powinienem zrezygnować z odpowiedzi? Dawać napiwek po napiwku (zrobiłem to i sam rozwiązałem problem)? A może po prostu przejść (a może po prostu przestać) z wywiadem? ps. Przez problemy z pytaniami nie mam na myśli błędów, mam na myśli to, że nie mogą nawet zacząć. Tak było w przypadku pytań Fibonacciego i Listy.


title: Dlaczego powinienem pisać wszystkie instrukcje w Try-Catch?

text: Szef mojej firmy mówi, że muszę napisać cały , tj. WSZYSTKI mój kod w ramach instrukcji Try-catch. Teraz rozumiem podejście „lepiej bądź bezpieczny niż żałuj”, ale czy nie jest to zbyt tchórzliwe, aby myśleć, że będzie wyjątek, gdy utworzone zostaną etykiety, gdy pozycja formularza jest ustawiona. czy zdarzały się przypadki wyjątków w takich prostych operacjach.


title: Dziedziczenie a kompozycja w tym przykładzie

text: Zastanawiam się nad różnicami między dziedziczeniem a kompozycją badaną konkretnymi argumentami dotyczącymi kodu. W szczególności moim przykładem było Dziedziczenie: class Do: def do(self): self.doA() self.doB() def doA(self): pass def doB(self): pass class MyDo(Do): def doA(self ): print("A") def doB(self): print("B") x=MyDo() vs Composition: class Do: def __init__(self, a, b): self.a=a self.b= b def do(self): self.a.do() self.b.do() x=Do(DoA(), DoB()) (Uwaga dla kompozycji brakuje mi kodu, więc nie jest on właściwie krótszy) Czy możesz wymienić poszczególne zalety jednej lub drugiej? Myślę o: * kompozycja jest przydatna, jeśli planujesz ponownie użyć DoA() w innym kontekście * dziedziczenie wydaje się łatwiejsze; brak dodatkowych referencji/zmiennych/inicjalizacji * metoda doA może uzyskać dostęp do zmiennej wewnętrznej (czy to dobrze, czy źle :) ) * dziedziczenie grupuje logikę A i B razem; nawet jeśli równie dobrze można wprowadzić zgrupowany obiekt delegata * dziedziczenie zapewnia wstępnie zdefiniowaną klasę dla użytkowników; z kompozycją musiałbyś zawrzeć inicjalizację w fabryce, aby użytkownik musiał złożyć logikę i szkielet * ... _Zasadniczo chciałbym zbadać implikacje dziedziczenia vs kompozycji_. Słyszałem, że często preferowana jest kompozycja, ale chciałbym to zrozumieć na przykładzie. Oczywiście zawsze mogę zacząć od jednego, a później przerobić na drugie.


title: Standard zarządzania zmianą

text: Czy istnieje standard zarządzania zmianą, który jest powszechnie akceptowany w oprogramowaniu i innych branżach? Pracowałem w kilku firmach o zupełnie różnych domenach docelowych (bankowość inwestycyjna i telekomunikacja). Firmy miały bardzo podobną organizację i procesy Global Change Management (GCM). Dokładniej: 1. Był **dział GCM** odpowiedzialny za wszystkie zmiany związane z IT, takie jak zmiany zapory ogniowej w całej firmie, alokacja/obsługa baz danych, obsługa systemu kontroli wersji itp. 2. Pojawiło się pojęcie **zmiana zamarza**. Nie było możliwe zaimplementowanie moich zmian, jeśli data wprowadzenia zmiany była taka sama jak data zamrożenia zmiany. 3. Odbyło się **spotkanie GCM** (telekonferencja), na którym wszyscy dyskutowali o konieczności i wadze swoich zmian. Był on hostowany przez przedstawiciela działu GCM co tydzień o tej samej godzinie (na przykład we wtorek, 17:00 GMT). 4. Zmiany powinny zostać zatwierdzone przez **osoby zatwierdzające zmiany**. Były różne rodzaje wniosków, które miały własną listę obowiązkowych grup zatwierdzających. Grupy miały kilku członków pracujących w różnych strefach czasowych. Co najmniej jeden taki członek musi zatwierdzić GCM, aby cała grupa zatwierdziła zmianę. Wymagano, aby zatwierdzenia dla wszystkich obowiązkowych grup zatwierdzających zostały zebrane przed planowanym terminem wdrożenia. W przeciwnym razie istniała 100% gwarancja, że nie zostanie wdrożona. 5. **Biurokracja** procesów GCM była niezwykła. To było czyste biurokratyczne piekło. Narzędzia były okropne, ludzie powolni i uparci. Wprowadzenie nawet drobnych zmian było prawie niemożliwe. Czasami nie udało mi się uzyskać ostatniej akceptacji przed terminem wdrożenia lub nagle okazało się, że czas wdrożenia jest zaplanowany na czas zamrożenia zmian. Chciałabym się temu przyjrzeć, żeby mieć ogólną wiedzę na temat procesów GCM i tego, jak działają w różnych firmach. Chciałabym wiedzieć, czy wszędzie jest tak _cholernie_ okropnie_, czy to była po prostu kiepska implementacja procesów GCM w jednej konkretnej firmie.


title: Projektowanie wywiadu technicznego

text: Startowa firma, w której jestem zatrudniony, chce otworzyć biuro za granicą, a ja dostałem zadanie wymyślenia kilku rozsądnych pytań, które pomogą znaleźć/zatrudnić odpowiednich kandydatów do rozpoczęcia nowego biura. Poszukujemy przede wszystkim programistów Androida i iPhone'a, a także kilku kierowników zespołów (najlepiej z doświadczeniem na Androida/iPhone'a). Jednak naprawdę nie jestem fanem używania pytań specyficznych dla domeny jako części procesu rozmowy kwalifikacyjnej, więc bardzo chciałbym uniknąć wypytywania ludzi o „CoreData” lub „Aktywność” lub inne aspekty specyficzne dla platformy. Zamiast tego wolę ogólne podejście Google, które polega na szukaniu osób z solidną znajomością podstaw CS. Mając to na uwadze, przygotowałem następujący zestaw pytań i miałem nadzieję, że uda mi się uzyskać trochę recenzji naukowej: **Pytania agnostyczne dotyczące języka** (Oczekuje się, że kandydat poradzi sobie ze _wszystkimi_ z nich) 1. Napisz funkcja, która przekonwertuje ciąg na double bez wywoływania jakichkolwiek wbudowanych narzędzi, takich jak Double.parseDouble() lub atof() lub podobnych metod. Możesz założyć, że wprowadzane dane zawsze będą poprawnie sformułowane, zawsze będą zawierać kropkę dziesiętną i zawsze będą zawierać co najmniej jedną cyfrę po kropce dziesiętnej. Możesz zaimplementować swoje rozwiązanie w wybranym przez siebie języku lub używając pseudokodu, jeśli wolisz. Szablon Java: http://ideone.com/clone/y2Q6S Szablon Objective-C: http://ideone.com/clone/JcOR5 Bezpłatna wskazówka: Aby przekonwertować ze znaku na jego wartość całkowitą, możesz: int charValue = znak - '0'; 2. Napisz funkcję, która odwróci podany ciąg. Możesz założyć, że wprowadzone dane nie będą puste ani puste. Możesz zaimplementować swoje rozwiązanie w wybranym przez siebie języku lub używając pseudokodu, jeśli wolisz (jest to podstawowe pytanie typu sprawdzenie poprawności. Każdy inżynier z jakimkolwiek doświadczeniem powinien być w stanie wymyślić jakiś fragment kodu, który odwraca napis. Część 2: Napisz funkcję, która używa funkcji, którą zaimplementowałeś powyżej, aby sprawdzić, czy dany ciąg jest palindromem (tak samo w przód jak i w tył). Szablon Java: http://ideone.com/clone/36BlH Szablon Objective-C: http://ideone.com/clone/GZbha 3. Sprawdzasz następujący fragment kodu przesłany przez innego inżyniera: long fct(long n ) { wewn q; intr = 1; podczas gdy (n != 1); { r *= n; n--; } powrót r; } Jaką opinię dałbyś im? Czy w tym kodzie są jakieś błędy? Jeśli tak, to czym one są i czy możesz podać kilka przypadków testowych, które je podkreślą? **Pytania dotyczące konkretnych języków** (Oczekuje się, że kandydat będzie dobrze sobie radził z _co najmniej jednym_ z nich) 1. Rozważmy następujący fragment kodu Java: public static zsynchronizowany int add(int num1, int num2) { return num1 + num2; } public zsynchronizowane int add2(int num1, int num2) { return num1 + num2; } public int add3(int num1, int num2) { syncd(this) { return num1 + num2; } } Jaka jest różnica między każdą metodą? Czy jeden styl jest preferowany nad innymi? Jeśli tak, to który i dlaczego? Jakie są plusy i minusy każdego prezentowanego stylu? 2. Rozważmy następujący kod celu C: @interface TestObj : NSObject { NSString* string1; } @property(nonatomic, assign) NSString* string2; @property(nonatomic, keep) NSString* string3; @end @implementation TestObj @synthesize string2, string3; - (nieważny) processStrings { ciąg1 = @"Nowy ciąg"; ciąg2 = [[[Przydział ciągów NS] initWithString:@"Ciąg 2"] automatyczne wydanie]; self.string3 = [[Przydziel NSString] initWithString:@"Ciąg 3"]; [ciąg1 uwolnienie]; [string2 release]; [ciąg3 uwolnienie]; własny.ciąg2 = zero; ciąg3 = zero; } @end Jaka jest różnica między ciągiem1, ciągiem2 a ciągiem3? Czy są jakieś problemy ze sposobem wykorzystania ciągów w metodzie processStrings? Jeśli tak, to czym one są i jak byś je naprawił? Dla osób, które dobrze sobie radzą z tymi pytaniami, mam również zestaw pytań do otwartej dyskusji, które nie są tutaj zamieszczone i które dotyczą takich rzeczy, jak analiza złożoności, algorytmy, hashowanie, optymalizacja i podobne tematy. Użyłem już pytań otwartych na wielu kandydatach i wiem, że dobrze sobie radzą, oddzielając utalentowanych inżynierów od tych niezbyt dobrych. W każdym razie, czy to wszystko wydaje się rozsądne?


title: Problem z ustawianiem uprawnień dla administratorów i niższych użytkowników w projekcie

text: Pracuję w projekcie jsp i utknąłem w dużym problemie. Mój projekt składa się z tabeli kont dla superadministratora, sprzedawcy, administratora i użytkowników dla kadry kierowniczej i menedżera zmapowanych na koncie **Uprawnienia** **Superadministrator może wyświetlać lub dodawać szczegóły sprzedawcy, administratora, dyrektora i menedżera oraz edytować własne konto** **Sprzedawca może wyświetlać lub dodawać dane administratora, kierownika i menedżera oraz edytować własne konto, ale nie może utworzyć sprzedawcy** **Administrator może wyświetlać lub dodawać dane administratora i menedżera oraz może wyświetlać lub edytować własne konto, ale nie można utworzyć admina** **Kierownictwo może zobaczyć tylko jego dane i je edytować** Tak więc najwyższy priorytet ma konto superadministratora z dostępem dla wszystkich, następnie konto sprzedawcy, które ma dostęp do konta administratora i niższe konto które utworzył, a następnie konto administratora może uzyskać dostęp do użytkowników menedżera i dyrektora , następnie użytkownik menedżer może uzyskać dostęp do menedżerów, a następnie dyrektor może zobaczyć tylko swoje informacje Mam konta i tabelę użytkowników, Konta mogą być superadministratorem, sprzedawcą i administratorem wszyscy mają identyfikator konta i użytkowników są menedżerami i dyrektorami, którzy mają identyfikator użytkownika Mój problem polega na tym, jak to zrobić, jak zmapować te identyfikatory, ponieważ sprzedawca ma identyfikator konta i może dodać identyfikator konta (admin), więc aby pobrać dane sprzedawcy, muszę również pobrać dane niższego konta administratora W ten sam sposób dla każdego typu konta lub użytkownika, który się loguje, muszę zastosować inne zapytanie sql Na przykład, jeśli mam dodatkową tabelę szczegółów połączeń, która zawiera szczegółowe informacje o tym, który użytkownik (identyfikator_użytkownika) odbiera połączenie i które konto (identyfikator_konta) użytkownik jest zmapowany, więc muszę zastosować różne zapytania sql dla różnych kont i użytkowników, jak dla superadministratora `select * from call-details` dla resellera `select * from call-details` sprzedawcy i call-details powiązanego konta z nim dla administratora `wybierz * ze szczegółów połączenia`, gdzie połączenia są odbierane na tym koncie. i tak dalej i mam więcej tabel i więcej stron, wtedy bardzo trudno jest zastosować to podejście. Czy jest jakieś podejście, dzięki któremu mogę rozwiązać ten problem w mniej trudny sposób. Starałem się jak najlepiej wyjaśnić mój problem, proszę pytać ponownie, jeśli masz jakiekolwiek wątpliwości dotyczące zrozumienia mojego problemu. Każda pomoc byłaby mile widziana.


title: Podjąłem pracę, w której nie ma pracy!

text: Jest to związane z pytaniem (zamkniętym) Nowa praca - nie mam żadnej pracy do wykonania. Jestem od półtora tygodnia w zupełnie nowej pracy i mimo prośby o pracę, ciągle mnie zbywają. Konfiguracja tutaj jest tylko zbiorem usług, które są następnie dostarczane do świata zewnętrznego, więc wszelkie błędy, które się pojawiają, są zwykle po stronie dostawcy usług, więc o ile wiem, niewiele jest do zrobienia. W moim pierwszym tygodniu wykonawca faktycznie zrezygnował (po miesiącu po prostu tam siedziałem), a współpracownik (6 tygodni w) dyskutował o odejściu, czy jestem skazany na to samo? Do tej pracy przeniosłem się do miast i nie chciałbym myśleć o wpływie krótkiego pobytu w dużej firmie na moje CV – może wyglądać, że nie mogę go „zhakować” dla przyszłych pracodawców?


title: Jak często dokonujesz przeglądu i walidacji swoich praktyk/procesów?

text: Obecnie wprowadzamy zmiany w naszym procesie za pomocą następujących mechanizmów: * Cotygodniowe spotkanie podsumowujące * Pośmiertny projekt Omawiamy, co nie działa, co działa itp. Używam tych ustawień, aby wprowadzić nowe praktyki i wyeliminować te, które nie działają. działa. Zwykle wprowadzamy tylko 1 zmianę na raz i wypróbowujemy ją przez 2 tygodnie do miesiąca. Aby potwierdzić naszą zmianę, patrzymy na: * naszą prędkość i std. dewiacja (praca wykonana tydzień w tydzień) * dialektyka * nasza opinia/postrzeganie efektów i skuteczności praktyk Zachowujemy te praktyki, które wydają się dla nas działać. Wszystko inne zostaje usunięte. U nas działało to całkiem nieźle, ale zawsze jestem zainteresowany lepszymi sposobami, aby to zrobić. **Jak często/kiedy sprawdzasz swój proces rozwoju?** **W jaki sposób sprawdzasz, czy zmiany w swoim procesie są skuteczne?**


title: Jak stworzyć pojedynczy obiekt, który zmienia funkcjonalność na podstawie danych wejściowych programisty?

text: Mam kilka klas, które zachowują się zgodnie z jednym interfejsem. Ale w każdej klasie zdefiniowane są dodatkowe funkcje, które nadają każdej klasie nieco inne zachowanie. To, co chcę zrobić, to mieć programistę korzystającego z tego interfejsu API, aby po prostu utworzyć jedną instancję w oparciu o jakiś parametr, który generuje poprawny typ klasy. I wtedy on/ona widziałby tylko metody dostępne dla tego typu podczas programowania Na przykład Mój interfejs IChange { string Change(string inputString); } I powiedzmy, że mam dwie klasy, które implementują ten interfejs class Changer1 : IChange { public string Change(string input){ ... } public void DoSomethingSpecial1(){ ///kod, który robi coś specyficznego dla klasy Changer1 } } class Changer2 : IChange{ public string Change(string input){ ... } public void DoSomethingSpecial2(){ ///kod, który robi coś specyficznego dla klasy Changer2 } } Wtedy miałbym wrapper, który ustawia odpowiedni Changer na podstawie wyliczenia lub jakiegoś inne dane wejściowe użytkownika. public enum ChangerType { Type1, Type2 } class MasterObject{ public MasterObject(ChangerType type) { if (type == ChangerType.Type1) SetChanger(new Changer1()); if (type == ChangerType.Type2) SetChanger(new Changer2()); } prywatne IChange _change; private void SetChanger(IChange zmiana) { this._change = zmiana; } } Następnie jako użytkownik tego, w moim głównym programie chcę zrobić coś takiego jak poniżej, gdzie użytkownik tworzy główny obiekt, ale jest on tworzony w taki sposób, że mają dostęp tylko do odpowiednich funkcji. Tj. Mieć dostępne tylko DoSomethingSpecial1 lub tylko DoSomethingSpecial2 na podstawie utworzonego typu. class Program { static void Main(string[] args) { MasterObject obj1 = new MasterObject(ChangerType.Type1); obj1.DoSomethingSpecial1(); string wynik1 = obj1.Change("test"); /// LUB MasterObject obj2 = new MasterObject(ChangerType.Type2); obj2.DoSomethingSpecial2(); string wynik2 = obj2.Change("test"); } } Mam wrażenie, że jest to wzorzec typu Factory, a może fabryka abstrakcyjna, ale nie jestem pewien, jak naprawić mój kod, aby poprawnie go zaimplementować.


title: Na które obszary (IT) Outsourcing ma największy wpływ?

text: Rodzice narzekają, że wybieram karierę w IT zamiast w biznesie, ponieważ większość firm zleca obecnie IT. Zawsze myślałem, że wsparcie IT/Desktop to te, które zostały zlecone na zewnątrz, ale wygląda na to, że programiści są również zlecani do Indii. Muszę wybrać najbezpieczniejszy obszar (mniej dotknięty outsourcingiem), aby przekonać moich rodziców. Które obszary w IT są najbardziej dotknięte outsourcingiem?


title: Czy istnieje sposób na użycie języka wyższego poziomu w konkursie, który domyślnie ma tylko C, C++ i Java?

text: Na tych zawodach uzyskujesz dostęp do systemu z gcc, vim, emacs i Javą. Nie możesz zabrać ze sobą żadnego pliku i nie masz dostępu do Internetu, ale możesz robić, co chcesz w tym systemie. Przedstawiono Ci zestaw problemów i masz kilka naszych do przesłania wyników. Zastanawiam się, czy jest jakiś sposób, aby włamać się do tego języka wyższego poziomu? Może jest coś przydatnego ukrytego w domyślnych bibliotekach Javy lub linuksie? A może mogę wziąć papier (nie nielegalny) i wpisać skompresowany, lekki interpretator JS/Scheme/Clojure/Whatever i uruchomić go? Albo cokolwiek naprawdę. Pomysły?


title: Dostęp GitHub do repozytorium: tylko z adresem URL?

text: Kończę pracę dyplomową i chcę/potrzebuję podać kod źródłowy niektórych skryptów analitycznych, których użyłem. Całą kontrolę wersji wykonałem za pomocą `git`. Ponieważ chcę opublikować wyniki wygenerowane za pomocą tych skryptów, nie chcę po prostu umieszczać ich w publicznym repozytorium na GitHub. Czy można zapewnić dostęp „tylko adres URL” do repozytorium GitHub, co oznacza, że nie jest ono publicznie wymienione, ale widoczne tylko dla osób, które mają adres URL? Jeśli nie z GitHub, czy jest to możliwe z inną usługą? Chciałbym mieć jakiś GUI, aby zobaczyć kod, dlatego nie chcę tworzyć pliku zip z samym kodem źródłowym. Edytuj: Aby to było bardziej jasne: nie powinno być żadnego logowania ani rejestracji! Wpisz adres URL wydrukowany w rozprawie i boom, jest kod źródłowy!


title: Przykład projektu open source przy użyciu Spring

text: Próbuję dowiedzieć się trochę o frameworku Spring i zastanawiam się, czy ktoś może polecić projekt open source za jego pomocą, abym mógł przejrzeć źródło. Pomocne byłyby również wszelkie inne zalecenia dotyczące nauki Springa.


title: po co używać obiektu formularza, skoro można uzyskać potrzebne dane z html obiektu widoku?

text: Pracuję z kodem po stronie serwera. Mam obiekt żądania, który obsługuje sprawdzanie poprawności i filtrowanie danych żądania. Mam obiekt widoku, który używa plików szablonów do generowania html dla wyjścia. pliki szablonów to głównie html. możesz umieścić jeden obiekt widoku wewnątrz innego obiektu widoku, aby złożyć stronę kawałek po kawałku. na przykład możesz mieć widok układu strony i możesz umieścić widok formularza w widoku układu strony. Jedną z cech obiektu żądania jest to, że może on automatycznie tworzyć walidacje przy użyciu ciągu HTML5 zawierającego formularz. Analizuje ciąg HTML i pobiera typy danych wejściowych oraz inne atrybuty tagów, które określają walidację HTML5, a następnie dopasowuje tę stronę serwera walidacji. Otrzymuję ten ciąg html z obiektu widoku. W ten sposób bez względu na to, co projektant umieści w pliku szablonu widoku, zostanie on automatycznie zweryfikowany zgodnie z po stronie serwera atrybutów html5. Tworzę i używam tego samego widoku, który był pierwotnie używany do generowania strony, do budowania walidacji dla żądania, gdy strona jest następnie przesyłana z powrotem na serwer. Chciałbym otrzymać informację zwrotną na temat tego pomysłu. Plusy/minusy/inne obawy.


title: Dlaczego Donald Knuth pisze TAOCP używając asemblera?

text: Nie nienawidzę używania języka asemblera, ponieważ napisałem kilka w moim kursie OS. Ale oczywiście językowi asemblerowi brakuje abstrakcji, trzeba zwracać większą uwagę na szczegóły. Czy asembler jest naprawdę niezbędny do pisania TAOCP?