Wypowiedzi
-
I started writing a shopping list http://t.co/qEU0tF6JcQ% C3%...: http://t.co/h0l67qAWxo
- 23.05.2013, 01:38
-
- 22.05.2013, 23:47
-
US admits drones killed four Americans http://t.co/Aiwc4s8Z4K
- 22.05.2013, 23:44
-
- 22.05.2013, 18:20
-
Resume (HTML) | Luis Zuno| Free web resources http://t.co/IvOCiHwkty
- 22.05.2013, 14:58
-
Zobaczcie, jak zmienił się Kevin - Macaulay Culkin http://t.co/BfNwWdMSbM
- 20.05.2013, 21:09
-
Zobacz jak zmieniła się Aleksandra Szwed czyli Elizka z Rodziny zastępczej, niesamowite!!! http://t.co/MZ285iH5RW
- 20.05.2013, 21:07
-
Na mojej mi nie zależy, na dwóch pozostałych, na jednej 76 aktywnych, na drugiej 4 tysiące aktywnych.
Maciej, sample:
http://infosecinstitute.com - codziennie od 2 do 5 artykułów sprawdza się. Intenseschool - codziennie jeden. -
Dzikie języki z Bell Labs są piękne :)
Co do stack to masz rację. Chwalmy Pana że Stack Overflow istnieje. Aczkolwiek ja używam jeszcze linkedin czasami. Dlatego jest jeden z powodów, dla których nie lubię pracować sam. W teamie pierwsza rzecz to jest pytanie do osoby siedzącej obok, najpierw lewa strona potem prawa. Potem pytanie na pokój, a potem notka wrzucona na szybko na serwer wewnętrzny. -
Darek na odesk masz to trochę inaczej rozwiązanie. Nie martwisz się o zlecenia. To odesk ma Cię powiązać z odpowiednimi ludźmi. No i nie bijesz się o kasę z klientami. To odesk Ci płaci. :P Co warto robić na odesk to testy kompetencyjne. One są publikowane potencjalnym pracodawcom jako pierwsze.
Na przykład masz tak, że:
PHPUnit masz 99.8
JUnit masz 98,7
a np mockery masz tylko 75%
albo ux gui test masz 80%
i portal Cię kojarzy z odpowiednimi ludźmi. Oni płacą przeważnie nie za projekt a za godzinę twojej dostepności dla nich i dla zespołu. W sumie raczej nie ma z tym problemu. Odesk ma kilkanaście zasadniczą różnić, które biją inne rzeczy na głowę.
Te portale co wspomniałeś, służą przede wszystkim rozejrzeniu się w branży i zrobieniu kosztorysów...
Co do dorabiania sobie, to mam kilka portali i firm na swojej czarnej liście. I tylko jedną firmę z którą pracowałem na umowę b2b. Więc jest pewna analogia prawda? Odesk tam nie ma. Jeśli chodzi o współpracę, też chciałbym polecić kilka firm. Co dla mnie się liczy w przyjmowaniu zleceń dodatkowych?
- punktualność i słowność klienta - to jest pierwsze, jeżeli jest klient, który umawia się ze mną na godzinę 15 czasu polskiego, i czekam na niego 15 minut extra, rezygnuje ze współpracy. Nie tracę swojego czasu na ludzi, którzy nie mają czasu dla mnie.
- terminowość płatności - to jest naważniejsze, teraz na przykład gość z Saudi Arabia płaci mi 60 usd za godzinę pracy dziennie, piszę dla niego testy 2 godziny dziennie, jeszcze tak się nie złożyło, żebym nie miał pieniędzy na paypal tego samego dnia.
- brak zmian w umowie w czasie jej trwania
- brak obietnic bez pokrycia. byłą firma, co jej prezes mówił, że mam niby umowę z nim, i że mi zapłacą, sprawa rozbijała się o ponad 4 tysiące. Wiesz po dwóch tygodniach zwodzenia, zadzwoniłem sobie do niego i mu powiedziałem, że już pieniędzy od niego nie chce i nie chce mieć z nim ani z jego firmą nic wspólnego, a jak mnie ktoś zapyta co o nim myślę, to po prostu to powiem. Po prostu nie chcę się z nim sądzić, nie chcę od niego pieniędzy, ale uprzedzam moich klientów przed tą firmą. Tylko mówię, że nigdy bym z tą firmą nie zrobił biznesu, bo są nierzetelni.
Oczywiście są wspaniałe firmy, Infosec Institute, Tandem Seven, LGBMS, Future Processing, Google, Microsoft, o których zawsze powiem jedno: Słuchajcie Ludzie, robicie coś wspaniałego. Z każdą z tych firm miałem okazję rozmawiać lub współpracować. I nawet rozmowa z tymi firmami, to niezapomniane przeżycie, a współpraca to bajka.
Acha i nie ukrywam że często pracuje na etat dla firm software. Obecnie planuję wejść w struktury jednej z nich. Etat nie przeszkadza mi w zleceniach, ale jak nie mam czasu na zlecenia, to robie dwa myki:
a) po pierwsze mówię gdzie pracuje na etat, a skoro ja tam pracuje, to firma jest świetna i złożcie im zapytanie ofertowe
b) mam zlecenie na analize malware i znam Dejana. Deajn to koleś ze Słowenii, zajmujący się analizą malware zawodowo, dzwonie do niego i się pytam czy by tego nie zrobił jako podwykonawca. Mam zlecenie na test penetracyjny jakiś DNSów, to dzwonie do Keatrona. Keatron Evans jest Bogiem jeśli chodzi o ataki na serwery nazw. Itd itd....To działa w obie strony, nieraz jest telefon z wysp, usa, kanady, rosji czy sloweni: Adi, masz już na mailu nasze hasła i loginy na konta w kilku bankach, napisz nam kilka bardzo wrednych wrednych BHO. Albo stoi stoi sobie pewien serwer apache, ciekawe czy znajdziesz jakiś trick na ich konfigurację? Rok temu znakomicie bawiłem się na wyspach z Keatronem Evansem, pewna firma płaciła nam 450 Funtów za godzinę naszej pracy.
Fakt faktem dobre zlecenia można dostać tylko i wyłącznie z polecenia kogoś. Obecnie się bawię w niedzielne wieczory pisaniem exploitów na smarty, też fajna zabawa i też z polecenia...
Na darmówkę w stylu: może chcesz poszerzyć portfolio nigdy nie pójdę i unikam, bo to zawsze jest bolesne...
Ostatnio pracowałem dla pewnej polskiej firmy, gdzie wydrukowali mi piekną ksozulkę z logiem firmy: "Jestem tak zaje... isty, że możecie się opalać w blasku mojej zaje...istości i tu pracuje: nazwa_firmy, ponieważ są prawie tak samo zaje..iści jak ja. ;) Co też trochę świadczy o moim ego, ale ego to piękna rzecz. Ego pozwala sobie stawiać megastyczne wyzwania, brać projekty wysokiego ryzyka, doświadczenie pozwala je kończyć.
Proste i logiczne, projekt wysokiego ryzyka i "zielony". i pytanie: co ja mam z tym kodem zrobić? (1 dzien w projekcie), oszacuj ile ci zajmie refaktoryzacja kodu pod siebie i refaktoryzuj swoją funkcjonalność, bo to jest twój kod i teraz jest to już twój problem i ty się z tym będziesz użerał następne 6 miesięcy do dwóch lat. Ale jeżeli twój kod nie przejdzie przez profilery, to zanim przyjdziesz i zapytasz, spójrz na ścianę, tam wisi umowa grupowa, a profiler ma tylko wprowadzone akceptowalne nazwy klas, zmiennych, funkcji i kilka reguł dla SOLID, TDD, BDD...
Elaborat jak zwykle. Ten post został edytowany przez Autora dnia 19.05.13 o godzinie 19:08 -
Aby mieć możliwość przeczytania tego posta musisz być członkiem grupy ABY POMÓC W 48 GODZIN
-
słuchajcie, a po co się uczyć języka? jak znasz obiektówkę i podstawy wzorców i reszte, to mądra firma będzie Ci co pół roku zmieniała projekt. Znaczy język w jakim jest pisany projekt i rzeczy którymi się będziesz zajmować. Ja zawsze jak mam zmianę projektu, to mam pytanie od firmy, w jakim języku nigdy nie pisałem i czego nigdy nie robiłem i przeważnie wpadam w jakiś dziki język i dzikie rzeczy. Pisałeś w Scala? Nie. Za tydzien jestem w projekcie w Scala. Projekt się kończy albo odczuwam ze mam dośc po pół roku, znowu rozmowa: pisałeś w Limbo? nie...Tak to się odbywa w większości firm. A jak widze projekt gdzie jest VisualStudio bez resharpera.....
Mam uraz psychiczny do Visual i C#, ale jak już jest resharper to ujdzie... -
Zrób badania rynku. Z tego co wiem, nie ma za dużo osób od pythona. Rynek jest przesycony ludźmi od C#, Java i PHP.
Jak chcesz, to mogę zapytać u siebie, czy nie potrzebują kolesia na godziny ze znajomoscią pythona. -
Dlatego w kwestii zleceń, ja całkowicie uciekłem na http://odesk.com. W sumie nie brakuje mi tam zleceń. Na rynku panuje brzydka sytuacja, że każdy uważa, że freelancer zrobi coś za półdarmo. Dla przykładu na odesk jestem dostępny dla klienta 2 godziny dziennie po pracy, klient płaci mi 60 usd za godzinę pracy ( taki przykład - stawki się wahają od 10 do 500 usd za godzinę pracy). Mam ochotę sobie napisać jakieś webdrivery czy testy jednostkowe za pomocą BDD po pracy, to svn klienta szaleje. średnio piszę 3, maksymalnie 4 webdrivery w tym czasie, o ile mam czas i mnie nie trzyma mój nowy pracodawca, bo akurat jest ważny projekt.
Osobiście na zlecenia w Polsce bym się nie zdecydował. Nie jestem sadomasochistą. Tym bardziej nie zdecydowałbym się na samo freelancerstwo. Jak chcecie zbudować portfolio, polecam Wam odesk. Po pierwsze nikt Was nie oszuka na pieniądze, bo to portal wam płaci i portal wystawia faktury klientowi. Po drugie, tam jest tyle różnych zleceń, że spokojnie coś znajdziecie. -
Tak, teraz jest to bardzo dobrze zrobione. Do tego zwiera obsługę wyjątków. Ja bardzo szybko jak piszę coś na szybko, zapominam o wyjątkach. Wyjątki naprawdę ułatwiają testowanie aplikacji. Powiem Ci tak, teraz w końcu rozumiem twój kod. Takie podejście ułatwia i code review i całą resztę.
Ja mam takie jedno jeszcze pytanie Darek. Czy znasz może jakieś frameworki testowe do Pythona? Coś takiego, żeby zrozumienie zasad działania nie zajęło więcej niż godzinę? Sorry, że mówię cały czas o testach, ale lubię je pisać.
Dla mnie osobiście pisanie testów sprawdzających jest o wiele bardziej wciągające niż pisanie kodu. Wiesz takie spaczenie. Ps. Darek, jak szukasz zleceń i znasz dobrze angielski, polecam ci http://odesk.com, wspaniałe narzędzie do pracy zdalnej, a testy kompetencyjne pozwalają Ci pogłębić wiedzę. Testy kompetencyjne to najważniejsze z odesk w sumie. -
Dlatego nigdy nie startuje na Deva. To by było jawne przegięcie. Runner się przydaje do dwóch rzeczy:
Rozezdziela idealnie to co mówiłem. jest małym oszustwem, jeżeli chodzi o komunikacje miedzy warstwami. Ale to taka mala dygresja. Runner ma dostęp do wszystkich warstw aplikacji, natomiast wiesz jak się normalnie komunikują warstwy. nie startuje nigdy na Deva, bo to jest jawne przegięcie... -
Gdy mama mówi "wróć trzeźwy z imprezy" mówię jej wtedy tak... ;D http://t.co/AQO4G4uxJc
- 16.05.2013, 23:05
-
ma prawo miec main, bo main odcinasz, toż mówie svn 7 rewizja :P a z ifami masz racje. Mówię 7 rewizja :P, runner to coś w formie mocka tak samo jak main :P coś co ma być szybko odpalone według specyfikacji. Zresztą co do samego kodu, podobał się. Skoro się podobał, był wysatrczający. Klient nasz pan. Stara rewizja :P
doesUserDecideToStart() nazewnictwo jest zajebiste ma miec zapis algorytmiczny i tyle.
Dałem coś, co mogłem pokazać, tyle w temacie. To jest kod, jaki można pokazać za darmo. W większości przypadków taki sampel wystarcza. A runnery jeśli działają na zasadzie wzorca fasadowego są naprawdę cool.
To jest takie małe oszustwo, które zawsze sie stosuje. w C++, c#, etc etc. runner pozwala szybko uniezależnić pomniejsze funkcjonalności od większej.
klasa finalna runnera i tak przeszła refaktoryzacje, ponieważ lamie solid i to jak ch...Ten post został edytowany przez Autora dnia 16.05.13 o godzinie 22:47 -
Ta dyskusja pokazała mi jedną rzecz, ludzie którzy mają komercyjne doświadczenie biją na głowę programistów freelancerów. Ale też jest jeszcze jedna rzecz. Ludzie z komercyjnym doświadczeniem nie pracują sami. I to jest już inna sprawa. Pokaże Ci kawałek mojego kodu, sam tylko runner jednej z dużych funkcjonalności, taka super wczesna wersja:
import core.ApplicationRunner;
public class HashingLibrary {
/**
* @param args
*/
public static void main(String[] args) {
ApplicationRunner applicationRunner = new ApplicationRunner();
applicationRunner.runApplication();
}
}
package core;
import registration.RegistrationRunner;
import core.logic.InitializeSoftwareState;
import core.logic.UserDecisionToStart;
import core.ui.SoftwareDecisionFromUser;
import core.ui.SoftwareStateFromUser;
public class ApplicationRunner implements ApplicationRunnable,
SoftwareDecisionFromUserAble,
UserDecideToStartAble,
GetSoftwareStateFromUserAble,
InitializeSoftwareStatable{
boolean setUserDecisionToStart;
@Override
public void runApplication() {
String softwareDecisionFromUser = getSoftwareDecisionFromUser();
if(doesUserDecideToStart(softwareDecisionFromUser) == true){
String passedData = getSoftwareStateFromUser();
String state = initializeSoftwareState(passedData);
softwareStarts(state);
}
else {
System.exit(0);
}
}
private void softwareStarts(String state) {
switch(state){
case "ResgistrationState":
RegistrationRunner registrationRunner = new RegistrationRunner();
registrationRunner.run();
case "QuitState":
System.exit(0);
break;
default:
runApplication();
}
}
@Override
public String getSoftwareDecisionFromUser() {
SoftwareDecisionFromUser softwareDecision = new SoftwareDecisionFromUser();
String softwareDecisionFromUser = softwareDecision.message();
if((softwareDecisionFromUser.equals("Yes") == true) || (softwareDecisionFromUser.equals("No") == true)){
return softwareDecisionFromUser;
}
return null;
}
@Override
public boolean doesUserDecideToStart(String softwareDecisionFromUser) {
if(softwareDecisionFromUser == null){
runApplication();
}
UserDecisionToStart userDecisionToStart = new UserDecisionToStart();
setUserDecisionToStart = userDecisionToStart.whatIsTheDecision(softwareDecisionFromUser);
return setUserDecisionToStart;
}
@Override
public String getSoftwareStateFromUser() {
SoftwareStateFromUser softwareStateFromUser = new SoftwareStateFromUser();
String getSoftwareStateFromUser = softwareStateFromUser.message();
return getSoftwareStateFromUser;
}
@Override
public String initializeSoftwareState(String passedData) {
InitializeSoftwareState initializeSoftwareStatus = new InitializeSoftwareState();
String userPassedData = initializeSoftwareStatus.initializeSoftwareState(passedData);
return userPassedData;
}
}
To jest taki prosty sampel. I przykładowe testy w jUnit:
package core.tests;
import static org.junit.Assert.*;
import org.junit.Test;
import core.ApplicationRunner;
public class ApplicationRunnerTestinitializeSoftwareState {
@Test
public void ApplicationRunnerLoginStateTestTrue() {
ApplicationRunner applicationRunner = new ApplicationRunner();
String enteredValue = "Login";
String expectedValue = "LoginState";
boolean logicValue = true;
assertEquals(logicValue, applicationRunner.initializeSoftwareState(enteredValue).equals(expectedValue));
}
@Test
public void ApplicationRunnerRegistrationStateTestTrue() {
ApplicationRunner applicationRunner = new ApplicationRunner();
String enteredValue = "Registration";
String expectedValue = "RegistrationState";
boolean logicValue = true;
assertEquals(logicValue, applicationRunner.initializeSoftwareState(enteredValue).equals(expectedValue));
}
@Test
public void ApplicationRunnerQuitStateTestTrue() {
ApplicationRunner applicationRunner = new ApplicationRunner();
String enteredValue = "Quit";
String expectedValue = "QuitState";
boolean logicValue = true;
assertEquals(logicValue, applicationRunner.initializeSoftwareState(enteredValue).equals(expectedValue));
}
@Test
public void ApplicationRunnerNullStateTestTrue() {
ApplicationRunner applicationRunner = new ApplicationRunner();
String enteredValue = "Anything or something";
String expectedValue = null;
assertEquals(expectedValue, applicationRunner.initializeSoftwareState(enteredValue));
}
}
package core.tests;
import static org.junit.Assert.*;
import org.junit.Test;
import core.ApplicationRunner;
public class ApplicationRunnerdoesUserDecideToPlaylogicalTests {
@Test
public void doesUserDecideToPlaylogicalYesTestsTrueiSTrue() {
ApplicationRunner applicationRunner = new ApplicationRunner();
String userDecision = "Yes";
boolean expectedValue = true;
assertEquals(expectedValue, applicationRunner.doesUserDecideToStart(userDecision));
}
@Test
public void doesUserDecideToPlaylogicalTestsYesTrueiSFalse() {
ApplicationRunner applicationRunner = new ApplicationRunner();
String userDecision = "Yes";
boolean expectedValue = false;
assertEquals(expectedValue, applicationRunner.doesUserDecideToStart(userDecision));
}
@Test
public void doesUserDecideToPlaylogicalTestsNoFalseiSTrue() {
ApplicationRunner applicationRunner = new ApplicationRunner();
String userDecision = "No";
boolean expectedValue = false;
assertEquals(expectedValue, applicationRunner.doesUserDecideToStart(userDecision));
}
@Test
public void doesUserDecideToPlaylogicalTestsNoTrueiSFalse() {
ApplicationRunner applicationRunner = new ApplicationRunner();
String userDecision = "true";
boolean expectedValue = true;
assertEquals(expectedValue, applicationRunner.doesUserDecideToStart(userDecision));
}
}
To jest tylko szybki neidpracowany sampel majacy oznaczenie 7 na historii rewizji. Soft ma 6 tysiecy rewizji, to jest coś co rozwijam dla kogoś już trochę. -
Jeszcze podziel na warstwy i jest gitara. Mnioe boli jeszcze ten main(). To nie powinno nic robic, tylko z jakiejs warstwy core wywołać runner. Darek ja się może czepiam, znaczy ja się zawsze czepiam, ale teraz dodaj do tego jeszcze generowanie XML? Dodałeś?
To dodaj do tego zapis wyników do bazy i odczyt z bazy ....
Dlatego nie zajmuje się programowaniem zawodowo. Programowanie jest stosunkowo proste w porównaniu z dbałością o jakość wykonania oprogramowania. A ja uwielbiam wyzwania. A teraz idę sobie CV aktualizować :)