Nobody.lv v6.0.0 v6.1.0 [papildināts #2]

Jānis Rubļevskis (koko) // 2016. gada 13. janvārī, 19:52 // #Datori // 7 komentāri 

Nobody logo

2014. gada 17. oktobrī rakstīju par jauno bloga versiju. Pieminēju arī, ka turpmākos gadus nekas nemainīsies. Ir pagājis tikai nedaudz vairāk kā gads un tomēr es esmu vēlreiz pieķēries klāt savam blogam un mainījies ir tik daudz, ka varu nosaukt sistēmu atkal jaunā versijā - v6.0.0.

Jaunumi, ko saprot normāli cilvēki

Mārtiņš AKA KIC man ir uzzīmējis logo. Vairāk kā divpadsmit gadus esmu blogojis bez sava logo, bet tas nu beidzot ir noticis. Laikam nedaudz jāpaskaidro arī logo leģenda, lai cilvēki saprot: tā kā es esmu web programmētājs, tad logo pamatā tika ņemts HTML satura ķermeņa aizverošais tegs /body. Tiklīdz ieraudzīju, uzreiz iepatikās. Ceru, ka jums arī patīk. Ja nē, tad paturiet to pie sevis.

Pie reizes Mārtiņš nedaudz piepalīdzēja ar to, lai blogs paliek tīrāks. Automātiski tika apgraizītas pirmās lapas bildes. Turpmāk es rūpēšos, lai šīs bildes būtu daudz maz pielāgotas tā, lai tik sūdīgi neizskatītos arī pirmajā lapā, līdz ar to nu jau tikai deviņu rakstu garumā būs jāpiecieš pikseļainums.

Nākaimais, un šis attiecas uz ātro kredītu reklamētājiem, esmu blogā ieviesis bleklista sistēmu. Turpmāk visi linki, kas vedīs uz kādu no ātro kredītu un/vai ātro kredītu reklamēšanas lapām, tiks aizstāti ar linku uz ziedot.lv. Līdz ar to esmu noņēmis arī rel=nofollow, kas bija negodīgi pret tiem retajiem, kas mani komentē un atstāj saiti uz savu lapu.

Sakarā ar to, ka Twitter ir izdomājis, ka viņiem balonveidīgā poga vairs nav vajadzīga, pielāgoju dizainu visām šāres pogām. Tagad feisbukpogai ir ne tikai like, bet arī share, kas gan nevienu īpaši nekrata, jo no lapas es neesmu manījis, ka kāds laikotu vai šārētu.

Jāatzīst, ka ieteikumus komentāros negaidu, jo nekad visiem neizpatiksi, taču vienmēr ir patīkami, ja pamana un izsaka savu viedokli.

Tagad nedaudz tehniskās lietas

Tā kā manu blogu lasa arī daudzi tehniski orientēti cilvēki, tad pastāstīšu par tām lielajām izmaiņām, kas skārušas blogu servera pusē. Var teikt, ka pilnīgi viss ir pārrakstīts no nulles, bet tā būs plika diršana - esmu vienkārši nomigrējis no Laravel 4.x (L4) uz Laravel 5.x (L5). Pastāstīšu, kas tad ir mainījies, ar kādām problēmām saskāros un līdzīgi. Migrēšana nenotika tieši tādā secībā kā es te rakstīšu par fīčām, bet nu būs vismaz poņa, ar ko es saskāros.

Ievadam nedaudz pastāstīšu par savu vēsturi ar Laravel, kas ir PHP freimworks, ko izmantoju pēdējos 4 gadus savos lielākajos un reizēm arī nedaudz mazākos projektos, jo ir foršs. No Laravel 3.x (L3) neko uz L4 es migrējis neesmu, jo L4 ieviesa tik daudz izmaiņas, ka vieglāk visu bija sakodēt no nulles. Uzskatu, ka tā ir joprojām, kaut arī gabalus no vecajiem kodiem var izmantot, taču vien tas, ka no underscore kodēšanas stila (lai kā arī to sauc) tika viss migrēts uz kamieļstilu (neimspeisiem underscore nepatīkot tik ļoti), nozīmē ļoti daudz koda refaktorēšanas. Līdz ar to - nebiju mazaohists.

Tagad situācija ir "nedaudz" mainījusies.

Assetu menedžēšana

Uzreiz pēc tam, kad pārprogrammēju šo blogu uz L4, rakstīju par to, kā es menedžēju assetus. Lieta tāda, ka L4 pilnībā bija izravētas visas asssetu menedžēšanas lietas, tāpēc nācās izdomāt jaunu zinātni. Tagad situācija ir mainījusies par 100%. Laravel ir ieviesuši tādu sistēmu kā Elixir, kas izkonkurē visu, ko es pats iepriekš esmu lietojis. Protams, tas ir uz NodeJs balstīts un ievelk savus 130 mb koda, taču tas produkcijā neparādās - produkcijā parādās tikai smuks versionēts assetu kods (protams, ja pirksti nav galīgi līki). Tā nu lielāko tiesu laika pavadīju tieši pie bibliotēku sakārtošanas.

Plusi tādi, ka viegli salikt kopā to, ko vajag salikt kopā. Es, piemēram, izstrādē izmantoju jaunākos libus, ko esmu ievilcis ar Composer, taču publiski vendors mape nav pieejama - tad nu Elixir palīdz sakārtot arī šīs lietas.

Templeiti (blade)

Nav tā, ka Blade iepriekšējās Laravel versijās būtu sūdīgs, taču strādāšana ar layoutiem bija bieži vien apgrūtināta un reizēm pat caur melno caurumu - sevišķi tad, ja vienā projektā vajadzēja izmantot vairākus dažādus lajautus. Tad nu tagad Blade ir vienkārši perfekts. Nesaprotu kā es agrāk varēju (atvainojiet manu franču valodas izrunu) pisties ar html kodu un tjūnēšanu. Tagad viss ir tik ļoti vienkārši, ka akvaidies nogrābsties

Pie reizes arī jāpiebilst, ka ļoti atvieglota HTTP kļūdu paziņojumu kustomizācija. Vienkārši pie skatiem (viewserrors mapē jāiemet templeits, kas sākumā satur kļūdas kodu, piemēram, 404.blade.php. Tiklīdz tāds fails būs sistēmā, kļūdas tiks parādītas caur to. Kruta (uzskatāms piemērs ir manas lapas 404).

Te nu sākās (manā gadījumā) lielākā pārrakstīšana, jo šoreiz layoutus nemenedžēju kontrolieru pusē, bet gan pašos templeitos. Ekstendošana un Inklūdošana ir vienkārši supper. Tāpat ļoti iepatikās sekcijas un tas, ka sekcijām var pārrakstīt defaultās vērtības tikai tad, ja to vajag. Nenormāli ērti, ja vajag pielikt papildus klases templeitā, norādīt headā dažādus no sadaļas atkarīgus meta datus un līdzīgi.

Modeļi un Kontrolieri

Smagākais, kas mainījās L5, bija tas, ka tika pilnībā pārstrādāta failu struktūra, līdz ar to dažādus failus tagad jāliek dažādās vietās, bet pie tā ātri pierod un reizēm pat varēju saskatīt tajā visā loģiku. Tas viss laikam jau tika darīts tāpēc, lai sakārtotu tā saucamos neimspeisus. Tad nu sākas arī lielākais MonkeyJob, jo ir jāpielāgo visi pašprogrammētie faili. Protams, varēja iet arī vieglo ceļu un ielikt visu direktoriju classmaps composer.js konfigurācijā, bet tad jau nebūtu jēga migrēt. 

Tātad modeļi tiek likti app direktorijā un manto App neimspeisu, kas ir loģiski, jo tiem jābūt pieejamiem visā programmā.

Kontrolieri, savukārt, atrodas zem App/Http/Controllers neimspeisa, kas arī ir loģiski.

Ņemot šo visu vērā, jāizskrien cauri visiem failiem, jānorāda tiem pareizo neimspeisu un jāieimportē attiecīgos moduļus (vai arī jāraksta visās vietās pilno neimspeisu). Darbs nav grūts, bet atbildīgs.

Maršrutēšana (routings) un filtrēšana

Nafig ir izmēzta (deprekeitota) Route::controller() funkcija, kas arī ir loģiska, jo L4 vajadzēja specifiski norādīt (vai arī tas bija L3?), ka tas ir REST kontrolieris un tad jau pēc funkciju nosaukuma routes salikās automātiski. Es uzskatu, ka tas ir ļoti resursietilpīgs process (esmu pats implementējis vienā vietā un ātrdarbību tas neveicina).

Routings ir ļoti saistīts arī ar filtriem, kas L5 nepastāv kā suga, bet ir ļoti kruts jaunieviesums: middleware. Kopā ar maršrutu (routes) grupēšanu šis ir tik spēcīgs pasākums, ka, saprotot kā tas strādā, gandrīz lecu gaisā un situ plaukstas. Piemērs ir ļoti vienkāršs - vienā grupā ielieku visus maršrutus, kuri nedrīkst izpildīties bez, piemēram, sesijas iesākšanas. Otrā grupā salieku tos maršrutus, kuriem var tikt klāt tikai tad, ja lietotājs ir autentificējies. Strādā kā maģija. Pie tam, vienai maršrutu pakai var pielikt vairākas middleware opcijas.

Autentifikācija un autorizācija

Autentifikācija strādā ar tā paša tipa tabulu, kāda bija L4 versijā, bet tagad autentifikācijas ieviešana ir, kā saka mans kolēģis: "Kā divus pirkstus pret asfaltu". Pietiek jaunai aplikācijai konsolē ierakstīt php artisan make:auth un tiks izveidoti gan visi kontorlieru, gan migrācijas, gan modeļu, gan skatu faili. Atliek tikai reģistrēties sistēmā un ielogoties.

Autorizācija ir tas, kas manā gadījumā nebija vajadzīga, jo sistēmai ir divi lietotāji - tie, kas ir administratori (es) un tie, kas ir lietotāji (jūs). Taču autorizācija paredz vieglā veidā autorizēt dažādus lietotājus dažādām lietām. Nav pat atkarīgs no lietotāja tipa - var saprogrammēt pašu velnu. Iesaku par šo lietu palasīt nedaudz vairāk. Tas ir spēks. Sevišķi tad, ja padomā ir programmēt kādu CRM vai sarežģītāku CMS un līdzīgi (no otras puses, ja jau ir autentificējies (caur middleware), tad Auth::user()->level nočekot var no jebkuras vietas).

[Papildināts 15.11.2016 11.02] Manis izmantotie composer libi

Krišs komentāros norādīja, ka gribētu redzēt github kodu. Neuzskatu, ka ir baigā zinātne te apakšā (viss pēc manuāļa), tāpēc nav jēgas izlikt. Nolēmu padalīties ar bibliotēkām, kuras izmantoju. Nedaudz arī aprakstīšu katru:

  • barryvdh/laravel-ide-helper - šī ir neatsverama bibliotēka, kas saģenerē failu ar atsaucēm uz funkcijām. Tas palīdz, ja programmēšanā izmanto IDE, jo tad visas funkcijas un klases ir normāli adresētas.

  • components/jquery un components/jqueryui - man šķiet, ka šos nav jāpaskaidro. Attiecīgās libas, protams, iestāstīju eliksīram, lai pārkopē uz publiskajām direktorijām, piemēram, mix.copy('vendor/components/jquery/jquery.js', 'public/build/jquery.js');.

  • laravelcollective/html - bez šitā L5 vairs nav normālu Html un Form helperu. Protams, japieliek arī app konfigurācijā provaideros un aliasos.

  • ckeditor/ckeditor - šo WYSIWYG izmantoju administrācijā, lai nav visu markupu jābaksta ar roku iekšā (ar to pašu eliksīru libus uz publisko diru jāpārkopē).

  • blueimp/jquery-file-upload - labākais javascript librārijs, ko esmu atradis, lai varētu uploadot failus. Ir arī iespēja dalīt lielus failus - līdz ar to upload izmēra ierobežojums nepastāv. Jāpiebilst, ka šai bibliotekai nav automātiska loadera konfigurācija, tāpēc ar rociņu composer.js faila "autoload" sadaļā jāiebaksta: "files": [ "vendor/blueimp/jquery-file-upload/server/php/UploadHandler.php" ].

  • twbs/bootstrap - būtstrapu izmantoju jau ilgi. Arī viss blogs balstās uz šī CSS freimworka.

  • components/font-awesome - šai ikonu fonta saimei laikam ir visvairāk ikonu. Man ir iepatikusies.

Ceru, ka vismaz daļēji atbildēju uz Kriša jautājumu. Varbūt ir kādi ieteikumi šajā sakarā?

[Papildināts 29.01.2016] Meklētājs

Beidzot esmu ieviesis arī meklēšanu. Meklētājs meklē komentāros un rakstos. Meklētos vārdus arī atzīmēs, lai vieglāk pamanīt. Ceru, ka kādam noderēs. Nekādu baigo maģiju netaisīju, bet nu FULLTEXT SEARCH ieviesu.

Kopsavilkums

Migrējot blogu no L4 uz L5 guvu ļoti patīkamu pieredzi. Esmu sapratis, ka L5 pārspēj visus iepriekšējos priekšgājējus un iesaku to lietot visiem, kas uzsāk jaunus projektus.

Laika ziņā visa bloga migrācija aizņēma aptuveni 10 stundas, bet tas ir kopā ar dokumentācijas lasīšanu - tātad nebija nemaz tik sāpīgi. Lai labāks priekštats, tad pateikšu arī, ka man ir diezgan jaudīga admin sistēma ar lapu, postu, kategoriju un komentāru menedžēšanu (vairs neko nedaru iekš PhpMyAdmin). 

Ja tiki līdz šejienei un izlasīji visu, tad... Nu es nezinu... Nopērc sev aliņu - tas ir godīgi nopelnīts.

Komentāri

Malacis! Lai arī neko daudz nesapratu par backendu, bet logo ir ok. Man gan galīgi nesaistās ar /body, bet vairāk ar skandināvu ø :)

p.s. Mazahists gadījumā neraksta ar „o“?

Ir labāk. Īpaši sākumlapa labi padevusies, es par tādu jau sen sapņoju, bet no WP ne sūda necērtu. Vienīgā kaitinošā lieta tagad tev ir tā debīlā meņuča animācija labajā augšējā stūrī. Atgādina spēlīti, kur pareizi jāmēģina trāpīt. Un meklētājs arī tev par ļaunu nenāktu (rakstu teksti + komentāri).

Stāvot metro vilcienā izlasīju - visu. Logo kā /body neuztvēru, bet kad paskaidroji, tad liekās forša ideja. Pārējais interesanti, lai arī ko kodēt ar tādu fw man diez vai vajadzēs tuvā nākotnē. Alu nepirkšu - tas te ir dikti dārgs, lai arī tev pilnībā piekrītu - es arī jūtos to tagad nopelnījis. + man ir fūga no vakardienas & šādā karstumā pohiņa ir nežēlīgi mokoša.

Mr. Serge, par tām ikonām piekrītu - visu laiku domāju kā labāk... Gan jau beigās atstāšu pliku ikonu un pametīšu title atribūtu apakšā, lai būtu kaut kāda sapratne.

Par search visu laiku ir doma, bet es kaut kādu parasto gļukaino negribu. Papētīšu normālus algoritmus un, ja neko pārdabisku negribēsies programmēt, tad vienkārši pielāgošu googles sērču.

Arti, man prieks par tevi :D Nopērc uz pohiņu šampanieti, ja aliņš dārgs :D

Gandrīz viss ir lieliski, izskatās, ka nopietns darbs paveikts! Vienīgais, ko neredzu - linku uz github.com, kur būtu pieejams sistēmas kods...

Krišs, tur apakšā nav nekādas zinātnes, tāpēc nav jēga publiskot visu kodu. Rakstu papildināju ar manis izmantotajiem libiem - varbūt kaut kas noder.

Paud savu subjektīvo viedokli:

Visi lauki (izņemot interneta vietni) aizpildāmi obligāti!
E-pasts publiski netiks parādīts.
Zinot vairākumu, komentāros tagi netiek atrādīti kā tagi. Linki automātiski pārveidosies par spiežamiem (cerams).
Bloga īpašnieks patur tiesības ļaunus komentārus dzēst vai pārveidot cilvēkiem patīkamākā formā, bet tajā pašā laikā neatbild par komentāru saturu.