title: Zrozumienie luźnego/ciasnego sprzężenia w „rzeczywistym świecie”

text: Nie powiem, co "społeczność", ponieważ chcę bezstronnego wyjaśnienia, ale załóżmy, że budujesz _moduł_ wielokrotnego użytku i ten moduł wymaga 3+ zależnych modułów, a usunięcie 1 z nich powoduje błąd nie tylko w Twojej aplikacji jako całość, która korzysta z tego modułu, ale sam moduł. Z mojego zrozumienia (co musi być błędne) luźno połączony system modułowy nie zepsuje się po prostu przez usunięcie jednego modułu. Aplikacja powinna nadal działać, ale bez tej "funkcji" / modułu, a sam moduł nie powinien powodować, że wszystko nie działa, ponieważ moduł zależny nie istnieje. Czy to źle? Jeśli tak, jeśli moduły są nadal zależne od punktu, w którym wszystko nie działa, jaka jest różnica między ciasnym/luźnym połączeniem?


title: jak podążać za standardami polimorfizmu Pythona za pomocą funkcji matematycznych

text: Więc czytam o pytonie w cudownej książce Marka Lutza NAUCZANIE PYTONA. Mark robi wiele rzeczy na temat tego, jak częścią filozofii rozwoju Pythona jest polimorfizm i że funkcje i kod powinny opierać się na polimorfizmie i nie wykonywać dużo sprawdzania typu. Jednak zajmuję się programowaniem typu matematycznego, więc idea polimorfizmu wydaje się nie mieć zastosowania — nie chcę próbować przeprowadzać regresji na łańcuchu czy coś takiego. Zastanawiałem się więc, czy czegoś tu brakuje. Jakie są zastosowania polimorfizmu, gdy piszę funkcje dla matematyki — lub czy sprawdzanie typu jest filozoficznie w tym przypadku w porządku.


title: Wysyłanie powiadomień e-mail do użytkowników

text: Jaki jest preferowany sposób wysyłania powiadomień e-mail do użytkowników? Mogę to zrobić w obie strony, ale co jest lepsze? 1. mieć jakiś kod c#, który wywołuje procedurę składowaną w bazie danych. Procedura składowana oparta na pewnej logice pobiera wszystkie dane wiadomości e-mail i wysyła wiadomość e-mail za pomocą poczty bazy danych 2. lub kod c# wywołuje procedurę składowaną, pobiera wszystkie niezbędne dane i wysyła wiadomość e-mail za pomocą serwera smtp itp. Zastanawiam się tylko, jaki jest lepszy sposób w poczucie wydajności itp... Kod C# to biblioteka, która byłaby częścią aplikacji webowej. Więc to jest miejsce, w którym lepiej jest obciążać serwer aplikacji czy serwer bazy danych? System nie będzie szalenie zajęty, nie jest jak Amazon czy coś takiego. Ale mimo wszystko fajnie byłoby stworzyć coś, co ma sens.


title: Musisz nauczyć się PowerShell do konfiguracji programu SharePoint

text: Muszę znać przynajmniej podstawy używania powershell do konfigurowania rozwiązań Sharepoint i ich kont użytkowników w ciągu najbliższych kilku tygodni. Czy ogólne zasoby edukacyjne powershell znacznie różnią się od tych, które są bardziej specyficzne dla programu SharePoint? A może powershell jest powershell? tj. czy składnia jest dość podobna, niezależnie od tego, czy służy do konfigurowania programu SharePoint, czy jest używana do innych celów? Ponadto, czy ktoś ma linki do zalecanych plików PDF do takiego czytania? (I tak będę się teraz szukał, ale warto zapytać na wypadek, gdyby ktoś z was miał ebooka, który pomógł ci osobiście.)


title: Statystyki dotyczące średniego procentu czasu potrzebnego na stworzenie „użytecznej” dokumentacji

text: AKTUALIZACJA: Otrzymałem wiele opinii, ale nie ma informacji o tym, jaki procent czasu ludzie spędzają na dokumentach. Aby to uprościć, powiedzmy, że dokumenty są przeznaczone dla programistów i recenzowane; co oznacza, że partner rozumie, jak to zrobić, a komentarze dotyczą raczej tego, co jest robione, a nie tego, jak zrobić to od zera; co w moim przypadku jest prośbą, po prostu nie myśl, że prośba jest powszechna. Pracuję nad projektem od 2 miesięcy i gotowe. Kiedy projekt się rozpoczął, dokumentacja nie była wymagana; skupiono się na „zrób to”. Tak więc nagle pojawia się zainteresowanie tworzeniem dokumentacji do projektu... to jest w 100% pod klucz, co oznacza, że ktoś, kto nic nie rozumie, będzie w stanie zrobić wszystko, co jest wymagane, aby powielić wykonaną pracę. W przypadku, gdy ma to znaczenie, projekt dotyczył profilowania danych, ekstrakcji, transformacji i ładowania. Oznacza to, że otrzymałem zestawy danych, ostateczny stan danych – i wymyśliłem wszystkie problemy/rozwiązania, aby tak się stało. Zastanawiam się tylko, czy ktoś widział statystyki dotyczące średniego procentu czasu potrzebnego na napisanie dokumentów. (Masz pytania/opinie, po prostu skomentuj – dzięki.)


title: Obsługa konwergencji wiadomości SMS/e-mail: jak robi to dobra aplikacja biznesowa?

text: Piszę pakiet oprogramowania do zarządzania szkołą, ale wydaje mi się, że wielu programistów zmierzy się z tym samym problemem: podczas komunikacji z użytkownikami należy używać poczty e-mail, SMS-a lub obu i traktować je jako zasadniczo równoważne kanały, takie jak każda wiadomość można wysłać za pomocą dowolnych mediów (oczywiście z długimi i krótkimi formami szablonu wiadomości) czy też różne funkcje biznesowe powinny być specjalnie dopasowane do każdej z 3? To pytanie zostało wyrzucone "StackOverflow" za zbyt ogólne, więc mam nadzieję, że nie jest zbyt ogólne dla tej strony - odpowiedzi będą bez wątpienia subiektywne, ale "nie musisz pisać całej książki, aby odpowiedzieć na pytanie" . Szczególnie interesują mnie osoby, które mają bezpośrednie doświadczenie w pisaniu porównywalnych aplikacji biznesowych. Pytania podrzędne: 1. Czy traktuję SMS-y jako „umiarkowanie bezpieczne”, a e-maile jako mniej bezpieczne? (Myślę o rezerwowaniu żetonów na noclegi dla rodziców/nauczycieli, zezwoleń na wycieczki, notatek wyjaśniających nieobecność – więc wysokie bezpieczeństwo nie jest dla nas wymogiem, chociaż średnie jest) 2. Czy denerwuje użytkowników otrzymanie tej samej wiadomości na wielu kanałach? 3. Czy powinniśmy mieć ujednolicony framework, który raportuje o dostarczeniu lub jego braku e-maili i SMS-ów?


title: Czy słuszne jest proszenie współtwórców o zmianę bazy swoich żądań ściągnięcia na github?

text: Prowadzę stosunkowo popularne repozytorium github. Kiedy pull request jest dobry do scalenia, zwykle proszę autora o zmianę bazy do jednego zatwierdzenia przed scaleniem (zwłaszcza, gdy było wiele małych zmian). Czy to dobra praktyka git? Czy jest to akceptowalna/standardowa etykieta GitHub? Więc kilka korzyści: * Otrzymuję ładną, czystą historię commitów w logach commitów * Nie muszę sam zmieniać commitów * Deleguje część pracy Niektóre możliwe wady: * Nie jestem pewien, czy to jest dobra etykieta * Nie jestem pewien, czy to dobra praktyka gitowa * Zazwyczaj prosiłem już o kilka innych zmian - to jest jeszcze jedna i nie chcę zniechęcać współpracowników.


title: Pierwsze kroki z C# i bazami danych

text: Chcę zacząć używać baz danych w moich aplikacjach C#, niestety wydaje się, że istnieje wiele różnych sposobów na zrobienie tego. Jaki jest „najlepszy” sposób z perspektywy uczenia się? (IE: Co może być używane w zakładaniu firmy)? Jeśli chcę pobrać mySQL/Postgres i połączyć się z nim z C#, czy to jest w porządku?


title: Czy kod źródłowy wydany na licencji GPL musi być czytelny dla człowieka?

text: W odpowiedzi na inne pytanie, plakat sugerował, że zgodnie z GPL: > ...musisz podać [kod] czytelny dla człowieka, a nie wersję z pozbawioną spacji... Czytelność wydaje mi się subiektywna i mało prawdopodobna być wyraźnie wymagane przez GPL. Czy to jest?


title: Czy istnieje wykres, który pomoże mi wybrać między licencjami open source?

text: Inicjatywa Open Source wymienia 9 różnych licencji na swojej liście „Licencji, które są popularne i powszechnie używane lub z silnymi społecznościami”. Chcę licencjonować swój projekt jako open-source. Niestety nie mówię w języku prawniczym. Czy jest jakiś wykres, który mógłbym sprawdzić, który pomoże mi dokonać właściwego wyboru lub przynajmniej wskaże mi właściwy kierunek? Na przykład tabela podsumowująca różnice między licencjami, a może wykres przepływu wykorzystujący moje wymagania, aby poprowadzić mnie do właściwej dla mnie licencji? Zamierzam też spotkać się z prawnikiem, ale wszelkie informacje na początek pomogą.


title: Aplikacje na Androida i wyjątek ścieżki klas GPLv2

text: Moja aplikacja na Androida wymaga javax.activation i javax.mail (oba z licencją GPLv2). Jednak nie chcę, aby moja aplikacja miała licencję GPL. Jakie są możliwości, aby nie złamać wymagań licencyjnych dotyczących wyjątku ścieżki klas? Obecnie używam wtyczki maven-dependency-plugin, aby pobrać kod źródłowy tych pakietów i połączyć skompilowane rzeczy z moimi w jeden apk. Czy to w porządku? Jeśli nie, co to jest?


title: Jak wspierać gramatyki mieszane?

text: Obecnie piszę gramatykę dla języka programowania (PowerBuilder) oraz zbieram dokumentację dotyczącą parsowania i tworzenia kompilatorów. Teraz chciałbym dodać do mojej gramatyki (która z grubsza wygląda jak Visual Basic) możliwość obsługi osadzonych instrukcji SQL, które są obsługiwane inline przez język (przy użyciu zmiennych wiążących, takich jak `select foo into :ls_bar from baz gdzie col= :ls_kryteria;`). Ponieważ osadzony SQL jest zwykłą składnią SQL, nie komplikowałbym mojej istniejącej gramatyki, ale zamiast tego dostosowałbym istniejącą gramatykę SQL-92 do moich potrzeb i używał jej w tych blokach SQL. Generator parserów, którego głównie używam (AntLR) ma pewne możliwości obsługi gramatyk mieszanych lub „wyspowych”, jak opisano w tym lub innym artykule. Chciałbym porównać te techniki z AntLR z innymi narzędziami, takimi jak Lex/Yacc, Flex, JFlex, których używałem podczas zabawy kilkoma prostymi projektami językowymi opisanymi w różnych kursach CS dostępnych online. Czy możesz wskazać przykłady implementacji parserów obsługujących gramatyki mieszane?


title: Licencja Open Source z wyjątkami do użytku komercyjnego dla właściciela

text: Szukam licencji **open source**, która daje mi dodatkowe uprawnienia. Cechy: * Każdy może dowolnie modyfikować, rozwidlać, używać kodu, o ile publicznie udostępnia swoje zmiany w źródle. Mogą go używać w innych projektach open source, ale nie w projektach o zamkniętym kodzie źródłowym. (podobnie jak, powiedzmy, GPL v3, z silnym naciskiem na wkład zwrotny) * Tylko ja i określone przeze mnie podmioty mogą używać kodu jako części aplikacji o zamkniętym kodzie źródłowym. Jestem również zwolniony z obowiązku publikowania zmian w kodzie źródłowym. (zwolnienie z obowiązków GPL). * W zamian za moją pracę chcę mieć swobodę korzystania z wkładu innych osób (poprzez wykorzystanie projektu w mojej pracy o zamkniętym źródle), nawet jeśli rozwidlą kod. Nie próbuję zabronić komercyjnego wykorzystania, tylko po to, by pozwolić sobie na większą elastyczność w korzystaniu z kodu, jednocześnie przyczyniając się do open source. Nie chcę się poparzyć, mając prawny zakaz korzystania z bibliotek, które napisałem w moich komercyjnych projektach. Duże firmy używają takich podwójnych licencji do utrzymania projektu open source, jednocześnie sprzedając wersję premium. Jakie licencje tego typu są dostępne? Jakie istnieją zastrzeżenia lub przeszkody? Czy jest jakaś gotowa licencja na taką sytuację? Na tym etapie rozwoju nie można konsultować się z prawnikami.


title: czy rzucanie w dół zawsze jest złe?

text: W mojej firmie mamy wiele różnych „usług”, które działają równolegle i wysyłają do siebie wiadomości za pomocą wspólnego systemu przesyłania wiadomości. Wszystkie obiekty wiadomości wywodzą się ze wspólnego obiektu ogólnego, który zdefiniowaliśmy dla wiadomości. Gdy jakakolwiek usługa otrzymuje komunikat, pierwszą rzeczą, którą musi zrobić, jest downcast obiektu do typu pochodnego, aby mógł wyodrębnić potrzebne dane. Czytałem w całym Internecie, że nie należy przerzucać wskaźnika obiektu bazowego na wskaźnik obiektu pochodnego i że konieczność tego jest często oznaką złego projektu. W większości przypadków zgadzam się z tym sentymentem. Mogę sobie wyobrazić różne projekty ogólnego obiektu wiadomości, które nie wymagałyby rzutowania w dół. Ale nie widzę żadnego powodu, aby inaczej radzić sobie z tą sytuacją. Więc moje ogólne pytanie brzmi: czy downcasting zawsze jest złą rzeczą? Czy są sytuacje, w których downcasting jest konieczny lub akceptowalny?


title: Jakie argumenty przemawiają przeciwko używaniu funkcji podstawiania słów kluczowych w wielu systemach kontroli wersji?

