Dan hakovanja obrazovanja i moja prva iOS aplikacija

Moj početak sa iOS

"Blesavo je da sam ja jedini u timu koji zna kako iOS aplikacija radi". Ovo nije bio prvi put da je Dave predložio da se upoznam sa Shortmail iOS aplikacijom. Ali ovaj put je bilo drugačije, to je više bila strateška komanda. "Hajde da se malo pozabavimo testiranjem, kako bismo sa sigurnošću mogli da počnemo rad na verziji 1.1". Tako sam se odmah obavezao da provodim nekoliko sati dnevno u upoznavanju sa aplikacijom i Xcode-om.

Te noći (četvrtak), počeo sam da čitam "SDK osnove" odeljak prvog izdanja "iPhone u akciji". Knjiga je sada skoro tri godine stara, a čak i ne pominje iPhone 3GS (koji je pušten u leto 2009.). Ali, iako su novi hardver i SDK verzije dolazile i odlazile, osnove se nisu promenile. To je kopija koju imam, pa sam nastavio sa čitanjem.

Mada danas prvenstveno pišem veb aplikacije na interpretiranim jezicima, imam istoriju pravljenja UI korišćenjem GUI alata. Pravo iz škole, pravio sam Motiv GUI na Sun radnim stanicama, sa samo delimičnim semestrom Borland C ++ iskustva, kao podrška mom znanju u pravljenju korisničkog interfejsa. Takođe sam proveo nekoliko godina gradeći Windows aplikacije pomoću poštovanog Microsoft Visual Studio-a, za koji sam u to vreme mislio da je najbolja stvar ikada. Najskorije (što zaista nije tako skoro), napravio sam par Java Swing aplikacija, od kojih nijedna nikada nije videla svetlost dana, ali je barem bilo zabavno raditi na tome. Takođe mi je ugodno da pravim aplikacije pretraživača vođene događajem u JavaScript-u, koje su slične njihovim rigidnijim pandanima, ali nažalost to je sve previše lako lažirati, a ne napraviti u čistom GUI stilu vođenom događajem.

Tako da je čitanje tih odeljaka "iPhone u akciji" bilo čudno utešno. Svakako, jezik (Objective-C) je bio nov za mene, ali su koncepti bili poznati. Tvitovao sam

Dan hakovanja obrazovanja

Na čemu raditi?

Volim dane hakovanja . Uživam u otkrivanju problema na visokom nivou, a zatim u sastavljanju najboljih tehnologija za njegovo razrešenje. Ponekad, rešenje je samo mala skripta, ponekad je to veb aplikacija, a nekad je to sistem sa mnogim pokretnim delovima. Mrzim da vidim da male probleme rešavaju sa velikim rešenjima, i uživam u razbijanju velikih problema na male komade da bih ih lakše napadao.

U dane pravljenja-vašeg-sopstvenog-hakerskog tima kao što je Dan hakovanja obrazovanja, ja obično težim ka timovima koji se trude da reše određeni problem, pre nego ka onima koji pokušavaju da izgrade nešto veliko kao "sledeći Facebook". Ograničenje zbog posedovanja samo jednog dana (ili vikenda) je često suviše ograničavajuće za izgradnju industrijski-snažnog, raznovrsnog rešenja. Takođe težim timovima gde mogu napraviti neposredan uticaj, i volim timove koji još uvek nemaju programera kao što sam ja - svaka ekipa zaslužuje solidnog programera, nema potrebe da se udvostručujemo.

Izbor tima

Video sam teren. Pročitao sam opise. Zamešao sam neke od projekata sa Lokesh-om, i složili smo se da bi bilo zabavno da radimo zajedno. Onda smo se podelili i lutali po sobi. Bio je tu Tedov projekat, aplikacija "Zvučna tabla" za autističnu decu. On je već bio regrutovao dva programera. Postojala je Mike Brenner-ova aplikacija, veb aplikacija sa planiranom Tropo integracijom. Izgledalo je zanimljivo, a ja volim da radim sa Mike-om i Mark Headd-om - ali oni su već imali regrutovanog programera za izgradnju. Lokesh je težio malom veb projektu da bi omogućio kuratorstvo veb sadržaja. Nastavio sam šetnju. Hteo sam da izgradim iOS aplikaciju.

Opcije

Mnogi od ovih projekata mogu potencijalno imati iPhone ili iPad komponentu. Očigledno, učionice su ovih dana često ispunjene studentima koji koriste iPad, tako da su mnogi od tih projekata odabrali iPad Safari mobilni pretraživač kao ciljnu platformu. Neki od ovih projekata mogu da se napišu kao maternja iOS aplikacija! Pregledao sam sobu još jednom.

Moj teren

