Atstovai - gali įrašyt save. Ten nieko ypatinga nėra - tiesiog jei nori, kad kas nors dar galėtų skaityt ir keist informaciją, taip sakant, atstovauti tave VMI, tada įrašai dar žmogų. Aš įsirašiau save patį dar kaip tvarkantį savo veiklos buhalterinę apskaitą. :rolleyes: Dėl kodo - kiek prisimenu, asmens kodas. Dokumento nereikalavo.
Tada kaip pagrindinę veiklą rašyk ne programavimą, o parduotuvę. Arba teks kažko atsisakyti. Matyt, reik rinktis - arba mokesčių mokėtojas su laisva profesija (programuotojas), arba kitas MM, prekyba. Man irgi buvo keblumų. Tik man jie iškilo, kai nutariau pakoreguoti savo veiklų sąrašą. Bet kai registravausi VMI pastate, tai leido įrašyti miksą iš "laisvų" ir kitų veiklų. O kai Mano VMI bandžiau koreguot, tai neleido "maišyt". Tai pasirinkau "Kiti MM" ir nerašiau "laisvų" veiklų. :)
Priklausomai nuo tavo veiklos - laisvųjų profesijų arba kiti mokesčių mokėtojai. Po to, kai rinksies veiklas, sistema neleis registruot veiklų, kurios neatitiks konkrečiam mokesčių mokėtojo tipui. Tada grįžti, taisai, vėl iš naujo renkiesi ir t.t.
Paskambink į SoDrą ir pasakyk savo vardą, pavardę, draudėjo kodą, jie pažiūrės. Šiaip ten nuo rugpjūčio jos sistema striginėja - gal dėl tuo stabdo.
Saugumą reikia užtikrinti visada, ext/mysql nenaudoti niekada (extract irgi panašiai). Nežinau, ką turėjai omeny su „mokomoji medžiaga“, bet toks jausmas, kad tada kaip tik dar labiau reikia rūpintis saugumu.
Jau kad tik tamsta nenumirtum iš mandrumo :) Kam sunkiasvorių MVC, kai reikia pakeisti varganus kelis elementus DOM'e? Suprasčiau, jei būtų visiškai JS-heavy aplikacija (single page ir pan.). O čia... Tik dėl kai ko (pvz. elementų kešavimas) galima sutikti. Su data- atributais tuo tarpu, irgi viskas yra OK.
Node.js yra įrankis, kurio pagalba galima sukurti serverius įvairiom web aplikacijoms ar žaidimams naudojant JavaScript programavimo kalbą. Viskas vyksta realiu laiku t.y. atnaujinimus siunčiamus iš serverio vartotojas gauna akimirksniu. Ir čia Ajax'as ne prie ko - Node.js veikia per WebSocket'us. Todėl norint testuoti serverį reikalinga moderni naršyklė palaikanti WebSocket'us. WebSocket'us palaiko ir dauguma mobilių įrenginių, todėl dėl to nereikia jaudintis. Supažindinsiu jus su Node.js pamokydamas kaip galima sukurti paprastą web chat'ą (tiek iš serverio tiek iš vartotojo pusės) Windows aplinkoje.
Pasiruošimas Pirmiausia jums reikės iš čia http://nodejs.org/ parsisiųsti ir įsidiegti patį Node.JS įrankį. Node.js instaliacijos kataloge rasite programą (.bat failą) pavadinimu npm ji skirta papildomų bibliotekų parsiuntimui ir instaliavimui, tačiau ją paleisti galima tik per komandinę eilutę. Taigi jums reikės papildomos bibliotekos (labai naudingos ir palengvinančios darbą) Socket.IO.
Socket.io instaliavimas: 1. Atsidarius Node.js instaliacijos aplanką į adreso lauką įrašyti "cmd" ir spausti ENTER 2. Atsidariusioje konsolėje įrašykite "npm install socket.io" (be kabučių) 3. Kai instaliacija baigsis galite uždaryti konsolę http://www.part.lt/img/b9964fdb4cd608ccc83999880a2c2bd3692.jpg http://www.part.lt/img/2acd782f1dfd0f7c47717dc2dda03761115.jpg
Darbas su Node.js ir Socket.IO Testas Dabar, kai jau įdiegėte reikiamus įrankius galite ištestuoti kaip jie veikia. Tam pačiame kataloge sukurkite betkokį failą su .js galūne pvz. "chat.js". Atidarykite sukurtą failą ir yrašykite pirmąją kodo eilutę:
var io = require('socket.io').listen(8000); Ši eilutė liepia sukurti serverį 8000 porte. Ar viskas tvarkoje galite ištestuoti sukurtą .js failą tiesiog "užvilkę" an node programos. http://www.part.lt/img/d959e80a53a652d583cb1fae2d038d89139.jpg Atsivers konsolė, jeigu ji iš karto neišsijungs, reiškias viskas gerai. Naršyklės lange suvedę "http://localhost:8000/" galėsite išvysti pasveikinimą:
Įvykiai ir prižiūrėtojai O dabar pradėsime sunkiąją dalį. Pirmą norėčiau paaiškinti terminologiją. Kas yra socket'ai nepasakosiu (galite pasiskaityti čia http://en.wikipedia.org/wiki/Network_socket). Papasakosiu apie event'us (įvykius). Na trumpai tariant įvykiai yra įvykiai :D t.y. tai kas įvyksta programoje (pvz. serveris iš vartotojo gauna komandą "labas"). Programa turi ką nors atsakyti į įvykį, todėl jiems (įvykiams) reikia priskirti prižiūrėtoją (event listener/handler). Įvykio prižiūrėtojas yra paprasčiausia funkcija (o jeigu nežinot kas yra funkcijos, tai ne ten papuolėt). Prižiūrėtoją įvykiui priskirti galima dviem būdais.
socket.on('labas', function(){
console.log("LABAS");
}); arba
function labasFunkcija(){
console.log("LABAS");
}
socket.on('labas', labasFunkcija);
Šis prižiūrėtojas iš vartotojo gavęs komandą "labas" konsolės lange parašys "LABAS". Tačiau šio įvykio mes nenaudosim.
Serveris Kadangi papasakojau apie įvykius galima judėti toliau. Kol kas kode turime tik vieną eilutę, kurioje aprašytas kintamasis "io". Šis kintamasis laukia kokių nors įvykių (tiksliau ne kintamasis, o jam priskirtas objektas), todėl mes turime jiems priskirti prižiūrėtojus. Pirmasis įvykis kurį aprašysime tai kai vartotojas bando prisijungti prie serverio. Šio įvykio prižiūrėtoją galime vadinti bosu, nes jis priskirs prižiūrėtojus kitiems įvykiams.
io.sockets.on('connection', function (socket) {
// kitas įvykis
// dar vienas įvykis
}); Šiame pratime naudosime dar du įvykius t.y. "login" ir "message". Beje įvykius galite pavadinti kaip norite, čia pasirinkimo laisvė.
Taigi antrasis prižiūrėtojas atsakys už vartotojo vardo pasirinkimą. Vartotojui sėkmingai prisijungus prie serverio jis turės įrašyti savo vardą. Pasirinkus vardą serveriui siunčiama komanda "login" kartu su pasirinktu vardu. O tuo tarpu serveryje priskirtas prižiūrėtojas laukia šio įvykio:
socket.on('login', function(data){ // Kai serveris priima komandą "login" iš vartotojo (kintamasis "data" yra gauti duomenys iš vartotjo)
var status = 0; // Kintamasis status bus siunčiamas vartotojui po to kai serveris patikrins jo atsiųstus duomenis
if(data.name.length == 0){ // Jeigu vartotojas neįvedė prisijungimo vardo
status = 1;
} else {
var clients = io.sockets.clients(); // Gaunamas prisijungusių vartotojų sąrašas
for(var i = 0; i < clients.length; i++){ // Tikrinami visi prisijungė vartotojai
if(clients[i].user && clients[i].user.toLowerCase() == data.name.toLowerCase()){ // Tikrinama ar pasirinktas vartotojo vardas yra užimtas
status = 2;
break;
}
}
}
if(status == 0) socket.user = data.name; // Jeigu pasirinktas vartotojo vardas yra prieinamas socket'ui priskiriamas "user" kintamasis
socket.emit('login', {status: status}); // Vartotojui siunčiama komanda "login" su kintamuoju "status"
}); Kaip pastebėjote (tikiuosi) šis prižiūrėtojas turi argumentą "data" t.y. kartu su įvykiu iš vartotojo gauti duomenys, šiuo atveju vartotojo vardas. Duomenys pateikiami json formatu, tai reiškia, kad:
data = {name: <vardas>} Tikiuosi kad pastebėjot ir šią eilutę:
socket.emit('login', {status: status}); Ši eilutė sukuria įvykį vartotojui. Tai reiškia, kad vartotojo (naršyklės) pusėje taip pat laukiama įvykių. Taigi siunčiama komanda "login", o ją priims vartotojo pusėje esantis prižiūrėtojas, bet apie tai vėliau. Ir trečiasis, paskutinysis prižiūrėtojas - atsakingas už vartotojo siunčiamų žinučių priėmimą:
socket.on('message', function(data){ // Kai vartotojas parašo žinutę
var clients = io.sockets.clients();
for(var i = 0; i < clients.length; i++){ // Tikrinami visi prisijungė vartotojai
if(clients[i].user){ // Tikrinama ar vartotojas turi prisijungimo vardą
clients[i].emit('message', {user: socket.user, message: data.message}); // Siunčiama žinutė vartotojui
}
}
}); Jeigu nesupratot ką daro šis prižiūrėtojas pasakysiu trumpai. Jis visas gaunamas žinutes iš vieno vartotojo persiunčia visiems kitiems. Dabar jūsų kodas turėtų atrodyti taip:
var io = require('socket.io').listen(8000); // Sukuriamas serveris
console.log(io.version);
io.sockets.on('connection', function (socket) { // Kai vartotojas prisijungia prie serverio
socket.on('login', function(data){ // Kai serveris priima komandą "login" iš vartotojo (kintamasis "data" yra gauti duomenys iš vartotjo)
var status = 0; // Kintamasis status bus siunčiamas vartotojui po to kai serveris patikrins jo atsiųstus duomenis
if(data.name.length == 0){ // Jeigu vartotojas neįvedė prisijungimo vardo
status = 1;
} else {
var clients = io.sockets.clients(); // Gaunamas prisijungusių vartotojų sąrašas
for(var i = 0; i < clients.length; i++){ // Tikrinami visi prisijungė vartotojai
if(clients[i].user && clients[i].user.toLowerCase() == data.name.toLowerCase()){ // Tikrinama ar pasirinktas vartotojo vardas yra užimtas
status = 2;
break;
}
}
}
if(status == 0) socket.user = data.name; // Jeigu pasirinktas vartotojo vardas yra prieinamas socket'ui priskiriamas "user" kintamasis
socket.emit('login', {status: status}); // Vartotojui siunčiama komanda "login" su kintamuoju "status"
});
socket.on('message', function(data){ // Kai vartotojas parašo žinutę
var clients = io.sockets.clients();
for(var i = 0; i < clients.length; i++){ // Tikrinami visi prisijungė vartotojai
if(clients[i].user){ // Tikrinama ar vartotojas turi prisijungimo vardą
clients[i].emit('message', {user: socket.user, message: data.message}); // Siunčiama žinutė vartotojui
}
}
});
}); Serverio kodas baigtas, todėl jau galite jį paleisti kaip mokiau.
Pabaiga Pagaliau priėjome vartotojo pusę. Pabaiga labai arti, nes aš tiesiog jums pateiksiu "gatavą" kodą. Jame nieko ko nežinote nėra. Kaip ir serverio pusėje yra priskirti prižiūrėtojai ir paprastos jQuery funkcijos skirtos gautiems duomenims manipuliuoti. Kad jums būtų lengviau suprasti JavaScript faile pakomentavau beveik kiekvieną eilutę. Taigi klientą sudaro 3 failai (html, css ir js): index.html
var socket;
$(document).ready(function(e) {
socket = io.connect("http://78.62.160.169:8000/"); // Jungiasi prie serverio
// Priskiriami įvykių prižiūrėtojai
socket.on("connect", connected); // Įvykis "connect" įvyksta kai vartotojas prisijungia prie serverio
socket.on("login", login);
socket.on("disconnect", disconnect); // Įvykis "connected" įvyksta kai nutrūksta vartotojo ryšys su serveriu
});
//Įvykio "connected" prižiūrėtojas
function connected(){
var text = $("<input>", {type: "text", placeholder: "Vardas"}); // Sukuriamas teksto laukas
var button = $("<input>", {type: "submit", value: "Tęsti"}); // Sukuriamas mygtukas
$(".modal").html([text, button]); // Sukurti elementai priskiriami "modal" klasę turinčiam elementui
button.on("click", function(){ // Priskiariamas mygtuko paspaudimo įvykio prižiūrėtojas
socket.emit("login", {name: text.val()}); // Nuspaudus mygtuka į serverį siunčiama komanda kurioje nurodytas vartotojo įvestas vardas
});
}
// Įvykio "login" prižiūrėtojas
function login(data){
switch(data.status){ // Tikrinami duomenys iš serverio, kurie gaunami po bandymo prisijungti su pasirinktu vartotojo vardu
case 0: // Jeigu data.status = 0
init(); // Vykdoma "init" funkcija
break;
case 1: // Jeigu data.status = 1
alert("Įvesk vardą!"); // Iššoka "alert" lentelė
break;
case 2: // Jeigu data.status = 2
alert("Šis vardas yra užimtas"); // Iššoka "alert" lentelė
break;
}
}
// Funkcija kuri vykdoma jeigu pavyko prisijungti su pasirinktu vartotojo vardu
function init(){
$(".modal, .overlay").remove(); // Sunaikinami elementai kurie turi "modal" arba "overlay" klasę (prisijungimo lentelė)
$("table").show(); // Atslepiama lentelė (chato template'as)
socket.on("message", message); // Priskiriamas įvykio prižiūrėtojas apdorojantis duomenis, kurie gaunami iš serverio, kai kas nors parašo žinutę chat'e
$("#input").on("keypress", function(e){ // Priskiriamas klaviatūros klavišo paspaudimo įvykio prižiūrėtojas
if(e.keyCode == 13 && $(this).val().length != 0){ // Jeigu nuspausto mygtuko kodas yra 13 (kodas 13 yra ENTER mygtukas) bei žinutės įvedimo laukas nėra tuščias
socket.emit("message", {message: $(this).val()}); // Žinutė išsiunčiama į serverį
$(this).val(""); // Išvalomas žinutės įvedimo laukas
}
});
}
// Įvykio "message" prižiūrėtojas
function message(data){
$("#output").append("<p><b>"+data.user+":</b> "+data.message+"</p>"); // Žinutę atspausdina "output" elemente (pirmoje lentelės eilutėje)
}
// Įvykio "disconnect" prižiūrėtojas
function disconnect(){
socket.removeListener("message", message); // Sunaikina įvykio "message" prižiūrėtoją
$("table").hide(); // Paslepia lentelę
$("#output").empty(); // Išvalo chat'ą;
$("#input").val(""); // Išvalo žinutės įvedimo lauką
var modal = $("<div>", {class: "modal", html: "Jungiamasi prie serverio..."}); // Sukuria "modal" elementą
var overlay = $("<div>", {class: "overlay"}); // Sukuria "overlay" elementą
$("body").append([overlay, modal]); // Sukurtus elementus priskiria "body" elementui
}
Šiuos failus sudėkite į vieną katalogą Paleiskite serverį Atsidarykite index.html failą Susitepkit sumuštinį Atimkit močiutės pensiją Iškirskit kentą
Pasižiūrėjau, kad kai kurie forumo nariai šioje kategorijoje nustato sau tam tikrus iššūkius ir bando juos įgyvendinti. Štai Promise bando per mėnesį uždirbti 1500 litų, rašo, kaip jam sekasi... Įdomu paskaityti, ir kažkur giliai kirba mintis, kaip pas tikrą lietuvį - "kad tau, rupūžioke, nepasisektų..." ;) Bet garsai šauki ant viso forumo - "Šaunuolis, taip ir toliau varyk!" Labai jaudina, tiesa?..
Noriu ir aš pabandyti kažką panašaus. Imkime mėnesį nuo rugpjūčio 1 dienos iki rugpjūčio 31. Tai 31 diena. Pakankamai didelis laiko tarpas, kad užkariautume pasaulį. Bet ką čia per jį nuveikus? Numesti po 1 kg svorio? Na jau ne, aš ne koks idiotas, savęs žaloti nesiruošiu, juk čia forume aiškiai parašyta "Asmeninis TOBULĖJIMAS" o ne "Asmens kankinimas" ;) Hmmm. Ką aš moku geriausiai? Rašyti! Tada reikia suorganizuoti savotišką iššūkį sau - parašysiu po 1 naudingą straipsnį pradedantiesiems ir pažengusiems verslininkams per dieną!
Geras iššūkis? Sąlygos? Straipsnis turi būti naudingas. Toks, kad jį perskaitę žmonės turėtų stimulo kažką naujo pabandyti, arba bent jau susimąstytų, ką gali padaryti geriau ar bent kitaip savo versle. Straipsnis publikuojamas vis skirtingame bloge ar puslapyje. Nesvarbu, ar daug lankytojų tenai, ar mažai - tai labai reliatyvūs dalykai, nes gavęs gerą atgarsį socialiniuose tinkluose, jis gali sugeneruoti tūkstantinius srautus. Jei norite, kad parašyčiau straipsnį būtent jūsų puslapiui, duokite žinoti - su mielu noru tai padarysiu. Straipsnyje neįkyriai pareklamuosiu savo verslą - Rasytojas.lt. Tai nepriklauso nuo temos ar auditorijos. Straipsnio apimtis - 1 Word puslapis arba 350 žodžių. Čia mažiausias. Aišku, kad rašysiu ilgesnius :)
Gal dar kokių sąlygų reiktų?
Ir iš viso, ar verta man tokį iššūkį kelti? Gal per lengvas? Ką manote?
Pradėčiau nuo rugpjūčio 1 dienos. Straipsnių nuorodas dėčiau čia, kad visi galėtumėte įvertinti. Jei perskaitę straipsnį matysite, kad jis naudingas, paspausite + po kiekvienu patikusiu postu. Taip žinosiu, kad bent kažkam jis buvo naudingas. Jei nenaudingas, maloniai paprašysiu patylėti, kad tie, kuriems jis naudingas netyčia nuomonės nepakeistų ;)
Po aršių diskusijų, konstruktyvių pasiūlymų ir vaikiškų najiezdų, pradedu publikuoti straipsnius:
rugpjūčio 1: Nusibodo Wordpress.com? 5 naujausios bloginimo platformos rugpjūčio 2: Atsiliepimų apie paslaugas galia rugpjūčio 3: Nemokami ir naudingi SEO įrankiai rugpjūčio 4: Meta Aprašymas - Reikia? Nereikia? rugpjūčio 5: Pasvarstymai. Kopijuokime sėkmingus startapus rugpjūčio 6: Patarimai verslui: 21. Nuorodų katalogai rugpjūčio 7: Pasvarstymai apie SEO ir rašytojų verslą Lietuvoje rugpjūčio 8: Naudingas įrankis kelių WP blogų savininkams ManageWP rugpjūčio 9: SEO eksperimentas - kitoks nuorodų katalogas rugpjūčio 10: Konkrečios temos įmonės naujienoms ir straipsniams rugpjūčio 11: 5 patarimai puslapių savininkams, kaip sutvarkyti savo svetainės tekstus rugpjūčio 12: Facebooko paveikslėlių dydžiai jūsų puslapiui rugpjūčio 13: TOP…4 (?) lietuviškos blogofermos rugpjūčio 14: Komerciniai pasiūlymai internete su Smore.com rugpjūčio 15: Darbas namuose – privalumai ir trūkumai rugpjūčio 16: Kas yra aukštos kokybės nuorodų katalogai rugpjūčio 17: Mano verslo istorija – Rašytojas.lt rugpjūčio 18: Facebook puslapio informacija rugpjūčio 19: Darbuotojų motyvacijos strategija Lietuvoje rugpjūčio 20: 10 įkvepiančių filmų apie verslą ir verslo pradžią rugpjūčio 21: SEO blogis rugpjūčio 22: Straipsnių katalogų temos
deme daznai buna nuo paspaudimo / nuo pixelio pazeisto + buvo taip jog pc isjungtas ir buvo dregna patalpoje, tada ijungus pixelis isilieja ir pasidaro deme, + cia normalu nes pixeliui isiliejus daznai keicia ekrana + kame pliusas jog jei butu tik pixelis mires garantija nekeistu ekrano, o kai deme keicia :P
O recovey diską gal turi iš asus kartu su kompu kur būna?. Arba gali iš kokių torrentų atsisiųsti recoverį Cd. Šiaip pagal mane tau reikia suaktyvinti tą particiją padaryti Active su kokiu nors Partition Wizardu ar dar kuom.