text: Czy istnieją jakieś argumenty przeciwko używaniu funkcji zastępowania słów kluczowych (tj. zamiany `$Revision$` na `$Revision: 5$`) w wielu systemach kontroli wersji? Czy istnieją ogólnie złe praktyki, do których zachęca korzystanie z tej funkcji? Czy są jakieś wszechobecne i trudne do rozwiązania problemy, które powoduje, gdy go używasz? Oto argument przeciwko używaniu go: * Podstawianie słów kluczowych: Dlaczego go nie potrzebujesz Jest zwięzły i myślę, że argument o problemach, jakie powoduje dla plików binarnych, jest przekonujący, ale nie uważam go za przekonujący.


title: Podstawowy sprzęt do tworzenia iPhone'a

text: Jestem nowy na Macu. Jeśli chcę rozpocząć tworzenie iPhone'a, jakiego podstawowego sprzętu potrzebuję? Czy Mac Mini byłby wystarczająco dobry?


title: Dobre wykorzystanie funkcji opakowujących?

text: Co uważasz za dobre wykorzystanie funkcji opakowujących? Kiedy są użyteczne abstrakcje, a w jakich przypadkach szkodliwa i niepotrzebna złożoność?


title: Gdzie w MVC umieszczasz metody akcji dla widoków w udostępnionym katalogu?

text: Mam witrynę internetową zbudowaną przy użyciu struktury **MVC.NET z C#**, która używa niektórych widoków udostępnionych i widoków częściowych. W celu poprawnego wyświetlania widoków w kontrolerze musi znajdować się fragment kodu. Obecnie mam tę logikę zduplikowaną między kontrolerami. Przykładem może być widok, który pobiera identyfikator błędu, a następnie pobiera rekord z bazy danych i formatuje widok inaczej w zależności od typu błędu. Przed wyświetleniem danych w kontrolerze należy wykonać niewielką ilość pracy. **Jeżeli widok znajduje się w katalogu Shared, gdzie miałby się udać kontroler dla niego? A może lepszym projektem jest stworzenie nowego kontrolera tylko do tego?** Próbuję wybrać projekt, który zapobiegnie „pełzaniu kontrolera”, które mieliśmy w poprzednim projekcie. Aktualizacja: Obecnie uczę się o MVC za pomocą Razor i poznałem metodę rozszerzenia HTML.Action. Jeśli miałbym wrócić i przepisać ten projekt, umieściłbym metodę w kontrolerze "Shared" i użyłbym HTML.Action do sformatowania danych, aby wyświetlić je na dowolnym ekranie, którego potrzebowałem.


Jaka część programowania jest wykonywana dla systemów wbudowanych? Bardziej ogólnie prosimy o udostępnianie ciekawych statystyk dotyczących programistów według domeny, np. czas rzeczywisty/biznes/interfejs/gry/… To, jak zdefiniujesz granice domeny (np. co to jest system wbudowany) zależy od Ciebie, ale proszę podać kilka słów, aby wyjaśnić swoją definicję.


title: Lepiej zrozum wzorzec projektowy „Strategia”