Primetio sam da Andrew razgovara sa Donald-om i Ronin-om. Oni su bili duboko u diskusiji o tehničkim aspektima daljinske kontrole Safari na iPad-u. Ime projekta, kao škrabotina na velikom komadu papira zalepljeno na prozoru, piše "Nastavnička aplikacija za kontrolu". Ovo bi moglo da bude iOS aplikacija, pomislio sam. Nakon slušanja njihovog razgovora oko ideja, ja sam napravio svoj cilj. "Mislim da bi studentski deo ovog projekta trebalo da bude maternja iPad aplikacija, da ih drži podalje od interakcije sa url trakom i ne odvlači im pažnju. Trebalo bi da znate, nikada ranije nisam izgradio iPad aplikaciju, ali sam uveren da mogu da izgradim ovu i voleo bih da pomognem vašem timu.”

Izgledali su zainteresovani - posebno Andrew. Imao je poverenja u naš tim, tako da smo se svi složili da počnemo da radimo zajedno.

Posle malo diskusije, počeli smo da identifikujemo naše uloge - kao gimnazijski nastavnik, Andrew bi vodio projekat i bio produkt menadžer. Donald, veb programer, bi pravio nastavničku veb aplikaciju i pozadinu. Ronin, MICA student, bi radio sve u vezi dizajna. Ja bih izgradio iPad aplikaciju koji bi studenti koristiti.

Projekat

Nazvali smo ga “Luka”. To je sigurna aplikacija koja se instalira na iPad učenika umesto Safari (edukatori često koriste funkcije "ograničenja" na iPad-u da onemoguće aplikacije kao što su YouTube i Safari). Nastavnici mogu da "ubace" listu veb URL-a na svim iPad-ima, a studentima na času bi bilo dozvoljeno da pregledaju te sajtove, ali ne i druge. Sistem bi mogao da bude proširiv, tako da i druge komande osim veb URL adrese mogu biti ubačene u grupu iPad-a, omogućavajući bolju kontrolu - karakteristike kao što su "svi gledaju ovu stranu" ili "onemogući sve iPad-e".

Odlučili smo da bi bilo moguće, za vikend imati jednostavnu veb aplikaciju gde nastavnik može uneti url adrese i ubaciti ih u njihovu grupu iPad-a. Aplikacija bi prikazala učenicima taj spisak url-ova, i omogućila im da ih pregledaju. Minimalne karakteristike - prilično jednostavno i dostižno.

Kodiranje

Počeo sam Xcode projekat malo posle podneva u subotu. Kratko smo raspravljali koji tip aplikacije će trebati studentima - možda veb pregled sa karticama za url adrese? Ili možda aplikacija dvostrane navigacije, sa listom url adresa, a jednim veb pregledom? Odlučio sam se za jedan veb pregled, sa iskačućom listom url adresa (slično iPad Mail aplikaciji u portretnom režimu). To su dva pregleda, sa malo server-komunikacije. Koliko teško može da bude?

Koliko teško? Skoro sam odustao 5 puta

U subotu, proveo sam skoro 12 sati rada u Xcode-u, dodajući metode povratnih poziva, učeći kako da povežem dugmiće sa upravljačima događaja i pokušavajući da koristim Restkit za konzumiranje JSON sa veb servisa. Guglovao sam za sve što mi je bilo potrebno, našavši mnoge rezultate iz blogova Shawn Grimes' i Ray Wenderlich Naučio sam o kvalitetu Apple SDK Docs. Bilo je trenutaka kada sam želeo da odustanem - bio je vikend, odlične fudbalske utakmice na televiziji, prijatelji s kojima bih se mogao videti, voziti bicikl. Dok sam se zamajavao mislima o odustajanju i odlasku do lokalnog bara, pomislio sam šta bi moje kolege mislile o tome. A onda sam zamislio kako bi izgledala sledeća radna nedelja, kada bih ponovo kopao po iOS da radim na Shortmail-u. Tako da sam istrajao.

U 1 sat u subotu uveče, nakon pisanja ove linije koda,

NSString *requestUrl = [[baseUrl stringByAppendingString:@"/"]
    stringByAppendingString:teacherId];

... Bio sam više nego zgrožen. U Ruby, ta linija bi bila:

requestUrl = "#{baseUrl}/#{teacherId}"

I onda sam pokrenuo svoj nedavno napisan Restkit kod da dobijem JSON i mapiram ga na objekat, i ... nije uspelo. Bio sam frustriran. I iscrpljen. U tom trenutku, doneo sam najbolju odluku koju sam mogao: otišao sam u krevet. Sa glavom na jastuku, sanjao sam o svežem danu, kafi u ruci, debagovanju Restkit koda koji sigurno nisam bio prvi koji je napisao.

Preokret

Sledećeg jutra, posle čvrstih 7 sati sna, probudio sam se uzbuđen. Odmah sam se bacio na debagovanje Restkit koda, a zatim, iz hira sam guglao za ostalim iOS JSON okvirima. Našao sam SBJson, zajedno sa nekim vrlo jednostavnim primerima koda. To je bila poslednja velika funkcija koja je bila nepotpuna (već sam bio napravio veb pregled, i URL listu), pa sam pocepao Restkit kod, instalirao SBJson i kodirao zahtev. Odmah sam uspeo i dan je odlično počeo.

