Konkurs z Autentika.pl – wygraj Smashing Book #3!

Kolejny raz Autentika.pl podchodzi do rekrutacji w sposób, w jaki powinno się to robić. Zgłosił się do mnie Michał Samojlik, prezes firmy, z pomysłem, by zorganizować jakiś fajny konkurs towrzyszący kampanii rekrutacyjnej – Autentika szuka bowiem dobrego front-endowca, a poprzednia edycja zabawy usatysfakcjonowała obie strony. Michał i jego zespół mają dla Was do wygrania papierowe wydanie książki Smashing Book #3 (plus ebook), a ja od siebie dorzucam jeszcze Responsive Web Design oraz Head First Design Patterns. Zapraszamy wszystkich do wzięcia udziału w konkursie, a poszukujących pracy z kolei do nadsyłania CV do Autentiki, to naprawdę dobra firma.

Zadania są dwa. Można wybrać jedno dowolne lub wystartować w walce o dwie książki jednocześnie.

Wygraj Smashing Book #3!

Aby wygrać Smashing Book #3 należy zaimplementować wzorzec Observer, aby możliwa była realizacja podobnego API:

var observable = new Observable();
observable.addEventListener("change:title", function(data) {
	console.log("title has changed to ", data.title);
});
observable.trigger("change:title", { title: "foo" }); // "title has changed to foo"
observable.trigger("change", { title: "bar" }); // "title has changed to bar"

oraz

var observable = new Observable();
var anotherHandler = function() {
	console.log("I'm another handler');
};
var handler = function(data) {
	console.log("removing my friend");
	observable.removeEventListener("change:title", anotherHandler);
};
observable.addEventListener("change:title", handler);
observable.addEventListener("change:title", anotherHandler);
observable.trigger("change:title", { title: "foo" }); // "removing my friend"

Zwycięży wybrana przeze mnie implementacja. Kryteria, jakimi będę się kierował to jak największa możliwość ponownego użycia kodu w różnych scenariuszach (mixiny, klasy, moduły etc.), jakość i dobra dokumentacja. Wydajność i obsługa błędów będą również dla mnie bardzo ważne. Ewentualne pytania proszę zadawać w komentarzach.

UPDATE

Zwariowałem, dla zwycięzcy dorzucam jeszcze Head First Design Patterns!

Wygraj Responsive Web Design!

O Responsive Web Design walczyć można natomiast rozwiązując następujące zadanie. Należy otóż obliczyć, który to z kolei tydzień w roku (zakres od 01.01.1970 do 18.01.2038) według ISO-8601 na podstawie przekazanego obiektu Date. Pomysłodawcą zadania jest Rafał Kukawski.

var d = new Date("1970-01-01");
getWeek(d); // 1
var d = new Date("1970-12-30");
getWeek(d); // 53

Zwycięży autor najkrótszego kodu. Sygnatura funkcji ma wyglądać następująco:

var getWeek = function(d) {// Twoj kod };

Mierzona będzie liczba znaków (w tym białych) w obrębie ciała funkcji (zaznaczone przez „Twój kod”). Kod może używać ECMAScript 5.

Czas trwania konkursu to 2 tygodnie od czasu publikacji tej notki. Wyniki należy przesyłać w formie linków do serwisów, które umożliwiają dzielenie się kodem (gisty, jsFiddle, jsbin, pastie itd.) na maila me@varjs.com o tytule „Konkurs Autentika.pl”. Wszystkie snippety powinny być ustawione jako prywatne.

Komentarze

1


var d = new Date("1970-12-30");
getWeek(d); // 52

A nie 53?

jagm
2

var getWeek = function() {// Twoj kod };

a nie function(d)? czy jednak trzeba będzie się męczyć z arguments[0]? ;)

Krystian Jarmicki
3

Oczywiście, że function(d). Moje przeoczenie, thanks!

4

Tak, 53. Fixed

5

To według ciebie front end to tylko JavaScript? Czy jak ktoś ma background programistyczny to od razu znaczy, że będzie dobrze „ciął”?

bayes
6

Nadinterpretujesz. Chcesz wygrac, rozwiazujesz zadania (tym razem sa z JS, bardzo proste). Chcesz pracowac w Autentice, wysylasz CV. To sa dwa zbiory rozlaczne.

7

Czy daty mogą mieć niezerowe godziny/minuty/sekundy/mili? Czy można zaśmiecać namespace (tj. czy trzeba używać lokalnych)?

jakubmal
8

1. Nie mogą
2. Bez zmiennych globalnych.

9

Czy można modyfikować definicję f-cji? Np.:


var getWeek = function(d,e,f,g,h,i,j) {// Twoj kod };

10

Nie.

11

W zadaniu z getWeek chodzi o liczbę porządkową tygodnia w rozumieniu wiersza w kalendarzu od poniedziałku do niedzieli?


getWeek(new Date("1970-01-04")) // powinno zwrócić 1?
getWeek(new Date("1970-01-05")) // powinno zwrócić 2?

aenain
12

Wszystko ma byc wyliczone wedlug ISO 8601 – http://en.wikipedia.org/wiki/ISO_8601

13

Czy możemy założyć, że data jest w UTC?

Lustmored
14

Czy zdarzenia złożone związane ze zmianą atrybutu, np. change:atrybut, mają funkcjonować jedynie z prefixem ‚change’?

m1chal_p
15

@Lustmored: tak

@m1chal_p: prefix mozna podac dowolny, nie tylko „change”.

16

Czy obiekt d może ulec modyfikacji wewnątrz funkcji getWeek, czy też getWeek ma go traktować jako „read-only” i zostawić w spokoju?

17

Można wysłać więcej niż jedno rozwiązanie problemu?

majki
18

Olek: nie, ma byc read-only.
majki: tak, ostatnie wyslane sie liczy

19

Czy w drugim zadaniu można używać zdeprecjonowanych metod obiektu Date?

Piotr T
20

nie można

21

[…] ogłosić wyniki konkursu z Autentika.pl! Tym razem największą popularnością cieszyło się zadanie z datami, natomiast […]

Dodaj komentarz

Dozwolone tagi: <blockquote>, <code>, <strong>