text:
Od jakiegoś czasu interesuję się wzorami projektowymi i zacząłem czytać "Head First Design Patterns". Zacząłem od pierwszego wzoru zwanego "Strategią". Przeszedłem przez problem przedstawiony na poniższych obrazkach i najpierw sam próbowałem zaproponować rozwiązanie, aby naprawdę zrozumieć znaczenie wzoru. Więc moje pytanie brzmi, dlaczego moje rozwiązanie poniższego problemu nie jest wystarczająco dobre. Jakie są dobre / złe punkty mojego rozwiązania w porównaniu do wzorca? Co sprawia, że wzór jest wyraźnie jedynym realnym rozwiązaniem? **MOJE ROZWIĄZANIE** **Klasa rodzica: KACZKA** <?php class Kaczka { public $swimmable; publiczne kwakalne; publiczny $lotny; function display() { echo "Kaczka tak wygląda
"; } function quack() { if($this->quackable==1) { echo("Quack
"); } } function swim() { if($this->pływanie==1) { echo("Pływanie
"); } } function fly() { if($this->flyable==1) { echo("Lat
"); } } } ?> **DZIEDZICZENIE KLASA: Kaczor Krzyżówka** <?php class Kaczor Krzyżówka extends Kaczka { function Kaczka Krzyżówka() { $this->quackable = 1; $this->do pływania = 1; } function display() { echo "Kaczka krzyżówka tak wygląda
"; } } ?> **DZIEDZICZENIE KLASA: WoddenDecoyDuck** <?php class WoddenDecoyDuck extends Duck { function woddendecoyduck() { $this->quackable = 0; $this->z możliwością pływania = 0; } function display() { echo "Drewniana kaczka-wabik wygląda tak
"; } }


title: Udane społeczności techniczne z wyjątkiem open-source?

text: Czy kiedykolwiek widziałeś odnoszącą sukcesy społeczność techniczną – np. grupa użytkowników, organizacja branżowa? Czy pytam o grupę inżynierów oprogramowania, którzy spotykają się w F2F (a może online) i dyskutują o kwestiach technicznych i branżowych z głębokim zapałem i zainteresowaniem – miejscem, w którym nawiązywane są znaczące powiązania. Oto jedyne przykłady, jakie kiedykolwiek widziałem: * Open source * Może Silicon Valley Java Users' Group * Homebrew Computing Club w latach 70-tych Tego typu rzeczy istnieją w środowisku akademickim. Również ludzie biznesu robią to przez cały czas, ale networking jest częścią ich pracy. Oczywiście jest wiele konferencji i prób na grupy użytkowników. Jednak prawie wszyscy zaangażowani, poważni inżynierowie oprogramowania, zapytani o to, mówią „nie mam czasu”, co oznacza, że organizacje nie są warte zachodu dla najlepszych w naszej profesji. Czy ktoś widział jakieś organizacje z ciągłym duchem entuzjazmu najlepszych inżynierów oprogramowania?


title: Jakie są realne korzyści z uczestnictwa w grupie studenckiej ACM?

text: Czy są tu jacyś studenci ACM? Jakie są prawdziwe korzyści z udziału w tym programie? I czy to prawda, że to nie jest darmowe?


title: Jak zachęcić do kreatywnego projektowania interfejsu użytkownika?

text: Kiedy wyobrażam sobie naprawdę dobrze działający zespół programistów, jedną z wizji, jakie mam, jest programista pokazujący małej grupie programistów fajny, sprytny interfejs użytkownika, który właśnie wymyślili na podstawie czegoś, w co właśnie grali z. Obawiam się, że chociaż świetnie radzimy sobie z kreatywnym pisaniem, ekspresyjnym, dobrze zaprojektowanym kodem wysokiej jakości - nie przekraczamy żadnych granic twórczych, jeśli chodzi o efektywny interfejs użytkownika. Jaka jest skuteczna strategia zachęcania programistów do przekraczania granic za pomocą interfejsu użytkownika? Edycja: szukam czegoś "zorientowanego na laboratorium", jak na przykład sesje programowania w parach skupione na jakimś problemie.


title: Gdzie hostować mini-projekty typu open source, takie jak wtyczki jQuery

text: Napisałem kilka wtyczek jQuery (a także kilka innych rzeczy) i publikuję cały kod na moim blogu (http://erraticdev.blogspot.com). Aktualizuję je, gdy ludzie opowiadają mi o wszelkich napotkanych problemach, komentując posty na blogu. Następnie aktualizuję kod i ponownie publikuję swój oryginalny post. Pracował do tej pory zgodnie z oczekiwaniami. Ale wydaje się to złym sposobem hostingu kodu. Przyznaję, że działa, ale nie jest to tak naprawdę kontrolowane wersji. Dostępna jest tylko najnowsza wersja (która i tak powinna być używana). Korzystam z hostingu Google Code w kilku innych projektach innych niż jQuery, co wydaje się w porządku, ponieważ mogę centralnie śledzić całą moją zawartość internetową (blog i te projekty) w Google Analytics. Złą stroną jest to, że tworzenie nowych projektów z pisaniem opisu strony projektu zajmuje trochę czasu. Kontrola wersji wydaje się główną korzyścią, chociaż niektóre projekty mogą w ogóle nie być aktualizowane... Więc o co chodzi? Moje wtyczki są więc dostępne bez zmian. Brak wersji mini lub podobnych. Myślę, że mógłbym również przesłać pełną + zminimalizowaną wersję do moich Dokumentów Google i połączyć je na moim blogu, gdybym chciał, prawda? ## Pytanie Co sugerujesz, gdzie (lub jak) powinienem udostępnić publicznie mój kod publiczny? Czy powinienem w ogóle zmienić hosting kodu, poza tym, że będzie on swobodnie dostępny na moim blogu?


title: Muszę poznać powody, dla których nauka Linux Shell Scripting (BASH) przynosi korzyści mi jako programiście PHP

text: Od prawie 5 lat zajmuję się tworzeniem stron/aplikacji internetowych przy użyciu stosu LAMP. Obecnie jestem zainteresowany bardziej zagłębieniem się w system operacyjny Linux, konkretnie BASH **ale z perspektywy programisty WWW, a nie z perspektywy administratora systemu.** Nie zamierzam administrować serwerami Linux. Tylko, chcę wiedzieć, czy nauka skryptów powłoki przynosi korzyści mi jako programiście PHP? Czy to czyni mnie lepszym, bardziej wykwalifikowanym programistą, czy po prostu jest to coś nieistotnego? Powody i przykłady są wysoko cenione. Z góry dziękuję.


title: Jaka jest najlepsza praktyka sprawdzania, czy klient już pobrał informacje z serwera?

text: Muszę sprawdzić, jakie dane nie zostały jeszcze pobrane. Na przykład, w jaki sposób Twitter lub Facebook weryfikują, czy określony klient już pobrał jakąś informację? Gdy aplikacja mobilna, taka jak twitter, wysyła żądanie do twitter.com, otrzyma tylko nowe dane, ale nie dane, które już pobrała w starych żądaniach.


title: Jak ulepszyć koncepcje wywiadu

text: Miałem wywiad i ankieter powiedział mi, żebym ulepszył koncepcje. Np.: * Zapytał mnie, jakie są rodzaje tablic, a ja odpowiedziałem, że są dwa rodzaje tablicy: tablica prosta i tablica asocjacyjna. * Zapytał mnie również, dlaczego używamy PDO, a ja odpowiedziałem, że możemy korzystać z dowolnej bazy danych, np. Oracle i MySQL i pomaga przy wstrzykiwaniu SQL. Następnie zapytał mnie, jak pomaga w wstrzykiwaniu SQL i powiedziano mi, że nie udzieliłem poprawnej odpowiedzi. * Zapytał mnie o trwałe połączenia i powiedział, że właśnie użyłem `mysql_pconnect`. Nie wiem gdzie i jak będzie używany. Czy jest jakiś standardowy sposób, który mogę zastosować, aby ulepszyć te koncepcje?


title: Co oferuje subskrypcja MSDN?

text: Jestem ciekaw, bo zauważam, że subskrypcja Ultimate kosztuje 12 000 USD... przez rok (po tym odnowienie kosztuje 3 800 USD). Patrząc na wykres subskrypcji, otrzymujesz sporo oprogramowania, które samo w sobie jest zwykle drogie. Czy pakiet jest przeznaczony dla 1 osoby, czy jest przeznaczony dla pewnego rodzaju pakietu biznesowego? Jeśli to drugie, to mogę to trochę zrozumieć, ale nie mogę pojąć, gdzie ktokolwiek miałby mieć 12 kawałków, żeby rzucić się na coś, co trwa tylko 12 miesięcy. W każdym razie tak, moje pytanie brzmi, czy to w ogóle dobry interes dla każdego? Może to po prostu ja nie mam żadnego doświadczenia w branży, a to właściwie kradzież i miliony firm powinny to teraz kupować, ale po prostu nie mogę sobie wyobrazić, że jest to warte pieniędzy.


title: Budowanie i debugowanie IDE przy użyciu tego samego IDE

text: To może być pytanie bardziej pasujące do niektórych dyskusji dotyczących metaprogramowania. Próbowałem zagłębić się w wewnętrzną funkcję zarządzania wtyczkami dla QT Creator 2.x IDE dostarczonego przez Digia Inc. Więc skutecznie pobrałem kod źródłowy dla QT Creator i zbudowałem go, aby debugować implementację tej funkcjonalności. Dlatego użyłem IDE do debugowania tego samego IDE. Więc moje pytanie, czy podczas tego są jakieś pułapki? Czy w takim scenariuszu zaleca się użycie dwóch różnych IDE (np. użycie Visual Studio do zbudowania Kreatora QT).


title: Kiedy masz najlepsze pomysły?

text: Czy istnieją pewne działania, które dostarczają inspiracji w nieoczekiwanych momentach? Jeden, który zauważyłem, to koszenie trawnika lub odśnieżanie - mieszkając w Minnesocie, wydaje mi się, że zawsze robię jedno lub drugie. Aktywność fizyczna daje mojemu mózgowi szansę na błądzenie i rozważanie albo najbardziej palącego problemu w moim umyśle, albo jakiejś przypadkowej myśli dnia.


title: Czy naprawdę potrzebuję struktury testów jednostkowych?

text: Obecnie w mojej pracy mamy duży zestaw testów jednostkowych dla naszej aplikacji C++. Jednak nie używamy struktury testów jednostkowych. Po prostu używają makra w C, które w zasadzie otacza asercję i cout. Coś takiego: VERIFY(war.) if (!(war.)) {std::cout << "test jednostkowy nie powiódł się w " << __FILE__ << "," << __LINE__; asserst(false)} Następnie po prostu tworzymy funkcje dla każdego z naszych testów, takie jak void CheckBehaviorYWhenXHappens() { // wiązka kodu do uruchomienia testu // VERIFY(blah!= blah2); // więcej VERIFY's w razie potrzeby } Nasz serwer CI odbiera komunikat „test jednostkowy nie powiódł się” i nie udaje się kompilacja, wysyłając wiadomość e-mailem do programistów. A jeśli mamy zduplikowany kod instalacyjny, po prostu refaktoryzujemy go tak, jak każdy inny zduplikowany kod, który mielibyśmy w środowisku produkcyjnym. Owijamy to za funkcjami pomocniczymi, sprawiamy, że niektóre klasy testowe zawijają, konfigurując często używane scenariusze. Wiem, że istnieją frameworki, takie jak CppUnit i boost unit test. Zastanawiam się, jaką wartość te dodają? Czy brakuje mi tego, co one wnoszą do stołu? Czy jest coś pożytecznego, co mógłbym dzięki nim zyskać? Waham się, czy dodać zależność, chyba że wniesie to prawdziwą wartość, zwłaszcza że wydaje się, że to, co mamy, jest bardzo proste i działa dobrze.


title: Wyzwalanie zdarzeń niestandardowych w wywołaniach zwrotnych AJAX

text: Jestem całkiem nowy w JavaScript, ale jedną z rzeczy, które są frustrujące, jest to, że nasze wywołania zwrotne AJAX są pakowane w różne funkcje, co utrudnia utrzymanie wszystkiego oddzielone i uporządkowane. Jestem naprawdę nowy w programowaniu, mam wrażenie, że uczenie się MVC może mi pomóc, ale na razie wydaje się, że użycie niestandardowych zdarzeń może pomóc mi zachować czystszy kod i zapobiec niektórym problemom. Oto, o czym mówię: function myAjaxFunctionThatGetsTestData(){ $.post('ajax/test.html', function(data) { $(document).trigger('testDataLoaded',data); }); } function myOtherFunctionThatsDependentUponAjax(){ getSomeTestData(); //rozpocznij proces pobierania danych z ajax //następnie daj mi znać, kiedy dane zostały pobrane $(document).one('testDataLoaded', function(data){ alert (data); } } function getSomeTestData(){ / /może dane zostały już pobrane przez inny moduł, więc najpierw sprawdź, czy (data){ $(document).trigger('testDataLoaded',data); } else{ myAjaxFunctionThatGetsTestData(); } } Nie wiem też, czy to ok, czy uruchamiam dokument, czy nie... Czy są jakieś wzorce, które wyglądają tak, o których mogę przeczytać więcej?Jakie są potencjalne problemy z tym?


title: Stosowanie NSpec na różnych warstwach architektonicznych

text: Po przeczytaniu krótkiego startu na nspec.org zdałem sobie sprawę, że NSpec może być przydatnym narzędziem w scenariuszu, który z samym NUnitem stawał się nieco niewygodny. Dodaję OAuth (lub DotNetOpenAuth) do strony internetowej i szybko narobiłem bałaganu pisania metod testowych, takich jak [Test] public void UserIsLoggedInLocallyPriorToInvokingExternalLoginAndExternalLoginSucceedsAndExternalProviderIdIsNotAlreadyAssociated up with a . tego tematu, dla użytkownika już zalogowanego lokalnie, a nie lokalnie, zewnętrzne logowanie zakończyło się sukcesem lub niepowodzeniem itp. Nie tylko nazwy metod były nieporęczne, ale każdy test wymagał konfiguracji, która zawierała części wspólne z innym zestawem innych testy. Zdałem sobie sprawę, że możliwości konfiguracji przyrostowej NSpec świetnie się do tego nadają, i przez jakiś czas cudownie jeździłem długo, z kodem takim jak act = () => { actionResult = controller.ExternalLoginCallback(returnUrl); }; context["Użytkownik jest już zalogowany"] = () => { before = () => identity.Setup(x => x.IsAuthenticated).Returns(true); context["Logowanie zewnętrzne powiodło się"] = () => { before = () => oauth.Setup(x => x.VerifyAuthentication(It.IsAny<string>())).Returns(new AuthenticationResult(true, providerName, "provideruserid", "username", nowy Dictionary<string, string>())); context["Zewnętrzny login już istnieje dla bieżącego użytkownika"] = () => { before = () => authService.Setup(x => x.ExternalLoginExistsForUser(It.IsAny<string>(), It.IsAny<string> (), It.IsAny<string>())).Returns(true); it["Należy dodać alert o pomyślnym zalogowaniu"] = () => { var alerts = (IList<Alert>)controller.TempData[TempDataKeys.AlertCollection]; alerts[0].Message.should_be_same("Logowanie powiodło się"); alerty[0].AlertType.should_be(AlertType.Success); }; it["Powinna zwrócić wynik przekierowania"] = () => actionResult.should_cast_to<RedirectToRouteResult>(); }; context["Zewnętrzny login już istnieje dla innego użytkownika"] = () => { before = () => authService.Setup(x => x.ExternalLoginExistsForAnyOtherUser(It.IsAny<string>(), It.IsAny<string> (), It.IsAny<string>())).Returns(true); it["Dodaje alert o błędzie"] = () => { var alerts = (IList<Alert>)controller.TempData[TempDataKeys.AlertCollection]; alerts[0].Message.should_be_same("Zewnętrzny login, którego zażądałeś, jest już powiązany z innym kontem użytkownika"); alerty[0].AlertType.should_be(AlertType.Error); }; it["Powinna zwrócić wynik przekierowania"] = () => actionResult.should_cast_to<RedirectToRouteResult>(); }; To podejście wydawało się działać znakomicie, dopóki nie przygotowałem się do napisania kodu testowego dla mojej warstwy ApplicationServices, do której deleguję manipulację viewmodelem z moich kontrolerów MVC i która koordynuje operacje niższej warstwy repozytorium danych: public void CreateUserAccountFromExternalLogin(RegisterExternalLoginModel model) { throw nowy NotImplementedException(); } public void AssociateExternalLoginWithUser(string userName, string provider, string providerUserId) { throw new NotImplementedException(); } public string GetLocalUserName(dostawca stringów, string providerUserId) { throw new NotImplementedException(); } Nie mam pojęcia, jak nazwać klasę testową, metody testowe, a nawet czy powinienem włączyć testowanie tej warstwy do klasy testowej z mojego dużego fragmentu kodu powyżej, aby pojedyncza funkcja lub akcja użytkownika mogą być testowane bez względu na warstwy architektoniczne. Nie mogę znaleźć żadnych samouczków ani postów na blogu, które obejmują więcej niż proste przykłady, więc byłbym wdzięczny za wszelkie rekomendacje lub wskazanie właściwego kierunku. Z zadowoleniem przyjmę nawet odpowiedzi typu „twoje pytanie jest nieważne”, o ile podane zostanie jakieś wyjaśnienie.


title: Czy deprecjonowanie to prawdziwe zobowiązanie?

text: Jeśli coś odrzucisz, czy gwarantujesz, że pozbędziesz się tego w następnym głównym wydaniu? Czy rozsądne jest branie dwóch lub trzech wypuszczeń, zanim całkowicie się go pozbędziesz? Aktualizacja: Dzięki za odpowiedzi. Java jest dobrym standardem, jak to zrobić - czy inne? Jakieś przykłady z API Microsoftu? Aktualizacja2: Wygląda na to, że w „Microsoft-ese” deprecjacja oznacza „zniknie w następnej wersji”. Co było częścią mojego zamieszania; inni nie nadają temu słowu tego znaczenia.


title: Wykorzystanie instancji EC2 jako głównej platformy programistycznej

text: **Mój problem** Pracuję jako konsultant dla różnych firm. Każda firma dostarcza mi laptopa z oprogramowaniem, a ja mam też własne, w którym mam swoje środowisko programistyczne. Zwykle kupuję nowy laptop co dwa lata i spędzam dużo czasu na konfiguracji i instalacji oprogramowania. Spędzam też dużo czasu, czekając, aż mój laptop przetworzy różne rzeczy. Aby rozwiązać wszystkie te problemy, rozważam teraz użycie EC2 (uruchamianie instancji Windows) jako mojej głównej platformy programistycznej i dostęp do niej z dowolnego komputera, na którym się znajduję. Obliczyłem, że uruchamianie instancji Large (najtańsza 64-bitowa) przez 8 godzin dziennie przez rok kosztuje mnie 960 $ rocznie, co jest do przyjęcia. Wyobrażam sobie, że kiedy codziennie podchodzę do miejsca pracy, jednym dotknięciem telefonu odpalę instancję, aby była gotowa do pracy. Powinienem mieć różne ikony na moim telefonie, aby uruchomić różne typy instancji. To samo oprogramowanie powinno oczywiście być automatycznie ładowane na różne urządzenia (czasem potrzebowałbym nawet ich instancji z 68,4 GB pamięci). Kolejną zaletą jest to, że jeśli mam konkretny problem z moją instancją, mogę odpalić inną instancję i poprosić kogoś o sprawdzenie problemu i aktualizację obrazu. **Moje pytanie:** Czy ktoś ma doświadczenie z taką konfiguracją na EC2? Jakie problemy przewidujesz?


title: Ogólnie rzecz biorąc, jak działają programy obsługi zdarzeń?

text: To jest ogólny temat: **Jak działają programy obsługi zdarzeń?** Oznacza to zakulisowe — co się dzieje po ich utworzeniu. Mam przybliżony pomysł - ale chciałbym, żeby został potwierdzony.


title: Jak obliczyć najgorszy czas działania tego algorytmu wyszukiwania?

text: Napisałem specjalną funkcję `indexOf` dla listy nieposortowanych, unikalnych wartości. Mogę wyszukać jedną lub wiele (nieposortowanych) wartości, przekazanych jako tablica/lista, a funkcja zwróci mi tablicę/listę indeksów (prawdopodobnie pustą). Opierając się na następujących okolicznościach: * Wiem, że wartości, których szukam, znajdują się na liście * Nie obchodzi mnie kolejność, w jakiej indeksy są zwracane * Unikatowość Robię, co następuje: 1. Przejrzyj lista (o rozmiarze n) 2. Porównaj wartości ze wszystkimi wartościami z listy wyszukiwania 3. Jeśli jest przerwa w dopasowaniu, dodaj do wyników, wyjdź z pętli i usuń znalezioną wartość z listy wyszukiwania (aby była mniejsza w następnym elemencie) 4. Jeśli nie ma już więcej wartości do wyszukania, przerwij przeglądanie listy. Chciałbym wiedzieć, jak analizować ten algorytm, a konkretnie, jaki jest najgorszy przypadek działania. (Myślę, że jeśli szukam wszystkich wartości zawartych na liście.) Źródło w JavaScript: function multipleIndexOf(search, arr) { var searchArr = search.slice(0); var wynik = []; /* pętla przez tablicę */ for (var i = 0, l = arr.length; i < l; i++) { /* pętla przez szukane wartości */ for (var i2 = 0, l2 = szukajArr.length; i2 < l2; i2++) { /* jeśli szukana wartość pasuje... */ if (arr[i] == searchArr[i2]) { /* dodaj do wyniku */ result.push(i); /* usuń z tablicy */ searchArr.splice(i2, 1); /* kontynuuj wyszukiwanie z następną */ przerwą; } } if (searchArr.length == 0) { przerwa; } } zwraca wynik; }


title: Gdzie mogę znaleźć krótkie omówienie komponentów Enterprise Java Beans?

text: Jestem świeżo upieczonym absolwentem, mam rozmowę kwalifikacyjną za dwa dni i sprawy są napięte. Jestem dobrze zaznajomiony z Java EE Servlet i technologią JSP, ale nigdy tak naprawdę nie używałem EJB. Czy nauka o EJB jest naprawdę ważna dla efektywnego wykorzystania frameworka Java EE? Czy w ogóle konieczne jest posiadanie pomysłu na technologię rozmowy kwalifikacyjnej? Jeśli tak, gdzie mogę znaleźć coś, co będzie tylko przeglądem tematu - prosty samouczek "hello world", który mówi, co jeszcze jest możliwe? Wypróbowałem zwięzły samouczek o różach indyjskich i bardzo szczegółowy samouczek Oracle, ale potrzebowałbym _trochę_ czasu, aby go ukończyć. Czy jako coś niezwiązanego w wywiadzie mogę wspomnieć o mojej wiedzy na temat Django, mimo że wiem, że firma w zasadzie nie zatrudnia Django?


title: Czy powinniśmy napisać test jednostkowy dla klasy, która wywołuje inną klasę, która ma napisany kod?

text: Załóżmy, że istnieją dwie klasy „A” i „B” „A” mają wiele zagnieżdżonych warunków, które obejmują wszystkie testy jednostkowe. „B” ma właściwość, która wywoła klasę „A” i zwróci wartość zgodnie z wynikiem klasy „A” W klasie „B”, gdy chcę napisać test jednostkowy. Czy powinienem po prostu kpić z klasy A i zweryfikować na klasie B, że została nazwana konkretną metodą klasy „A”.


title: Wtyczka Qt dla Eclipse/PyDev

text: Zainstalowałem PyDev i chcę zacząć od aplikacji GUI. Słyszałeś o Qt, ale jak zintegrować go z PyDev? Czy istnieje jakieś IDE Pythona, które jest dostarczane w pakiecie z Qt lub innymi frameworkami GUI, a także Visual Studio, takim jak ToolBox, aby dodać kontrolki do formularza? Nie chcę iść z IronPythonem.


title: Algorytm do obliczania szacowanego przyszłego wykorzystania określonej wartości

text: Szukam nazwy algorytmu komputerowego. Jestem prawie pewien, że powinien istnieć taki, który mi pomoże, ale nie mogę za życia wymyślić, czego szukać. Jeśli masz implementacje algorytmu, byłoby to niesamowite - ale tak naprawdę to tylko badam to, ponieważ chciałbym dowiedzieć się, jak sam go zbudować. Zasadniczo szukam algorytmu, który może obliczyć przyszłe wykorzystanie pewnego zestawu danych na podstawie mojego poprzedniego użycia. Na przykład mój dostawca energii elektrycznej wie, ile energii zużyłem przez ostatnie 20 dni 30-dniowego miesiąca, więc może to ekstrapolować i przewidzieć, jak szybko skończą mi się pieniądze na moim koncie energetycznym. Chciałbym wiedzieć, czy istnieje algorytm, który może mi powiedzieć, jak długo prawdopodobnie się wyczerpię. To, czego szukam, to coś, co daje następujące dane wejściowe: 1. Zakres (np. 30 dni) 2. Okres czasu w tym zakresie (np. 4, nigdy mniej niż zero, nigdy więcej niż maksimum zakresu) 3. Niektóre wartości z poprzednich okresów — poprzednie dni lub te same dni z poprzednich miesięcy) 4. Łączna wartość dla tego zakresu (np. 300) Może mi podać zakres dat, w którym prawdopodobnie zabraknie mi całkowita wartość (300). To, co chciałbym na drugim końcu, to coś prostego - np. „Na podstawie poprzedniego użycia wyczerpie się za 2 dni”. Przeprowadziłem zwykłe wyszukiwania w Google, ale nie wymyśliłem niczego szczególnego, co by nawet wyglądało blisko – jednak, o ile widzę, jest to dość powszechny algorytm używany w całym miejscu.


title: Jaki projekt mam zastosować, aby przekonwertować moje klasyczne strony ASP na aplikację internetową Java Enterprise?

text: Technologii Java jest tak wiele, że trudno mi wiedzieć, od czego zacząć. Rozumiem JSP i serwlety. Wiem, jakich serwerów http używać. Prawdziwe podstawowe rzeczy. Czego nie rozumiem, to co robię po tym? Nie chcę tworzyć mnóstwa jsp i serwletów. Nie różni się to zbytnio od tego, co mam. Muszę przeszukiwać różne bazy danych. Niektóre to bezpośrednie trafienia. Niektóre mają usługi sieciowe, z których muszę korzystać. Będę musiał stworzyć system logowania, który działa bezpośrednio. Czy nie powinienem zrobić więcej, aby stworzyć aplikację korporacyjną „dużą java”?


title: Jak udokumentować przebieg programu, aby wynik wyglądał profesjonalnie?

text: Zaprojektowałem prostą stronę internetową na papierze. Teraz chcę stworzyć profesjonalnie wyglądający dokument do zatwierdzenia przez mojego klienta. W jaki sposób mogę to zrobić? Wypróbowałem Visio, ale wydaje się strasznie skomplikowany i nieodpowiedni do mojego celu. Mógłbym opisać to, co napisałem słowami w dokumencie Worda, ale byłoby to znacznie trudniejsze do odczytania i zrozumienia. ![tutaj wpisz opis obrazu](http://i.stack.imgur.com/1rTG3.jpg)


title: Najlepsze praktyki dotyczące tagów ASP.NET

text: Pracuję nad moim pierwszym projektem ASP.NET i jestem rozdarty między używaniem wszędzie tagów asp (`<asp:SomeElement`) a używaniem zwykłego HTML do prostych rzeczy, które nie wymagają żadnego kodu, takich jak stałe div, statyczny tekst, itp. Myślę, że najlepiej byłoby używać tagów ASP tylko do kodu za i innych dynamicznych rzeczy, podczas gdy elementy statyczne mogą być w waniliowym HTML, ale to zakładając, że nigdy nie będę musiał zamieniać ich w ASP.NET w przyszłości. Czy istnieje w tym zakresie najlepsza praktyka/zalecane podejście?


title: Jaki jest dobry framework C lub Obj-C do manipulowania repozytoriami Git?

text: Jakich bibliotek Obj-C/C użyłeś do manipulowania repozytoriami git w aplikacjach na Maca? Pracuję nad aplikacją na Maca, którą chciałbym móc klonować i modyfikować repozytoria git. Bezpośrednie używanie git nie jest opcją, ponieważ jest to GPL i chciałbym sprzedawać swoją aplikację komercyjnie bez otwierania źródła. Widziałem libgit2, który mógłbym połączyć, ale nie jestem pewien, jak to zrobić poprawnie, i nie wydaje się, aby implementował żadną z rzeczy niezbędnych do wypychania/przeciągania repozytoriów przez protokół git.


title: Kiedy używać zagnieżdżania funkcji Pythona?

text: Piszę program, który tworzy kopię zapasową katalogów. Które z poniższych podejść jest lepsze dla organizacji kodu? Utwórz oddzielną klasę dla logiki Backup i Zip - class BackupUtil: def backup(self): Brak class ZipUtil: def katalog_archiwum(self): Brak Lub użyj zagnieżdżenia funkcji w ten sposób - class BackupUtil: def backup(self): def katalog_archiwum(): Brak Brak


title: deleguj zajęcia na wydarzenia związane z interfejsem użytkownika

text: Co jest czystsze podczas projektowania delegata do reprezentowania stanu interfejsu użytkownika (java swing): manipulować delegatem bezpośrednio z niestandardowych programów obsługi zdarzeń zdefiniowanych w kodzie interfejsu użytkownika lub zarejestrować delegata jako odbiornik zmian w elementach interfejsu użytkownika? (usuwając w zasadzie całą logikę z kodu interfejsu użytkownika) Jestem bardziej za drugim projektem, ale chciałbym uzyskać informacje zwrotne przed wyrzuceniem ładunku (złego) kodu.


title: Tworzenie specyficznego dla organizacji edytora XML w HTML

text: Zajmuję się tworzeniem przyjaznego dla użytkownika edytora XML w HTML/JS. Szukasz ogólnych porad dotyczących tworzenia interfejsu użytkownika edytora i zalecanego podejścia do mapowania danych do interfejsu użytkownika. **Szczegóły problemu:** Zasadniczo pobieram pojedynczy obiekt jako XML z serwera. Wspomniane obiekty XML będą małymi zbiorami XML specyficznego dla organizacji, które mogą być ustrukturyzowane tylko na kilka różnych sposobów. (Ogólnie dostępnych jest tylko około 15 różnych typów węzłów.) Więc będę znać wszystkie rodzaje węzłów, które mogą się pojawić, więc wiem, jaki rodzaj interfejsu użytkownika utworzyć dla każdego typu węzła. Zasadniczo wszystkie klasy mają ten sam węzeł główny ( _Item_ ). Pierwszym węzłem podrzędnym tej klasy może być pojedynczy węzeł _List_ , _Table_ , _Person_ lub _Building_ . Po tym jest zwykle około 4 poziomów wielu węzłów podrzędnych o różnych strukturach. Na przykład: * _Osoba_ zawierająca _Listę_ _Adresów_ , gdzie każdy węzeł adresu ma dwie właściwości; _id_ i _type="adres osobisty"_. W dowolnym miejscu w tekście każdego adresu może znajdować się również odwołanie, rodzaj wewnętrznego linku do identyfikatora w systemie. * _Tabela_ składa się z _Nagłówka_ , _Stopki_ i _Body_ z opcjonalną liczbą _wierszy_ i _komórek_ Przypadek użycia jest następujący: Użytkownik zawsze zaczyna od załadowania istniejącego elementu XML do edytora. Użytkownik może edytować istniejące wartości, usuwać je i dodawać nowe wartości. (Ponieważ wszystkie elementy mają ten sam rodzaj węzła głównego, użytkownik będzie mógł dodać praktycznie dowolny rodzaj węzła, jaki chce). ) pokazuje zapisany element. * * * Mam 2 pomysły na interfejs edytora: * Rodzaj edytora znaczników w stylu StackExchange (pojedyncze pole tekstowe z prostymi znacznikami znaczników) * Formularz HTML, w którym renderujesz każdy węzeł jako jedno lub więcej pól wejściowych, i użyj przycisków, aby przenieść/dodać/usunąć pola. Wyrenderowałbym _Tables_ jako tabele HTML i _Lists_ jako nieuporządkowaną listę z każdym elementem listy zawierającym wiele pól wejściowych (jedno pole wejściowe dla każdego _Address_ i jedno rozwijane dla _type_ i przechowuj identyfikator w parametrze _data-id_). **Które z tych podejść do interfejsu użytkownika polecasz?** (Możesz zadać więcej pytań na temat kodu XML). **Jak radzisz mapować dane do interfejsu użytkownika?** Czy podczas edytowanie, a następnie parsowanie go z powrotem do XML, gdy użytkownik zapisuje swoją pracę. Lub przechowywać dane jako obiekt JavaScript, pracować bezpośrednio z obiektem JS i po prostu aktualizować interfejs użytkownika na podstawie obiektu JS? Być może używasz jakiegoś frameworka MV* z wiązaniem dwukierunkowym? (Przypuszczam, że ta metoda byłaby brana pod uwagę tylko wtedy, gdybym zbudował interfejs użytkownika jako formularz). Czy zawsze łatwiej byłoby przeszukiwać węzeł po węźle XML i generować na jego podstawie elementy interfejsu użytkownika?


title: Jak zachować spójność między wartościami zakodowanymi na stałe w różnych plikach?

text: Mam plik źródłowy C i inny plik (bez kodu) w projekcie, który zawiera tę samą wartość zakodowaną na sztywno. W idealnym przypadku wartość byłaby określona tylko w jednej lokalizacji i automatycznie skopiowana do drugiej lokalizacji podczas procesu kompilacji. Nietrudno wymyślić hackowe sposoby wykonania tego zadania, ale chcę wiedzieć, czy istnieje wspólny sposób na wykonanie tego. Jakiej standardowej metody lub podejścia należy użyć, aby zagwarantować, że obie wartości pozostaną spójne? Innymi słowy, jak powinienem zachować spójność w niehackowy sposób?


title: Jak zorganizować repozytoria dla podzielonej biblioteki?

text: Mam dwie biblioteki, które implementują protokół: jedna zapewnia narzędzia do ustanawiania kanału między dwiema częściami, a druga zapewnia klasy i narzędzia do budowania i analizowania komunikatów protokołu binarnego. Te dwie biblioteki mogą być używane niezależnie, nie są od siebie zależne i każda ma własną konfigurację kompilacji. Jednak mają wspólny zestaw przykładów (korzystających z obu bibliotek) i dokumentację (samouczki). * * * Mam na myśli dwie możliwości zorganizowania tego w repozytoriach Git: # Alternatywa 1 Uczyń każdą bibliotekę we własnym repozytorium. Centralne repozytorium przechowuje wspólną dokumentację, przykłady i narzędzia do klonowania obu repozytoriów i ich ładowania początkowego. Użytkownicy korzystaliby z tego głównego repozytorium, a programiści pracowaliby nad dedykowanymi repozytoriami. Nie chcę używać podmodułów Git, ponieważ trudno nimi zarządzać w ten sposób (wersjonowanie staje się znacznie trudniejsze, gdy biblioteki ciągle się zmieniają). # Alternatywa 2 Umieść to wszystko razem: zarówno biblioteki, dokumentację, jak i przykłady. Wersjonowanie byłoby stosowane do obu bibliotek, ponieważ byłyby one traktowane jako pojedyncza (choć oddzielona) jednostka. Tak to teraz robimy. To sprawia, że rzeczy są prostsze, ale czuję, że można to poprawić. * * * Więc... jakie są najlepsze praktyki organizowania tego wszystkiego za pomocą Git? Jestem też otwarty na inne alternatywy. Mimo że obecnie go nie używamy, możliwe, że będziemy używać narzędzi do ciągłej integracji, automatycznych testów i kompilacji itp.


title: Dobra technika tokenizacji tekstu wyszukiwania

text: Szukamy sposobu na tokenizację jakiegoś tekstu w taki sam lub podobny sposób, jak zrobiłaby to wyszukiwarka. Powodem, dla którego to robimy, jest to, że możemy przeprowadzić analizę statystyczną na tokenach. Językiem, którego używamy, jest python, więc wolałbym technikę, która działa w tym języku, ale prawdopodobnie w razie potrzeby może skonfigurować coś, aby używać innego języka. # Przykład **Oryginalny token:** Mamy świetne burrito! **Bardziej uproszczone:** (usuń liczbę mnogą i interpunkcję) Mamy świetne burrito **Jeszcze bardziej uproszczone:** (usuń zbędne słowa) świetne burrito **Najlepsze:** (rozpoznawaj pozytywne i negatywne znaczenie): burrito -pozytywne -


title: Jak utworzyć model domeny, który nie narusza OOP?

text: Moja gra odczytuje wiele plików JSON, deserializuje je i przekazuje wynikowe obiekty klasom, które ich potrzebują. Te zdeserializowane obiekty, które można traktować jako model domeny, są zwykle bardzo proste: public class Settings { public bool FullScreen = false; public int Szerokość Okna = 800; public int Wysokość Okna = 600; } Ale jeden z tych obiektów nie jest taki prosty: public class Sprite { [JsonProperty] private string only readonly assetName; [JsonProperty] prywatna pozycja Vector2; // inne właściwości... public Sprite( string nazwa_zasobu, pozycja wektora2 ) { this.assetName = nazwa_zasobu; this.position = pozycja; } public void Move( Vector2 direction ) { // przenieś } // inne metody... } Właściwości klasy Sprite są prywatne, ponieważ chcę mieć dobrą hermetyzację. Oznacza to, że ma konstruktor, który akceptuje wiele argumentów i kilka innych metod ustawiania jego właściwości. Ponadto każda właściwość wymaga atrybutu, aby mogła zostać odczytana przez parser JSON. Wygląda jak POCO, ale przeczytałem, że POCO powinny być nieświadome trwałości. Mógłbym stworzyć prostszy model domeny, który działa bardziej jak DTO, aby to spełnić: public class Sprite { public string AssetName = "default.png"; publiczna pozycja Wektor2 = Wektor2.Zero; } Teraz moja klasa Sprite jest miła i ignorancka. Mogę napisać inną klasę do obsługi logiki biznesowej typu rzeczy: public class SpriteWhatever { private Sprite sprite; public SpriteWhatever( Sprite sprite ) { this.sprite = sprite; } public void Move( Vector2 direction ) { // wykonaj move } // inne metody... } Ale obawiam się, że mój model domeny jest anemiczny. Aby uniknąć _tego_ , mógłbym po prostu upublicznić wszystkie właściwości klasy Sprite i zachować w niej całą logikę biznesową, ale wtedy nie mam enkapsulacji. Co powinienem zrobić?


title: Rozwidlony projekt, gdzie zaczynają się moje numery wersji?

text: Rozwinąłem projekt i wiele go zmieniłem. Ten widelec to nie tylko mała zmiana funkcji tutaj i zakopana poprawka błędu, to całkiem istotna zmiana. Udostępniana jest tylko większość podstawowego kodu. Rozwidywałem ten projekt w wersji 2.5.0. Od jakiegoś czasu zacząłem wersjonować swój fork w wersji 3.0. Jednak nie jestem pewien, czy jest to właściwa droga, głównie dlatego, że kiedy ten projekt trafi na wersję 3.0, sprawy stają się zagmatwane. Ale nie chcę zaczynać od nowa w wersji 1.0 lub v0.1, ponieważ oznacza to niemowlęctwo, niestabilność i brak ponownego zdefiniowania projektu. To nieprawda, ponieważ większość podstawowego kodu jest bardzo dopracowana i stabilna. Jestem naprawdę zagubiony w tym, co robić, więc pytam tutaj: Jaki jest standardowy sposób radzenia sobie z tego rodzaju sytuacją? Czy większość forków zaczyna się od nowa, podbija numery wersji lub robi coś innego, o czym nie jestem świadomy.


title: Wystąpienia publiczne w tworzeniu oprogramowania

text: Pozdrawiam moich kolegów mieszkańców boksów. Zauważyłem, że moja rola stopniowo zmienia się z „opiekunu funkcji” na „programistę funkcji”. Podczas gdy większość tych pierwszych polegałaby na naprawianiu i/lub aktualizowaniu istniejącej funkcji (i po cichu narzekając na jej implementację z całkowitą naiwnością), w tej nowej roli stwierdzam: nowa funkcja * Muszę komunikować się z projektem, aby określić wymagania użytkownika dotyczące nowej funkcji * Muszę komunikować się z QA w celu określenia zestawów testowych dla nowej funkcji, a także jej aktualnego stanu podczas opracowywania. * Muszą komunikować się z producentami/kierownikami projektów, aby określić pozostały czas realizacji, a także aktualizacje wymagań programistycznych. * i wreszcie muszę od czasu do czasu komunikować się z wyższym kierownictwem, aby bronić nowej funkcji i zademonstrować, że minimalizuje ona ryzyko w nadchodzącym wydaniu. Ostatnia pozycja jest tutaj kluczowa i kilka razy zdałem sobie z tego sprawę. W sumie jednak staje się bardzo oczywiste, że umiejętności komunikacyjne SĄ ważne, nawet lub szczególnie jako takie dla programistów, którzy czują, że są „właścicielami” funkcji, nad którą pracują. Wszystko to powiedziawszy, zdaję sobie sprawę z tego, jak ważne jest to i chciałbym dalej doskonalić swoje umiejętności w tym obszarze. Lubię komunikację jeden na jednego, ale stwierdzam, że mam tendencję do jąkania się, kiedy rozmawiam z jakąkolwiek grupą większą niż kilka osób, które dobrze znam. Gdzie mogę znaleźć dobre zasoby, aby poprawić swoje umiejętności komunikacyjne?


title: Czy wzorzec projektu złożonego implementuje zachowanie cykliczne?

text: Wzorzec projektowy Composite pozwala nam wywołać `operation()` na węźle 'composite' w strukturze drzewa, a ta `operacja()` będzie wywołana na wszystkich dzieciach, poddziedzinach i tak dalej. Kiedy element `operation()` jest wywoływany, obowiązkiem jest wywołanie `operation()` na wszystkich jego dzieciach i tak dalej. Każde dziecko odpowiedzialne za wywołanie operacji na swoich własnych dzieciach. Rozumiem, dlaczego ma to **_rekursywny charakter_**. Kiedy dowiadujemy się o tym projekcie, słowo „rekurencja” cały czas tkwi w naszych głowach. **Ale czy można to uznać za „zachowanie rekurencyjne” w ścisłym tego słowa znaczeniu?** Zawsze myślałem, że rekurencja oznacza po prostu proces, w którym **„funkcja wywołuje samą siebie”.** („funkcja” lub „metoda” lub „procedura” itp.). Jednak we wzorcu projektu Composite **żadna metoda nie wywołuje samej siebie.** Metoda wywołuje metodę o identycznej nazwie w skomponowanych z nią obiektach (służy jako "dzieci") - ale nigdy nie wywołuje siebie (inaczej "operacja unieważnienia" (){ this.operation();}` nigdy się nie dzieje). Czy zatem wzorzec projektowy Composite tworzy **zachowanie cykliczne**? A może tworzy zachowanie **przypominające naturę rekurencji**? Czy moja definicja rekurencji jest zła, ponieważ jest zbyt ścisła? Jeśli tak, **jak zdefiniowałbyś rekurencję?**


title: Jakie są tematy z matematyki, które programista powinien bezwzględnie znać?

text: Studiowałem matematykę i uznałem ten przedmiot za bardzo interesujący, ale po zajęciu się programowaniem i kodowaniem czuję, że zapomniałem większość zaawansowanych rzeczy, które studiowałem. Wiem, że niektórzy z was mogą uznać to za oburzające, ale w moim przypadku to prawda. Teraz chcę pokutować i naprawić ten błąd przez ponowne uczenie się, ale jest tylko jeden problem, od którego nie wiem, od czego zacząć. Lista tematów oparta na odpowiedziach na aktualne pytanie i zajęcia z matematyki 1. Matematyka dyskretna 2. Rachunek różniczkowy 3. Algebra elementarna 4. Arytmetyka modułowa 5. Obliczeniowa teoria liczb


title: Bezpłatny rozwój usług internetowych w chmurze

text: Szukam darmowej (jak w piwie) kombinacji usług do **nauki** "rozwoju oprogramowania w chmurze" i bardzo małego użytku prywatnego (powiedzmy, prywatna, uproszczona lista zakupów i rzeczy do zrobienia w sieci z prostym uwierzytelnianiem). Kombinacja powinna obejmować pełny zestaw potrzebnych usług: * Usługa DVCS (np. github) * Usługa w chmurze do uruchamiania kodu backendu * Odpowiednia usługa przechowywania danych (najlepiej nie SQL), dostępna przez backend (jeśli nie jest zawarta w backendzie usługi) * Usługa sieciowa, obsługująca strony internetowe widziane przez użytkownika, w celu uzyskania dostępu do funkcjonalności zaplecza * "IDE w chmurze" (najlepiej jedno, dwa też są w porządku) do kodowania zarówno zaplecza, jak i HTML/javascript * Jeśli (wdrożenie zaplecza) używa jakieś CI, to inne punkty: * Backendowy język programowania może być dowolny, z wyjątkiem VB lub PHP * Wszystko musi być w chmurze, nic stałego na lokalnym komputerze PC (grafika nie jest częścią pytania) * Szukam gotowych do -użyj kombinacji usług, a nie wirtualnego serwera, na którym sam mogę ustawić cokolwiek * Nie obchodzi mnie, czy usługa nalega na wyświetlanie reklam w interfejsie użytkownika * „Tanie” i „bezpłatna wersja próbna” też są w porządku, jeśli „bezpłatne” nie istnieje * Zgodnie z przykładem użycia wymagana jest pamięć masowa, procesor i limit przepustowości elementy są znikome Google znajduje oczywiście kilka usług, wszystkie wymagające przynajmniej rejestracji przed testowaniem, więc szukam znanej-dobrej _kombinacji_ , więc idealna odpowiedź zaczyna się od "Korzystam z tego zestawu usług:...", zawiera linki do usługi oraz krótki opis i osobiste doświadczenia.


title: Realna metoda udostępniania naszego projektu PHP

text: Jesteśmy dwoma programistami, którzy nie mają wcześniejszego doświadczenia w udostępnianiu jednego projektu PHP. W szczególności cakePHP. Oboje używamy NetBeans i ustawiliśmy projekt jako "aplikację PHP ze zdalnego serwera". W projekcie używamy również git + bitbucket do kontroli wersji. Teraz problem polega na tym, że za każdym razem, gdy jeden z nas dokona jakichkolwiek zmian w kodzie i zapisze go, zostanie on zaktualizowany na serwerze, ale nie w środowisku drugiego dewelopera. Czy to jest właściwa ścieżka, którą podążamy, dzieląc się projektem? Jak dokonać aktualizacji kodu i jak uniknąć nadpisania innego kodu?


title: Jaki powinien być przepływ pracy z repozytorium git?

text: Pracuję na kilku repozytoriach git, choć na większości pracuje nie więcej niż 2 osoby. Głównie ja i mój szef. Bardzo często, gdy pracujemy równolegle, zdarza się, że "git log" nie wygląda tak ładnie z powodu zatwierdzeń scalających. Mój szef zawsze na to narzeka. Naprawdę nienawidzę tego faktu, ponieważ dzięki temu skutecznie serializuję swoją pracę. Aby zapobiec tym zatwierdzeniom scalającym, muszę zawsze przebazować do najnowszej wersji i udać się do innego biura, aby upewnić się, że mój szef nie zapomni przetworzyć żądań scalenia przed samodzielnym zatwierdzeniem. Co gorsza, powiedział mi, że od mniej więcej tygodnia nie otrzymuje e-maila z powiadomieniem o prośbie o scalenie, chociaż trudno mi w to uwierzyć. Co gorsza, teraz sam łączy prośby o recenzowanie, co jeszcze bardziej podnosi problem. (Najlepsze jest to, że myśli, że zawsze zapominam o przesunięciu bazy i aktualizacji na czas...) Już kilka razy próbowałem mu wytłumaczyć, że robię wszystko tak, jak sugeruje, ale mi nie wierzy, ponieważ ma większe doświadczenie z git, przynajmniej w środowiskach innych niż praca zespołowa. Pracuję w tym miejscu od 3 miesięcy, choć tak naprawdę pracuję w zespole od kilku tygodni. Naprawdę chciałem używać svn, ponieważ przy takim przepływie pracy w git marnuję dużo czasu i boli mnie głowa. W szczególności posiadamy około 40 repozytoriów z modułami, które w większości przypadków nie są dłuższe niż 3000 LOC. Więc kiedy zmieniam coś intymnego w Repo A, być może będę musiał zmienić coś w Repo B. Gdybym decydował, umieściłbym to wszystko w jednym repozytorium, przynajmniej moduły należące do jednej grupy oprogramowania. Oczywiście jako nowy pracownik nie możesz za bardzo krytykować swojego szefa ani wywierać na niego zbyt dużego wpływu. Jaki jest więc najlepszy sposób na poradzenie sobie z tym problemem?


title: Zbieranie vs struktura danych vs agregat

text: Znam trzy terminy związane z przechowywaniem obiektów lub danych. Nie jestem pewien, czy rozumiem dokładnie różnice między terminami. Proszę potwierdzić, czy to, co zamierzam napisać, jest dokładne. **Struktura danych** to grupa typów danych lub obiektów tego samego typu, zgrupowanych razem w jakiejś formacji. **Kolekcja** to to samo co struktura danych (nie mam na myśli Kolekcji Javy, mam na myśli kolekcję w bardziej ogólnym znaczeniu). **Agregacja** to obiekt zawierający kolekcję lub strukturę danych, zapewniający interfejs do komunikacji z wewnętrzną strukturą danych. Na przykład obiekt `someContainer`, który zawiera wewnętrzną `ArrayList`, jest agregatem, ponieważ zawiera strukturę danych, hermetyzuje je i zapewnia interfejs do manipulowania nimi. Czy to wszystko się zgadza?


title: Czy powinniśmy używać gałęzi git czy oddzielnych repozytoriów?

text: Więc namówiłem mojego pracodawcę, aby w końcu wskoczył na kontrolę wersji...do tej pory moje doświadczenie z gitem dotyczyło osobistych projektów i pracy jako freelancer, gdzie wszystko jest na jednym serwerze lub małych skryptach...więc to jest nieco powyżej moja wiedza. Będziemy mieć 3 serwery internetowe… testowe, postojowe, produkcyjne. Będziemy używać beanstalk (takiego jak github), który będzie zdalnie przechowywać nasze repozytoria, a beanstalk będzie wdrażany na naszych serwerach przez sftp (lub ssh lub cokolwiek zdecydujemy). W naszym folderze htdocs mamy instalację wielostanowiskową drupala, a także sporo rzeczy poza drupalem (strony docelowe itp.). Chcielibyśmy, aby wszystkie nasze dokumenty htdoc (z wyjątkiem obrazów, folderów plików itp.) znajdowały się w kontroli wersji. Czy powinniśmy używać jednego repozytorium z wieloma gałęziami? A może 3 oddzielne repozytoria, każde z jedną gałęzią, ponieważ będą wdrażane na 3 oddzielnych serwerach?


title: Przechowywanie dłuuugiej tabeli przeglądowej

text: ## Tło Produkt, nad którym pracuję, ma _bardzo_ długą tabelę przeglądową. tabela zawiera dane statyczne i nie można jej wygenerować automatycznie. jest około 500 wierszy i 10 kolumn. kolumny mają głównie liczby całkowite i łańcuchy. żeby skomplikować sprawy, tak naprawdę są dwa takie tabele. każdy wiersz w tabeli 1 odwzorowuje zero lub więcej wierszy w tabeli-2. używamy bazy danych SQLite z dwiema tabelami. Instalator produktu umieszcza plik SQLite w katalogu instalacyjnym. aplikacja jest napisana w dotnet i używamy ADO do jednorazowego załadowania danych przy starcie. **teraz** 1. tabela odnośników rośnie. w każdym wydaniu miesięcznie dodajemy około 10 nowych wpisów 2. istniejące wpisy są dostosowywane. w każdym wydaniu dopracowujemy istniejące wpisy. ## Problem zespół (10) programistów pracuje nad tabelą odnośników. Kod trafia do SVN, ale mały diabeł SQLite nie. uniemożliwia to wielu programistom pracę nad tym. regularnie wykonujemy kopie zapasowe pliku, ale prawidłowe wersjonowanie nie jest możliwe. nigdy nie wiemy, kto dokonał przełomowej zmiany. najgorsze jest to, że nie wiemy, czy w ogóle zaszła jakaś zmiana. porównywanie baz danych jest żmudne, jeśli nie niemożliwe. oczekuje się, że w nadchodzących latach tabele będą dość duże i będziemy potrzebować programistów do równoległej pracy nad tym. dane mają kluczowe znaczenie dla biznesu. musimy mieć możliwość audytu wprowadzonych w nim zmian. ## Pytanie Jakie byłoby rozwiązanie problemów przedstawionych powyżej? jednym z pomysłów było przekształcenie całości w XML i traktowanie go jak kolejny plik źródłowy. w ten sposób SVN może wykonać wersjonowanie i możemy pracować równolegle. ale dane pokazują zachowanie relacyjne. dzięki XML tracimy ograniczenia dotyczące unikalności i klucza obcego. również nie możemy zapytać go z łatwością jak sql. każda pomoc tutaj będzie mile widziana.


title: Co powinienem wiedzieć, przechodząc ze startupu do roli korporacyjnej?

text: Niedawno objąłem stanowisko w dość dużej firmie. Do tej pory pracowałem z małymi firmami (tylko kilku pracowników) i startupami, więc przyzwyczaiłem się do pewnego stylu pracy. Trochę się denerwuję, czego się spodziewać i na co się przygotować: o czym powinienem pamiętać, gdy przechodzę do większego korporacyjnego miejsca pracy?


title: Współdzielony plik źródłowy między dwiema częściami projektu

text: Mam następującą strukturę katalogów: part1 build src part2 build src Teraz mam plik nagłówkowy, który chciałbym dołączyć do obu części tych projektów, będzie on zawierał stałe i niektóre definicje makr, a także niektóre funkcje użytkowe, a Chcę, aby były zsynchronizowane między dwiema częściami. Jaki byłby ogólnie akceptowalny sposób formatowania mojej struktury katalogów? Coś takiego? part1 build src part2 build src share src i skonfiguruj moje pliki make w katalogach `build` tak, aby przeszukiwały również `../../share/src` Czy można to zrobić w bardziej "poprawny" sposób?


title: Czy należy zawsze wiedzieć, co robi API, po prostu patrząc na kod?

text: Ostatnio rozwijam własne API i dzięki temu zainwestowanemu zainteresowaniu projektowaniem API jestem bardzo zainteresowany tym, jak mogę ulepszyć swój projekt API. Jednym z aspektów, który pojawił się kilka razy, jest (nie przez użytkowników mojego API, ale w mojej obserwacyjnej dyskusji na ten temat): _należy wiedzieć po prostu patrząc na kod wywołujący API, co robi_. Na przykład zobacz tę dyskusję na GitHub dla repozytorium dyskursu, wygląda to mniej więcej tak: foo.update_pinned(true, true); Tylko patrząc na kod (bez znajomości nazw parametrów, dokumentacji itp.) nie można odgadnąć, co to zrobi - co oznacza drugi argument? Sugerowane ulepszenie to mieć coś takiego: foo.pin() foo.unpin() foo.pin_globally() I to wyjaśnia (drugim argumentem było to, czy przypiąć foo globalnie, zgaduję) i zgadzam się z tym Przypadek ten z pewnością byłby poprawą. Uważam jednak, że mogą istnieć przypadki, w których metody ustawiające różne, ale logicznie powiązane stany byłyby lepiej eksponowane jako jedno wywołanie metody, a nie oddzielne, _nawet jeśli nie wiedziałbyś, co robi, patrząc tylko na kod_. (Więc musiałbyś uciec się do przejrzenia nazw parametrów i dokumentacji, aby się dowiedzieć - co osobiście zawsze robiłbym, bez względu na wszystko, jeśli nie jestem zaznajomiony z API). Na przykład wystawiam jedną metodę `SetVisibility(bool, string, bool)` na FalconPeer i potwierdzam, że patrzę tylko na linię: falconPeer.SetVisibility(true, "aerw3", true); Nie miałbyś pojęcia, co to robi. Jest to ustawienie 3 różnych wartości, które kontrolują "widoczność" `falconPeer` w sensie logicznym: akceptuj prośby o dołączenie, tylko z hasłem i odpowiadaj na prośby o wykrycie. _Podzielenie tego na 3 wywołania metod może doprowadzić do tego, że użytkownik API ustawi jeden aspekt „widoczności”, zapominając ustawić inne, o których zmuszam go do myślenia, eksponując tylko jedną metodę do ustawienia wszystkich aspektów „widoczności”_. Co więcej, gdy użytkownik chce zmienić jeden aspekt, prawie zawsze będzie chciał zmienić inny aspekt i może to teraz zrobić w jednym połączeniu.


title: Wykryj nowy tweet w dowolnym środowisku lub języku (komputerowym lub internetowym)

text: Mam nadzieję, że nie zostanie to odebrane jako niejednoznaczne lub zbyt niejasne, ale próbuję stworzyć usługę, która monitoruje twitter i archiwizuje tweety. Poza zadaniami PHP cron nie mogę wymyślić żadnego sposobu na wykrycie, czy został opublikowany nowy tweet? Nie przejmuję się zbytnio tym, w jakim języku programowania mam to napisać, ani w jakim frameworku mam pracować. Również czy jest to komputer stacjonarny, czy oparty na sieci. Jaką drogą wszyscy poszliby za to? Dziękuję


title: Algorytm aktualizacji priorytetów uporządkowanej listy, gdzie zmiana priorytetu pozycji jest kosztowna

text: Pracuję z interfejsem API, w którym mogę dodawać i aktualizować elementy na liście uporządkowanej według pola priorytetu, które mogę ustawić (które nie musi być ciągłe, ale musi być dodatnią liczbą całkowitą). Aktualizacja członka listy jest kosztowną operacją, dlatego chcę zminimalizować liczbę aktualizacji. To, czego chcę, to algorytm, który zminimalizuje liczbę wymaganych aktualizacji, gdy lista zostanie zmieniona. tj. najgorszym scenariuszem jest użycie ciągłych priorytetów zaczynających się od 1. Priorytet | pozycja ---------------- 1 A 2 B 3 C 4 D 5 E W tym przypadku, aby przenieść pozycję E na początek listy, każda pozycja musiałaby mieć swój priorytet zaktualizowany. Naiwnym rozwiązaniem, o którym myślałem, jest zaimplementowanie dużej liczby priorytetów i umieszczenie priorytetów, które są w połowie odstępu między dwoma pozycjami, gdy element musi być tam umieszczony. np. Priorytet | pozycja ---------------- 1000000 A 2000000 B 3000000 C 4000000 D 5000000 E W tym przypadku aby przenieść E na górę wymagana jest tylko jedna aktualizacja (i mogę ustawićjej priorytet na 500000 ) Problem polega na tym, że będzie działać jak wyszukiwanie binarne, a nawet w przypadku użycia liczb początkowych rzędu 10^9 zajmie tylko 30 operacji, zanim priorytety staną się ciągłe. Czy istnieje lepszy algorytm niż ten? Czy istnieje taki, z którego mogę skorzystać (ale nie znalazłem go przez google), czy ktoś może zasugerować ulepszenie?


title: Jak przejść od „pomocy wampirowi” do „dewelopera”?

text: Przez całe życie byłem entuzjastą komputerów, ale programowaniem (tworzeniem stron internetowych) zacząłem dopiero, gdy zacząłem studia. Teraz są cztery lata później - niedługo kończę studia, odbyłem kilka pełnoetatowych staży i pracy w niepełnym wymiarze godzin, a wszystko kręci się wokół web devu... Ale wciąż często szukam pomocy, tutoriali lub stackexchange odpowiedzi na moje pytania, zamiast samodzielnie rozwiązywać problemy. Słyszę termin „pomóż wampirowi” – ktoś, kto prosi/szuka pomocy w rozwiązaniu swoich problemów, zamiast samemu rozwiązać problemy – i chociaż nie jest to dla mnie w stu procentach prawdą, odnajduję próg „sfrustrowania”, gdy próba osiągnięcia czegoś jest dość niska i nie zajmuje dużo czasu, gdy znajdę problem, aby zacząć szukać rozwiązania online, w przeciwieństwie do samodzielnego rozwiązania. Z pewnością jestem w stanie wykonywać swoją pracę, ale chcę wiedzieć, jak mogę nauczyć się MYŚLIĆ i PAMIĘTAĆ jak programista, w przeciwieństwie do polegania na odpowiedziach online jako kuli. To paskudny nawyk i naprawdę czuję, że ogranicza mój potencjał rozwojowy, szybkość, elastyczność i adaptację do nowych języków/środowisk. _TL; DR: Jak przeszedłeś od szukania pomocy (w formie pytań i odpowiedzi, wtyczek, samouczków, kontroli kodu itp.) do tworzenia rozwiązań (odpowiadania na pytania i odpowiedzi, pisania własnych wtyczek, tworzenia samouczków itp.)? _


title: Co dokładnie oznacza, że przechowywanie „dużych obiektów blob w bazie danych zmniejsza wydajność”?

text: Dla kogoś, kto zna wewnętrzną bazę danych, może to być łatwe pytanie, ale czy ktoś może wyjaśnić w jasny sposób, dlaczego przechowywanie dużych obiektów blob (powiedzmy filmów 400 MB) w bazie danych ma zmniejszać wydajność i co to dokładnie oznacza? Jest to twierdzenie często spotykane w Internecie, ale nigdy nie widziałem, aby zostało to naprawdę wyjaśnione. Mówiąc konkretnie, mam na myśli wydajność SharePoint/MSSQL, tj. wydajność przesyłania plików, przeglądanie stron, wyświetlanie list, otwieranie dokumentów itp. - operacje, o których mówi się, że stają się wolniejsze, gdy baza danych staje się zbyt duża. Eksternalizacja obiektów Blob do systemu plików (który w SharePoint nazywa się Remote Blob Storage, czyli przenoszenie plików poza bazę danych, pozostawiając jedynie odniesienie) ma to w pewnym stopniu rozwiązać, ale na czym dokładnie – na najniższym poziomie – jest różnica? Oczywiste jest, że tworzenie kopii zapasowych trwałoby dłużej w przypadku gigantycznych plików przechowywanych w bazie danych ... ale na jakie dokładnie operacje ma to wpływ i jaki jest mechanizm leżący u ich podstaw (tj. w jaki sposób pliki przechowywane w systemie plików poza bazą danych są dostępne lub przechowywane w inny sposób)? Załóżmy, że prosta tabela zawierająca kolumny `ID(guid, PK), FileName(string), Data(varbinary(max))` \- spowoduje, że duża kolumna `Data` naprawdę spowolni operacje takie jak wyświetlanie listy plików na stronie internetowej ( co zakładam wewnętrznie oznacza uruchomienie `SELECT FileName FROM table`) lub wstawienie nowego wiersza? To nie jest tak, że rzeczywiste kolumny zawartości binarnej są indeksowane. Wiem, że było już kilka takich pytań, ale nie znalazłem odpowiedniego wyjaśnienia.


title: Prawidłowe licencjonowanie FOSS: lokalizacja tekstu

text: Mam kilka projektów FOSS, które chcę wydać na licencji BSD, ponieważ chcę tylko zachować własność intelektualną kodu, aby inni wiedzieli, że go piszę. Przypuszczam, że wszystko, co muszę zrobić, to: 1. Mieć plik o nazwie `LICENSE` tylko w głównym folderze oprogramowania. 2. Napisz na górze każdego pliku źródłowego następujący tekst: > To oprogramowanie jest wydane na licencji BSD. > Pełny tekst licencji można znaleźć w pliku o nazwie 'LICENSE' w > głównym folderze oprogramowania. > Prawa autorskie (c) 2013, Dor. Mam rację? Czy jest coś do dodania/usunięcia/zmiany? Czy powinienem podać swoje pełne imię i nazwisko, czy po prostu użyć imienia i pierwszej litery nazwiska (np. „Dor K.”)? Tekst licencji BSD zawarty w pliku `LICENSE` to: ------------------------------------ ------------------------------------ To oprogramowanie jest wydawane na licencji BSD ------ -------------------------------------------------- ---------------- Prawa autorskie (c) 2013, Dor K. Wszelkie prawa zastrzeżone. Redystrybucja i używanie w formie źródłowej i binarnej, z modyfikacją lub bez, jest dozwolone pod warunkiem, że spełnione są następujące warunki: * Redystrybucja kodu źródłowego musi zawierać powyższą informację o prawach autorskich, tę listę warunków i następujące zastrzeżenie. * Redystrybucje w formie binarnej muszą zawierać powyższą informację o prawach autorskich, tę listę warunków i następujące zastrzeżenie w dokumentacji i/lub innych materiałach dostarczonych z dystrybucją. NINIEJSZE OPROGRAMOWANIE JEST DOSTARCZANE PRZEZ POSIADACZY PRAW AUTORSKICH I WSPÓŁCZYNNIKÓW „TAK JAK JEST” I WYŁĄCZA SIĘ WSZELKIE WYRAŹNE LUB DOROZUMIANE GWARANCJE, W TYM MIĘDZY INNYMI DOROZUMIANE GWARANCJE PRZYDATNOŚCI HANDLOWEJ I PRZYDATNOŚCI DO OKREŚLONEGO CELU. W ŻADNYM WYPADKU WŁAŚCICIEL PRAW AUTORSKICH LUB WŁAŚCICIELE NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK BEZPOŚREDNIE, POŚREDNIE, PRZYPADKOWE, SZCZEGÓLNE, PRZYKŁADOWE LUB WTÓRNE SZKODY (W TYM MIĘDZY INNYMI ZAKUP TOWARÓW LUB USŁUG ZAMIENNYCH; UTRATĘ KORZYSTANIA, DANYCH LUB USŁUG LUB PRZERWANIA W DZIAŁALNOŚCI) JEDNAK SPOWODOWANE I NA DOWOLNEJ TEORII ODPOWIEDZIALNOŚCI UMOWNEJ, ŚCISŁEJ LUB CZYNNEJ (W TYM ZANIEDBANIA LUB INNEGO) WYNIKAJĄCEJ Z KORZYSTANIA Z TEGO OPROGRAMOWANIA, NAWET JEŚLI JEST WSKAZANE. -------------------------------------------------- -----------------------


title: Jaki jest sens usług ciągłej integracji, takich jak Travis CI?

text: O ile wiem, usługi takie jak Travis CI i CircleCI przejmują twój projekt i uruchamiają jego zestaw testowy za każdym razem, gdy wprowadzasz nową zmianę do swojego repozytorium. Zakładając, że możliwe jest również ręczne lub automatyczne uruchomienie takiego zestawu testów lokalnie przed zatwierdzeniem lub wypchnięciem zmiany, jaki jest sens korzystania z takiej usługi?


title: Obsługa odpowiedzi klienta Rest Api

text: Mam dwie instancje Laravela: API `Rest Server` i `Rest Client`. Powiedzmy, że chcę wyświetlić listę pozycji na pierwszej stronie. Wysyłam żądanie do mojego API serwera z kontrolera klienta: funkcja publiczna add_employee() { $data['employee_positions'] = Client_API::generic_request('/employees/position_list'); $this->layout->content = View::make('employees.add_employee')->with($data); } Jeśli moje żądanie API zwróci 400-500 błędów, chcę, aby moja aplikacja została przekierowana na stronę logowania. Gdzie powinienem zweryfikować moje odpowiedzi API? Nie mogę wykonywać przekierowań w klasie wrappera `Client_API` mojego klienta. Jak dotąd jedynym sposobem, w jaki mogę to osiągnąć, jest walidacja odpowiedzi przed zwróceniem ich wewnątrz klasy `Client_API` i w przypadku błędu `400-500` - wyrzucam Wyjątek, a następnie obsługę mojej logiki biznesowej (przekierowań) wewnątrz łapania funkcja wyjątków. Powiedziano mi, że wyjątki nie powinny być używane jako część procesów biznesowych w mojej aplikacji.


title: Tworzenie stron internetowych: szybkie debugowanie bez przeglądarki

text: Czy istnieje metodologia debugowania stron internetowych bez przeglądarki? Zwykle używam przeglądarki internetowej, aby wyświetlić stronę wyników. Powolny proces debugowania trochę mnie dezorientuje. Aby poprawić błąd, muszę przejść do okna kodu (co zajmuje trochę czasu). Następnie poprawiam błąd i wracam do okna przeglądarki, wciskam F5 i czekam na aktualizację strony (co może zająć 10 sekund). Może to zająć tylko 1 sekundę, jeśli strona zaktualizuje się automatycznie po poprawieniu kodu. Chciałbym narzędzie, w którym mógłbym zobaczyć mój kod i odpowiednią stronę wyników na jednym ekranie. Potrzebuję narzędzia, które aktualizuje otwartą stronę po zmianie kodu. Chciałbym też edytować zarówno stronę serwera, jak i klienta (ogólnie JavaScript) i jak najszybciej zobaczyć moje zmiany, bez zbędnych manipulacji 'użytkownikiem'. **Aktualizacja**. Potrzebuję narzędzia, które kontroluje pliki źródłowe. Musi ponownie załadować przeglądarkę po zmianie dowolnego pliku źródłowego. Dobrą funkcją może być przeładowanie z wyczyszczeniem pamięci podręcznej (na przykład, jeśli zmieniony plik ma określone rozszerzenie, takie jak .js, .css).


title: Wskazówki dotyczące usuwania błędów oprogramowania

text: Staram się zorganizować w moim biurze robal bash i był to najlepszy sposób, aby to przeprowadzić. Idealnie, szukam najbardziej efektywnego sposobu zarządzania testowaniem i zapewniania pracownikom zachęt do wyszukiwania odpowiednich błędów.


title: Czy nie powinienem pokazać wszystkich swoich umiejętności?

text: Programuję od bardzo dawna i mam dogłębną znajomość kilku technologii. Niedawno złożyłem podanie o pracę programistyczną i w swoim CV wymieniłem wszystkie umiejętności - HTML, CSS, JavaScript, jQuery, AJAX, PHP, ASP, JSP, C/C++, ARM. Oprócz C/C++ i ARM jako ekspert pokazałem poziom umiejętności we wszystkich technologiach. Wielu moich znajomych ubiegało się o tę samą pracę i nie mieli żadnego doświadczenia w tworzeniu stron internetowych. WSZYSCY dostali telefon na rozmowę kwalifikacyjną. Jednak dostałem odmowę mówiącą, że otrzymaliśmy aplikacje od kandydatów na bardzo wysokim poziomie i nie zostałeś wybrany do przejścia na wyższy poziom. To mnie poważnie zdemotywowało. Nie rozumiem, dlaczego zostałem odrzucony, skoro posiadałem wszystkie wymagane umiejętności i wybrano wszystkich, którzy nie posiadali żadnej z nich. Myślę, że jednym z powodów jest to, że pracodawca może myśleć, że jak jedna osoba może być ekspertem we wszystkich technologiach. Kiedyś w innym wywiadzie menedżer HR powiedział mi, że to niewiarygodne, że znasz dogłębnie ASP, JSP i PHP, ponieważ mamy różnych programistów dla każdej technologii. Takie incydenty bardzo mnie unieszczęśliwiają, ponieważ mimo dużej zdolności do zajmowania stanowiska jestem odrzucany. Czy nie powinienem wymienić wszystkich swoich umiejętności w CV, aby uniknąć takich sytuacji?


title: Na co najpierw patrzysz: kod czy projekt?

text: Jeśli właśnie zapoznałeś się z nowym projektem, czego najpierw szukasz, aby zorientować się, jak to działa? Czy najpierw szukasz projektu? Jeśli jest projekt, czego w nim szukasz? Diagramy klas, diagramy wdrażania, diagramy sekwencji czy coś innego? A może idziesz od razu po kod? Jeśli tak, to jak rozumiesz, jak różne warstwy oddziałują na siebie?


title: Jak poradzić sobie z szefem/menedżerem, który lubi ścigać się z programistami

text: Po niedawnej restrukturyzacji w naszej korporacji - mam nowego kierownika liniowego. Jest ogólnie ok i nie tak podstępny jak poprzedni. Mówiąc „podstępny” nie mam na myśli, że był złym menedżerem – po prostu odnoszę się do kogoś, kto większość informacji przechowuje dla siebie i nie dzieli się z innymi członkami zespołu, aby być jedynym osoba” - masz pomysł. Niemniej jednak udało mi się utrzymać całkiem dobre relacje z moim poprzednim menedżerem – i byłem całkiem produktywny. Mój nowy szef jest bardziej otwarty, co jest dobrą rzeczą, ale naprawdę nienawidzę jednej z jego zalet – lubi ścigać się z programistami – dając to samo zadanie innemu programiście, aby jak najszybciej naprawić problem. Jak być może już zrozumiałeś, informacje NIE przepływają swobodnie w środowisku takim jak nasze. Tak więc osoba, z którą mój menedżer rozmawiał 10 minut temu, może zaczynać pracę nad tym samym problemem, nad którym pracuję teraz. Zdarzyło się to kilka razy i za każdym razem, gdy słyszałem, że może być ktoś, kto pracuje nad tym samym problemem – poszedłem zapytać mojego przełożonego – kto jest właścicielem problemu – ale zwykle był bardzo wymijający w swoich odpowiedziach. Więc moje pytanie brzmi - jak powstrzymać mojego menedżera przed zrobieniem tego? W naszym małym zespole składającym się z pół tuzina programistów jestem najstarszym i zwykle oszczędzam się na wyścigach, ale kiedy mnie to uderza, naprawdę działa mi na nerwy. I jeszcze jedno: nie sugeruję, że mój menedżer jest złym szefem, nie wierzę w to, że świat jest lub powinien być sprawiedliwy, po prostu chcę znaleźć sposób, żeby przestał się ze mną ścigać. Jedna rzecz na raz.


title: Jakie są zalety systemów kontroli wersji, które wersjonują każdy plik osobno?

text: W ciągu ostatnich kilku lat pracowałem z kilkoma różnymi systemami kontroli wersji. Dla mnie jedną z podstawowych różnic między nimi było to, czy wersjonują pliki indywidualnie (każdy plik ma swoją osobną numerację wersji i historię), czy repozytorium jako całość ("commit" lub wersja reprezentuje migawkę całego repozytorium) . Niektóre systemy kontroli wersji „per-file”: * CVS * ClearCase * Visual SourceSafe Niektóre systemy kontroli wersji „dla całego repozytorium”: * SVN * Git * Mercurial Z mojego doświadczenia wynika, że systemy kontroli wersji dla poszczególnych plików doprowadziły tylko do problemów, i wymagają znacznie więcej konfiguracji i konserwacji, aby używać poprawnie (na przykład "specyfikacje konfiguracji" w ClearCase). Miałem wiele przypadków, w których współpracownik zmieniał niepowiązany plik i łamał to, co idealnie byłoby odizolowaną linią rozwoju. Jakie są **zalety** tych systemów kontroli wersji dla poszczególnych plików? Jakie problemy mają systemy kontroli wersji obejmujące całe repozytorium, których nie mają systemy kontroli wersji dla poszczególnych plików?


title: Zmienna IOS a właściwość

text: Właśnie zacząłem zagłębiać się w rozwój Objective-C i IOS i zastanawiałem się, kiedy i we właściwej lokalizacji powinienem deklarować zmienne/właściwości. Główny fragment kodu, który muszę wyjaśnić, znajduje się poniżej: Dlaczego i kiedy powinienem deklarować zmienne wewnątrz instrukcji interfejsu i dlaczego mają tę samą zmienną z _, a następnie tę samą jako właściwość. A potem w implementacji robią @synthesize tableView = _tableView (rozumiem, co robi synteza) Dzięki :-) @interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> { UITableView *_tableView; UIActivityIndicatorView *_activityIndicatorView; NSArray *_movies; } @property (nieatomowe, zachowaj) UITableView *tableView; @property (nieatomowe, zachowaj) UIActivityIndicatorView *activityIndicatorView; @property (nieatomowe, zachowaj) NSArray *movies;


title: Jak zdecydować, które klasy są niezbędne dla systemu?

text: Znam teoretycznie zasady projektowania i wzorce projektowe. Ale wstyd się zdać sobie sprawę, że nie jest to jasne, gdy stosuje się go w praktyce. Na przykład pomyślmy o prostej grze konsolowej w kółko i krzyżyk. W jaki sposób określiłbyś, która klasa jest dla określonej odpowiedzialności i jak ustalić, że odpowiedzialność/klasa jest niezbędna dla systemu jeszcze przed zastosowaniem wzorców lub zasad projektowych? Rozumiem, że powinno się to opierać na wymaganiach i znajomości domeny, ale jest wiele sposobów na spełnienie wymagań. Jeśli przyjmę podejście zwinne (TDD), nadal istnieje wiele sposobów na osiągnięcie kluczowego wymagania poprzez uczynienie go testowalnym. Chciałbym, żeby było wiele materiałów (książek lub stron internetowych) na ten temat, ale większość z nich dotyczy teorii, ale rzadko praktyki. Byłbym wdzięczny, gdyby ktoś mógł odwołać się do takich materiałów, z którymi mogę przećwiczyć projekty klasowe.


title: Nie programuję w wolnym czasie. Czy to czyni mnie złym programistą?

text: Wiele blogów i porad w sieci zdaje się sugerować, że aby zostać świetnym programistą, nie wystarczy wykonywać tylko codzienną pracę. Na przykład, powinieneś w wolnym czasie uczestniczyć w projektach open source, pisać aplikacje na smartfony itp. W rzeczywistości wiele z tych porad wydaje się sugerować, że jeśli nie lubisz programować na tyle, aby robić to przez cały dzień, jesteś prawdopodobnie w złej karierze. To mi nie pasuje. Lubię swoją pracę, ale kiedy wracam do domu z biura, nie mam ochoty od razu wskakiwać z powrotem do komputera i zaczynać kodować aż do pójścia spać. Każdego dnia mam tylko określoną liczbę godzin wolnego czasu i wolę spędzać je na innych hobby, spotykać się z przyjaciółmi lub wychodzić na zewnątrz niż przed komputerem. Programowanie sprawia mi przyjemność i od czasu do czasu hackuję poza pracą. Zależy mi na rozwoju osobistym i spędzam czas na czytaniu blogów technicznych i książek, aby uczyć się i stawać się lepszym. Ale to nie rozciąga się na to, że chcę wykorzystać cały mój wolny czas na kodowanie. Czy to oznacza, że w głębi serca nie jestem „prawdziwym” programistą? Czy można zostać dobrym programistą bez robienia dodatkowych rzeczy poza swoją pracą? Bardzo chciałbym usłyszeć, co myślisz. _Aktualizacja: dziękujemy wszystkim za komentarze i odpowiedzi. Dużo dobrych myśli i rad!_


title: Jak postępować z kompozycjami zagnieżdżonymi?

text: Na stronie internetowej do wywiadów natknąłem się na następujące pytanie: > Oto 3 produkty: stół, krzesło i ławka. Produkt może być z materiału: > drewno, metal i plastik. W tym celu zaprojektuj struktury klasowe. Moją pierwszą myślą było stworzenie klasy abstrakcyjnej Product z chronionym elementem klasy Material, jak pokazano poniżej. Moje rzeczywiste pytanie jest po bloku kodu poniżej #include <stdio.h> #include <string> using namespace std; class Type { public: // Zakomentowano wirtualny poniżej. To była literówka! /*virtual*/void SetType(string s) { m_typeName = s; } virtual void PrintType() { printf("Typ = %s\n",m_typeName.c_str()); } wirtualny ~Type()=0; Type& operator=(const Type& rhs) { if ( &rhs != this ) { m_typeName = rhs.m_typeName; } return *to; } prywatne: ciąg m_typeName; }; Type::~Type() {} class Drewno: public Type { }; klasa Plastik: public Typ { }; class Product { public: Product():m_type(NULL) { } virtual void SetType(Type* t){ m_type = t; } virtual void PrintInfo() { printf("Jestem %s produktem\n",m_productName.c_str()); m_type->PrintType(); } wirtualny ~Produkt()=0; chroniony: ciąg m_productName; Typ* m_typ; }; Product::~Product() {} class Table: public Product { public: Table() { m_productName = "tabela"; } }; class Krzesło: public Produkt { public: Chair() { m_productName = "krzesło"; } }; int main() { Plastik *p = nowy Plastik(); p->SetType("plastikowy"); Tabela *t = nowa Tabela(); t->SetType(p); t->DrukujInformacje(); usuń t; usuń p; zwróć 0; } Mam jednak wrażenie, że można by go lepiej zaprojektować. Ogólnie rzecz biorąc, jeśli kompozycje (w przykładzie Produkt) zawierają kompozycje (w przykładzie Materiał), jaki jest dobry wzorzec projektowy?


title: Czy dwie podróże do bazy danych są uzasadnione w przypadku systemu logowania?

text: Projektuję system logowania do projektu i mam problem, który wymaga dwóch przejść do bazy danych po zalogowaniu się użytkownika. 1. Użytkownik wpisuje nazwę użytkownika i hasło 2. Baza danych jest odpytywana i pobierany jest skrót hasła w celach porównawczych ( pierwsza podróż) 3. Kod testuje hash na wprowadzone hasło (i sól), a po weryfikacji resetuje identyfikator sesji 4. Nowy identyfikator sesji i nazwa użytkownika są wysyłane z powrotem do bazy danych w celu zapisania wiersza do tabeli logowania i wygenerowania loginu Identyfikator dla tej sesji. EDIT: Używam losowej soli. Czy ten projekt ma sens? Czy czegoś mi brakuje? Czy moje obawy dotyczące dwóch wyjazdów są bezpodstawne? Komentarze i sugestie są mile widziane.


title: Kto był twoim mentorem? Gdzie mogę znaleźć mój?

text: W wielu artykułach, które przeczytałem, często sugerowane jest znalezienie mentora. Taki, który poprowadzi, będzie nauczał i nie tylko. (Nie znam szczegółów, jeszcze ich nie znam.) Więc kto był twoim mentorem, jeśli w ogóle? Miałem tylko pośrednich mentorów: profesora na uniwersytecie, menedżera w pracy, których obserwowałem i od których najwięcej się nauczyłem. Poza tym Twitter był świetnym miejscem do śledzenia profesjonalistów i odkrywania nowych technologii, które mnie interesują. Ale wciąż zastanawiam się, jak mógłbym go znaleźć, ponieważ wyczuwam, że może mi brakować mojego doświadczenia. Pomysły?


title: Jaki jest prawidłowy algorytm odwrócenia kursywy w tekście mieszanym?

text:
Motywacje pytania zostały przedstawione w poniższej sekcji. Istnieje wiele sposobów, aby tekst był kursywą, więc być może istnieje więcej niż jeden dobry „ ** _algorytm zamiany kursywy_**”. Problem ujawnia pewne dodatkowe trudności w kodzie XHTML i użyciu znacznika `<i>`, który **musi być zrównoważony**. Przykład:
Kilka innych Homo sapiens odkryto skamieniałości.

Odkryto kilka innych Homo sapiens skamieniałości.
 A więc wygląda to tak: 1. _Kilka więcej_ Homo sapiens _skamieniałych zostało odkryty_. 2. Odkryto jeszcze kilka skamieniałości Homo sapiens. * * * # Wprowadzenie i dyskusja do algorytmów Dla " **rozwiązania układu** ", najprostszym algorytmem jest sprawdzenie właściwości CSS `font-style` wszystkich bloków tekstu i odwrócenie ich za pomocą jQuery: $('#myFragment *' .each(function(){ if ($(this).css('font-style')=='italic') $(this).css('font-style','normal') else $(this ).css('styl czcionki','kursywa') }); Ale ten algorytm nie przetrwał do nieco bardziej złożonego testu,
FRAGMENT <big>kursywą i </big> bez OUT .
 Drugi najprostszy algorytm dotyczy **konkretnego rozwiązania** i został użyty w sekcji „Przykłady”. Wykonaj dwa kroki: 1. ująć fragment XHTML kursywą; 2. odwróć znaczniki otwarte/zamknięte kursywą (np. `</i>` na `<i>`). Czyli pisząc w Javascript, var s = '... fragment treści XHTML...'; s = ''+ s.replace(/<(\/?)i>/mg, function (m,p1){ return p1? '': ''; } ) + ''; Ale też nie przetrwałem do drugiego testu, tracąc równowagę tagów... „Poprawiony” algorytm działa (!), ale nie jest przenośny, ani szybki, ani elegancki. Zostało to zademonstrowane tutaj oraz w poniższej sekcji przykładów. # Punkt! Więc pytanie brzmi: **istnieje prosty, dobry i ogólny (możliwy do użycia w dowolnej przeglądarce i przenośny na inne języki) algorytm?** Znasz inny algorytm „zamień kursywę”? PS: „ogólny” w tym sensie, że nawet tłumaczę twój algorytm na XSLT. Algorytm **musi generować bezpośrednio zrównoważony kod XHTML** (bez pośredniej czarnej skrzynki, takiej jak Tidy). * * * ## Motywacje Muszę przenieść "algorytm zamiany kursywy" do edytorów tekstu, parserów serwerów itp. We wszystkich przypadkach mogę "znormalizować wejście" (i wyjście) za pomocą standardowego znacznika XHTML i `<i>`. Przetwarzam tekst XHTML z prozy i artykułów naukowych, wyeksportowany z różnych źródeł i stylów... Większość tekstów jest eksportowana jako "normalny tekst", ale wiele tytułów (np. tytuł artykułu, tytuł rozdziału) i czasami , pełny rozdział lub pełne pole tekstowe (np. streszczenie artykułu) są stylizowane kursywą. Wszystkie te „stylizowane kursywą” muszą być odwrócone. Typowe przypadki: * Przekształć oryginalną "kursywa wszystkich rozdziałów" na "normalny tekst wszystkich rozdziałów": zobacz ten przypadek, gdzie w około 300-stronicowej książce 8 z 25 rozdziałów musi być odwróconych. * Zapisane kursywą cudzysłowy, streszczenia itp. Zobacz ten przykład. Potrzebujesz zmiany z powrotem do normy, ale bez utraty słów nacisku. * Nazwy dwumianowe gatunków w tekstach naukowych są zwykle pisane kursywą (lub odwróconą, czcionką inną niż używana dla „normalnego tekstu”). Setki pisanych kursywą tytułów (artykułów i sekcji artykułów) artykułów eksportowanych w formacie XHTML musi zostać odwróconych w moim miejscu pracy. PS: patrz przykład na początku pytania ("Kilka więcej _Homo sapiens_..."). Potrzebuję również ** przetłumacz ogólny algorytm (odpowiedzi!) do biblioteki XSLT ** , gdzie nie istnieje "korekta równoważenia tagów". ## Przykłady Implementacja w JavaScript i PHP **nieogólnego** "algorytmu zamień kursywę". Ogólny wymaga ogólnego "algorytmu przeplatania XML"... Tutaj używam poprawek przeglądarki (DOM) i Tidy, jako alternatywy dla "przeplatania". ### Javascript Działa ze złożonymi danymi wejściowymi (!). Ilustrując, za pomocą implementacji jQuery: var s = $('#sample1').html(); // pobierz oryginalny fragment tekstu html // ALGORYTM INWERSJI: dodaj i usuń kursywę. s = ""+ s.replace(/<(\/?)i>/mg, function (m,p1){ return p1? '': ''; } ) + ""; // źle sformatowany XHTML, ale jest ok... $('#inverted').html(s); // ... DOM robi wszystko dobrze! // drobne poprawki, dla czystych pustych miejsc: s = $('#inverted').html(); s = s.replace(/<([a-z]+)>(\s*)<\/\1>/mg,'$2'); // czyste s = s.replace(/<([a-z]+)>(\s*)<\/\1>/mg,'$2'); // wyczyść pozostanie $('#inverted').html(s); // alert(y) KONIEC ALGORYTMU; ### PHP, ze schludnym To samo co JavaScript, "przetłumaczone" na PHP -- naturalne tłumaczenie wykorzystuje klasę `DOMDocument()` i metody `loadHTML`/`saveXML`, ale to co zachowuje się tak samo jak odpowiedniki przeglądarki to klasa „porządny”. Pokazuje te same wyniki (!) $sample1='ORIGINAL <big>kursywą i </big> bez OUT'; $inverted = '...inverted będzie tutaj...'; echo $próbka1; // Uporządkowana korekta $s = $sample1; // pobierz oryginalny fragment tekstu html // ALGORYTM INWERSJI: dodaj i usuń kursywę. $s = "". preg_replace_callback('/<(\/?)i>/s', function ($m){ return $m[1]? '': '';}, $s) . ""; // źle sformatowany XHTML, ale jest ok... $config = array('show-body-only'=>true,'output-xhtml'=>true); $porządek = nowy porządek; $uporządkowane->parseString($s, $config, 'utf8'); $s = $porządny; // ... ponieważ Tidy poprawia! // drobne poprawki, dla czystych pustych miejsc: $s = preg_replace('/<([a-z]+)>(\s*)<\/\1>/s', '$2', $s); // wyczyść $s = preg_replace('/<([a-z]+)>(\s*)<\/\1>/s', '$2', $s); // wyczyść pozostanie // ALGORYTM ZAKOŃCZENIA echo "\n\n$s";


title: Jakiej metryki/listy należy użyć do oceny całego zespołu programistycznego?

text: Tytuł może wydawać się niejasny, więc pozwól, że opowiem ci trochę historii, co staram się wyjaśnić pytanie. Zostałem zatrudniony jako konsultant w małym dziale rozwoju korporacji. Firma jest również właścicielem kilku firm zajmujących się tworzeniem oprogramowania. Mój były kierownik prowadzi zespół BI, składający się z raportów, analityków i programistów. Poprosił mnie o ocenę ogólnego projektu, procesu tworzenia oprogramowania i jakości kodu. Oto, co znalazłem: * Dużo kodu kopiuj/wklej wszędzie (bez ponownego użycia). * Mimo że mają wszystko TFS, VS Ultimate itp., Nie mają procesu kompilacji. * Brak Cruise Control.net / Teamcity... * Brak testów jednostkowych. * Strony internetowe z 3700 liniami kodu, Mnóstwem ogromnych funkcji (które można podzielić na mniejsze funkcje). * Brak konwencji nazewnictwa zarówno kodu db, jak i c# * Brak projektów innych firm lub projektów typu open source. * Brak IoC. * Brak separacji obaw. * Brak kontroli jakości kodu (NDepend lub FxCope lub cokolwiek). * Brak przeglądu kodu. * Brak komunikacji w zespole. * Twierdzą, że napisali framework aplikacji ( 6 miesięcy, 3 osoby), ale raczej nie nazwałbym frameworka (oczywiście nie ma testów jednostkowych, jest kilka, ale wszystkie są skomentowane). Framework zawiera 14 projektów, ale są też projekty zawierające tylko jeden plik z dwudziestoma linijkami kodu. Szczerze mówiąc, to, co ludzie robią, naprawiając błąd przez cały dzień (co w końcu dostarczy więcej błędów), są trochę odizolowani od społeczności, niektórzy członkowie zespołu nawet nie znają github lub przepełnienia stosu, prawdopodobnie poszli tam z google, ale nie wiedzą nie wiem o tym. Oto pytanie: Czy ta lista jest w porządku? A może jestem wybredna? Ponieważ nie mam do nich żalu, chcę być uczciwy, uczciwy i chciałbym usłyszeć wasze sugestie, zanim przedstawię tę listę. A ponieważ ta lista również zostanie przejrzana przez kierownika działu oprogramowania, nie chcę żadnego złamanego serca czy czegoś takiego. http://www.hanselman.com/altnetgeekcode/ Na przykład bardzo bym chciał do takich list, nie mogę robić odniesień. Oto co myślę po tym pytaniu Skoro listu chciałem to go przedstawię. Ale na pewno odniosę się do tego pytania i świetnych odpowiedzi, aby jasno wyrazić moją intencję (nie chcę być wybredna* _*_ *e, szanuję to, co robią, ale wierzę, że mogą zrobić to lepiej). Zalecę im, aby robili to powoli, mądrze wykorzystywali swój czas, a jeśli mi pozwolą, spróbuję zbadać prawdziwy problem i spróbować go rozwiązać razem z nimi. Nie jako wróg lub osoba, która nie lubiła tego, co robią, jako przyjaciel, osoba, która lubi budować.


title: Kiedy mogę używać Licencji?

text: Niedawno napisałem małą grę w wisielca CLI w Pythonie; nie jest to nic wielkiego, ale sam to wszystko napisałem. Chciałbym, aby program był otwarty i darmowy (GPL ver.3), ale jest tak mały, że nie wiem, czy potrzebuję/mogę go licencjonować. Czy jest pewien moment, w którym program staje się „licencjonowany”, czy też mogę licencjonować dowolny program, który napiszę?


title: Czy modyfikacja kodu na licencji MIT i jego sprzedaż jest legalna?

text: Mam projekt i chcę użyć w nim gotowego skryptu na licencji MIT. Ale używanie tego skryptu osobno będzie zbędne. Postanowiłem więc połączyć mój kod i skrypt na licencji MIT w tym samym pliku. (Powiedzmy, że zmodyfikuję, poprawię i/lub dodam do niego nowe funkcje.) Planuję sprzedać tę pracę na rynku, ale czy jest to uczciwe (prawnie)? UWAGA: W międzyczasie umieszczę (odwołaj się) prawa autorskie skryptu na licencji MIT już w końcowym pliku.


title: Jak zaprojektować pośredniczący program filtrujący routing, aby odpowiednio akceptować dane wejściowe i przesyłać dalej?

text: Moja sytuacja: zaprojektowałem aplikację napisaną w Pythonie do czytania mojej poczty i sprawdzania wiadomości, które zawierają określony podpis cyfrowy. Otwiera je i szuka słów kluczowych. Jeśli wiadomość zawiera te słowa kluczowe, pewne powiązane funkcje są wykonywane na komputerze. Jest to sposób, w jaki mogę sterować komputerem z telefonu komórkowego, nie będąc tam. Nadal jestem na początkowym etapie i obecnie mogę tylko zdalnie otwierać i zamykać aplikacje/procesy. Oczywistym problemem są zagrożenia bezpieczeństwa. Miałem nadzieję, że uda mi się to osiągnąć, wymagając i sprawdzając ten podpis cyfrowy. Jednak mój problem pojawia się, gdy chcę, aby ten program mógł być używany przez wielu użytkowników. Pomysł polega na tym, że użytkownik będzie wysyłał słowa kluczowe: na przykład nazwę użytkownika i hasło, aby zalogować się na swoje osobiste konto e-mail i wysyłać do niego wiadomości do przeanalizowania. Zignoruj konsekwencje dla bezpieczeństwa wysyłania niezakodowanych haseł pocztą e-mail. (Chociaż jeśli mógłbyś mi pomóc w tej części, również byłbym wdzięczny, ale obecnie nie jest to zakres mojego pytania.) Mój problem polega na zaprojektowaniu procesu pośredniczącego, który będzie wymagał e-maila/hasła, aby przeczytać wiadomość e-mail i wyszukaj te słowa kluczowe. Problem polega na tym, że program musi mieć dostęp do wiadomości e-mail, aby odczytać wiadomość e-mail dla nazwy użytkownika/hasła! Wpadłem w pętlę i nie mogę wymyślić, jak mieć ten wymagany program pośredniczący. Mógłbym po prostu utworzyć dowolne konto e-mail i sprawdzić dane logowania, ale czy jest lepszy sposób na zrobienie tego niż to? Ponadto, czy istnieje lepszy sposób zdalnej komunikacji z komputerem niż ten? Zwłaszcza jeśli komputer nie jest serwerem i znajduje się za routerem z tylko ip podsieci? Jeśli zadaję to pytanie w niewłaściwym miejscu, głęboko przepraszam. Każda pomoc byłaby bardzo mile widziana!


title: Jakie są zastosowania algebraicznych typów danych?

text: Czytam o algebraicznych typach danych (dzięki Richardowi Minerichowi znalazłem to doskonałe wyjaśnienie pojęcia). Chociaż wydaje mi się, że rozumiem pojęcie typów sum i typów produktów itp., Nie do końca rozumiem, w jaki sposób algebraiczne typy danych są przydatne poza określaniem dopasowania wzorców. Jakie inne rzeczy można zrobić z ADT poza dopasowywaniem wzorców? * * * EDIT: Nie pytam, co programista może zrobić z ADT, czego nie można zrobić z obiektami. Pytam, czy istnieją inne operacje, na które zezwala ADT; na przykład, czy można przeprowadzić dodatkowe rozumowanie na temat zaangażowanych typów, jeśli stosuje się ADT? Czy narzędzia ADT ułatwiają jakiś rodzaj analizy typu, która bez nich nie byłaby możliwa?


title: Visitor Pattern jest nadal przydatny w językach obsługujących rozszerzenia klas?

text: Czy wzorzec odwiedzających jest przydatny w językach obsługujących rozszerzenia klas? Po co zawracać sobie głowę jego wdrażaniem, skoro masz otwarte klasy lub możesz podklasy. Jeśli potrzebujesz nowej funkcjonalności dla klasy, możesz ją po prostu podklasy, więc jeśli czegoś nie brakuje, czy nadal jest (bardzo) przydatna w językach obsługujących rozszerzenia klas?