Funkcioniše!

U srednjoj školi, drugog dana Hakovanja obrazovanja (vikend) , rekao sam timu o mom napretku. Pokazao sam im aplikaciju, i naše uzbuđenje je raslo. Samo je trebalo integrisati iOS aplikaciju sa veb aplikacijom za nastavnike, i dodati neke ikone na iPad da bi izgledalo uverljivo. Donald je ubacivao adrese u CloudMine, pa sam samo morao da izmenim svoj zahtev da se bavim time. Ronin je bio zauzet izradom idejnog umetničkog projekta, sada pod nazivom "Digitalna luka", koja je uglavnom sadržala slike plavičaste talasaste vode pod debelim belim tekstom. Instalirali smo ikone i početne ekrane, ja sam dodao neke detalje, Ronin je sačinio prezentaciju bogatu frazama i slikama, i bili smo uvereni da ćemo imati odličnu demonstraciju.

I imali smo.

Krajnji rezultat

"Digitalna luka" je izglasana za prvo mesto od sudskog veća. Projekat kuratorstva veb sadržaja na kojem je Lokesh radio je izglasan drugi, veliki poduhvat ocenjivanja škola i studenata bio je treći, a Mike-ova aplikacija zakazivanja automatizovanog telefonskog poziva roditelj / učitelj je izglasana četvrta. Stvarno sam ponosan na tim u kome sam bio - uradili smo veliki posao identifikacije rešivog problema, a onda ga napali sa onim veštinama u kojima je svako od nas bio najbolji.

Sada mogu nazvati sebe iOS programerom.

Ali krajnji rezultat je za mene mnogo više - ja sada mogu nazvati sebe iOS programerom. Pre ovog vikenda, Xcode i iPhone aplikacije su bile crna kutija - znao sam taman dovoljno o tome kako oni rade za inteligentan razgovor o njima, ali njihova izgradnja je bila potpuno drugačija stvar. Uradio sam to za vikend, a možete i vi.

Moj kod je neuredan. Pogledajte. Siguran sam da radim stvari na pogrešnim mestima. Ja sam siguran da pregledi koje sam izabrao verovatno nisu najbolji izbor. Ali, kao što mi je Anthony Maddox rekao u nedelju uveče, "Moje prve iOS aplikacije su takođe bile aljkave."

Radujem se izgradnji još aplikacija, samo radi zabave, da naučim druge delove alata. Radujem se preispitivanju Luke nakon malo više iskustva, da refaktorišem hakerski kod u više održivu i proširivu formu. Planiram da učim više o testiranju, i o objektima testiranja jedinica, kao i o integraciji testiranja cele aplikacije. Pazi se App Store, mislim da sam navučen.

Hvala

Dugujem zahvalnost gomili ljudi što su učinili zabavnim ovaj vikend, tako da, po neodređenom redosledu:

  • Anthony Maddox - za pokazivanje kako se povezuje dugme za akcioni metod, i za pomoć tokom subote uveče: težak period vikenda za mene
  • Shawn Grimes - za prisustvo u sobi. Nisam uopšte zapitkivao Shawn-a i njegovu suprugu previše iOS pitanja, ali znajući da ste bili tamo zaista mi je pomoglo.
  • Mike Brenner - za organizovanje odličnog vikenda, kao i uvek. (Zahvaljujem Heather takođe, za ishranu svih gladnih hakera)
  • Scott Messinger - za ko-organizaciju, i inspirisanje nas da uradimo sve što je potrebno da se to obavi
  • Lokesh Dhakar - uvek je zabavno družiti se, možda ćemo jednog od ovih dana izabrati isti projekat
  • Ted O"Meara - za podsticanje da radim na iOS projektu, iako ste pokušavali da me regrutujete da pomognem u Vašem
  • Mark Headd - za to što ste uvek bili neko koga programeri mogu pozvati (vidite šta sam ja tamo postigao?)
  • Ilya Braude - za povezivanje Donald-a sa CloudMine. To je zaista ubrzalo naš razvoj, i bilo je zadovoljstvo upoznati Vas. Sviđa mi se usluga! (Napravljeno u Filadelfiji)
  • Andy Mangold – zbog nošenja žute kape celog vikenda
  • Michael Rosner - za inspirisanje svih nas pokazujući nam svoje kasne noćne hardver projekte

Tim “Digitalna luka”

  • Andrew Coy - hvala za verovanje u moje sposobnosti, iako smo se tek upoznali
  • Ronin Wood - za dokazivanje da je pesma broj 3 " Watch the Throne " “ rep pesma godine "
  • Donald Abrams - za brzu podršku iOS aplikacije sa jednostavnim pozadinskim API, i za putovanje skroz iz Delaware-a zbog hakovanja!