var resume = new Resume("Allyson Maciel Guimarães",22);
resume.start();
//Olá, Meu nome é Allyson Maciel Guimarães programador Fullstack e tenho 22 anos.
/*
FORMAÇÃO:
*Colégio Padre Fernando Gomes de Melo [2011];
*Universidade Estadual de Goiás [2012-2015].
HABILIDADES:
*Modelagem de dados em banco de dados SQL e NoSQL;
*Manuseio de base de dados com MongoDB, Postgress e Mysql;
*Modelagem e arquitetura de software;
*Construção de aplicações em tempo real;
*Construir aplicativos mobile com Phonegap;
*Criar interfaces com Foundation, Bootstrap e afins;
*Tomar muito café;
*Ter dificuldades pra dormir.
LINGUAGENS DE PROGRAMAÇÃO:
*JavaScript (também com Node.js, avançado);
*C e C# (noções básicas);
*Java (desktop e web);
*R e Octave (noções básicas);
*PHP (avançado).
CERTIFICADOS:
*R Programming, Universidade Johns Hopkins by Coursera;
*Machine Learning, Universidade Stanford by Coursera;
*TOEFL ITP;
*TO-DO: Full Stack Web Development, Universidade de Ciência e Tecnologia de Hong Kong by Coursera.
SISTEMAS OPERACIONAIS:
*Windows (uso desde que nasci);
*Linux (sei resolver os problemas nele).
MEUS PROJETOS PESSOAIS:
*YoutubeSession (JavaScript + Node.js + MongoDB);
*Luwitter (JavaScript + Node.js + MongoDB);
*EgressoOnline_PHP (PHP + Mysql);
*FerretOut (Java SE);
*BotIRCnode (JavaScript + Node.js);
*BotIRC (Java SE).
*Shorturl (PHP + Mysql).
*/
//Agora eu vou codificar um pouco em JavaScript, see you later.
//LOL
var Util = function(){}
Util.prototype.hasEmpty = function(array){
if( !(array instanceof Array) )
return true;
for(var i = 0; i < array.length; i++ )
if(array[i] == null || typeof array[i] == 'undefined' || array[i] == '')
return true;
return false;
}
module.exports = Util;
var express = require('express');
var route = express.Router();
var Technician = require('../../schema/technician');
var Util = require('../../util/util');
route.get('/login', function(req, res, next){
res.render('login.html');
});
route.post('/login', function(req, res, next){
var dd = req.body.ddd;
var phone = req.body.phone;
var password = req.body.password;
var session = req.session;
var util = new Util();
var paramArray = new Array(dd, phone, password);
if(util.hasEmpty(paramArray)){
res.json({status: false, msg: "Dados insuficientes para efetuar login."});
return;
}
Technician.findOne({
dd: dd,
phone: phone,
password: password
},function(error, tech){
if(error){
res.json({status: false, msg: error.errmsg});
return;
}
if(tech == null ){
res.json({status: false, clean_input: true, msg: "DDD, celular ou senha inválido."});
return;
}
session._id = tech._id;
session._name = tech.name;
session._authenticated = true;
res.json({status: true, redirect : '/dashboard_c'})
});
});
module.exports = route;
var express = require('express');
var route = express.Router();
var Client = require("../schema/client");
var Order = require("../schema/order");
var enumOrder = require("../enum/enumOrder");
var DeliveryPcBotHandler = require("../modules/DeliveryPcBotHandler");
route.post('/createSolicitation', function(req, res,next){
var api_key = req.body.api_key;
var gps_location = req.body.gps_location;
var address_complement = req.body.address_complement;
if( typeof api_key == 'undefined' || typeof gps_location == 'undefined' || typeof address_complement == 'undefined'){
res.json({status: false, msg: "You need a little more of date for do it."});
return;
}
//Finding client by api_key
Client.findOne({
api_key: api_key
},function(error,client){
if(error){
res.json({status: false, msg: error.errmsg});
return;
}
if(client == null){
res.json({status: false, msg: "notfound"});
return;
}
//Finding open orders by client object Id.
Order.find({
client: client._id,
status: { $ne : enumOrder.CLOSE }
},function(error, orders){
if(error){
res.json({status: false, msg: error.errmsg});
return;
}
//Setting all open orders to status close.
for(var i = 0; i < orders.length; i++){
orders[i].status = enumOrder.CLOSE;
orders[i].save();
}
var order = new Order({
address_complement: address_complement,
gps_location: gps_location,
client: client._id,
status: enumOrder.OPEN,
creation_date: new Date()
});
order.save(function(error,order){
if(error){
res.json({status: false, msg: error.errmsg});
return;
}
res.json({status: true});
DeliveryPcBotHandler.pulseSolicitationAlert();
});
});
});
});
module.exports = route;
var Room = function(){
this.room_owner = 'undefined';
this.intervalTimeout = null;
this.DELAY = 1000; //one second;
this.EXCLUSION_DELAY_BOUND = 3 //three seconds.
this.started = false;
this.play = false;
this.video_duration = -1;
this.timeout_session = 0;
this.users = [];
this.usersTyping = new Array();
};
Room.prototype.whoIsTyping = function(name){
var is = "está";
var are = "estão";
var temp = "";
var count = 0;
for( var a = 0 ; a < this.usersTyping.length; a++){
if(this.usersTyping[a] != name){
if( this.usersTyping.length > 2 && (a + 1 != this.usersTyping.legth))
temp += ""+this.usersTyping[a]+", ";
else
temp += ""+this.usersTyping[a]+" e ";
count++;
}
}
if(temp == "") return "";
if(count < 4)
temp = temp.substring(0,temp.length-2);
else
temp = "muitos";
if(count < 2 )
temp += " "+is+" digitando...";
else
temp += " "+are+" digitando...";
return temp;
}
Room.prototype.addUserFromTypingList = function(name){
this.usersTyping.push(name);
console.log(this.usersTyping);
};
Room.prototype.removeUserFromTypingList = function(name){
var idx = this.usersTyping.indexOf(name);
if(idx != -1)
this.usersTyping.splice(idx,1);
};
Room.prototype.isSynchronized = function(clientCurrentTime){
if( clientCurrentTime >= this.timeout_session-this.EXCLUSION_DELAY_BOUND
&& clientCurrentTime <= this.timeout_session+this.EXCLUSION_DELAY_BOUND)
return true;
return false;
};
Room.prototype.newUser = function(hashName, nome){
this.users[hashName] = nome;
};
Room.prototype.removeUser = function(hashName){
delete this.users[hashName];
};
Room.prototype.getAllUsers = function(){
return this.users;
};
Room.prototype.isPlay = function(){
return this.play;
};
Room.prototype.getTimeout = function(){
return this.timeout_session;
};
Room.prototype.setPlay = function(){
if(!this.play)
this.play = true;
};
Room.prototype.setPause = function(){
if(this.play)
this.play = false;
};
Room.prototype.registerSessionName = function(session_name){
this.session_name = session_name;
};
Room.prototype.setProperties = function(link_video,room_name){
this.link_video = link_video;
this.room_name = room_name;
};
Room.prototype.registerOwner = function(hash){
this.room_owner = hash;
console.error("usuário registrado como proprietário"+ hash);
};
Room.prototype.ownerExists = function(){
return (this.room_owner != 'undefined' );
};
Room.prototype.isOwner = function(hash){
return (this.room_owner == hash );
};
Room.prototype.isStarted = function(){
console.log('isStarted' + this.started);
return this.started;
};
Room.prototype.startSession = function(hashOwner, video_duration){
if(hashOwner != this.room_owner) return false;
this.started = true;
this.video_duration = parseInt(video_duration);
var self = this;
this.intervalTimeout = setInterval(function(){
if(self.timeout_session <= self.video_duration){
if(self.play)self.timeout_session += 1;//one second
}
console.log('time courrent: '+ self.timeout_session +" duration : " + self.video_duration +" play "+ self.play);
},this.DELAY);
return true;
};
Room.prototype.seekTimeout = function(hashOwner,time){
if(hashOwner != this.room_owner) return false;
this.timeout_session = parseInt(time);
return true;
};
module.exports = Room;
var Server = require('socket.io');
var CryptoJS = require("crypto-js");
var Room = require('./Room');
var Factory = require('./Factory');
var socketServer ={};
socketServer.init = function(server) {
socketServer.io = null;
socketServer.rooms = [];
socketServer.io = io = new Server (server);
socketServer.factory = new Factory();
console.log('!Servidor socket iniciado.');
io.on('connection', function(socket){
socket.on('enterRoom',function(data){
// console.log("usuário registrando sala na sala: " + data.room);
//Registrando usuário na sala específica.
socket.__room = data.room;
var userHashName = CryptoJS.MD5( new Date().toString()).toString();
socket.hashName = userHashName;
socket.join(data.room);
//alimentando array de usuários:
var nameTemp = socketServer.factory.names();
socket.name = nameTemp;
var currentRoom = socketServer.rooms[socket.__room];
//Enviando informações da sala para o usuário:
var allUsers = currentRoom.getAllUsers();
var users = new Array();
for(var key in allUsers){
var user = {};
user.hashName = key;
user.name = allUsers[key];
users.push(user);
}
var roomInfo = {
linkVideo: currentRoom.link_video,
roomName : currentRoom.room_name,
users : users,
play : currentRoom.isPlay(),
timeout : currentRoom.getTimeout()+4//Player começar a avançar 4 segunda a frente
};
socket.emit('getRoomInfo',roomInfo);
//Enviando informações do novo usuário na sala:
var userInfo = {
hashName : socket.hashName,
name : nameTemp
};
currentRoom.newUser(socket.hashName, socket.name);
io.sockets.in(socket.__room).emit('newUser',userInfo);
});
//msg protocol: { userName : string, msg : string }
socket.on('msg',function(data){
console.log("mensagem em broadcast para a sala "+ socket.__room);
var msgBuild ={
userName: socket.name,
msg : data.msg
};
io.sockets.in(socket.__room).emit('msg',msgBuild);
});
socket.on('disconnect', function(){
var userInfo = {
hashName : socket.hashName,
name : socket.name
};
// delete socketServer[socket.hashName];
var currentRoom = socketServer.rooms[socket.__room];
currentRoom.removeUser(socket.hashName);
io.sockets.in(socket.__room).emit('leave',userInfo);
//Se o adminstrador da sala sair, um usuário deve ser sorteado como adminstrador.
if(!currentRoom.isOwner(socket.hashName))
return;
var users = currentRoom.getAllUsers();
var index = Math.floor( Math.random() * users.length);
currentRoom.registerOwner(tempSocket.hashName);
console.log("Nome do dono da sala: agora. "+tempSocket.name);
var msgBuild ={
userName: 'Server',
msg : 'O usuário '+tempSocket.name+' é o novo adminstrador da sala.'
};
io.sockets.in(tempSocket.__room).emit('msg',msgBuild);
});
socket.on('registerOwner', function(){
if(socket.__room == 'undefined') return;
//Adicionando proprietário da sala:
if(!socketServer.rooms[socket.__room].ownerExists())
socketServer.rooms[socket.__room].registerOwner(socket.hashName);
else
return;
var msgBuild ={
userName: socket.name,
msg : 'Registrado como proprietário da sala'
};
io.sockets.in(socket.__room).emit('msg',msgBuild);
});
socket.on('onPlay',function(data){
console.log("onPlay" );
socketServer.avatarStatusChange('Play',socket.hashName,socket.__room);
var currentRoom = socketServer.rooms[socket.__room];
//executar o comando apenas se o socket for do proprietário:
if(!currentRoom.isOwner(socket.hashName))return;
io.sockets.in(socket.__room).emit('onPlay');
if(!currentRoom.isStarted())
currentRoom.startSession(socket.hashName, data.duration);
currentRoom.setPlay();
var msgTemp = {
userName : socket.name,
msg : "Alguém acabou de dar play"
};
io.sockets.in(socket.__room).emit('msg',msgTemp);
});
socket.on('onPause',function(data){
console.log("onPause" );
socketServer.avatarStatusChange('Pause',socket.hashName,socket.__room);
var currentRoom = socketServer.rooms[socket.__room];
//executar o comando apenas se o socket for do proprietário:
if(!currentRoom.isOwner(socket.hashName))return;
io.sockets.in(socket.__room).emit('onPause');
currentRoom.setPause();
var msgTemp = {
userName : socket.name,
msg : "Alguém acabou de dar pause"
};
io.sockets.in(socket.__room).emit('msg',msgTemp);
});
socket.on('onSeek',function(data){
console.log("onSeek" );
var currentRoom = socketServer.rooms[socket.__room];
//executar o comando apenas se o socket for do proprietário:
if(!currentRoom.isOwner(socket.hashName))return;
currentRoom.seekTimeout(socket.hashName, data.time);
socket.broadcast.to(socket.__room).emit('onSeek',{time : data.time});
var msgTemp = {
userName : 'Server',
msg : "Alterou a posição do vídeo."
};
io.sockets.in(socket.__room).emit('msg',msgTemp);
});
socket.on('onStop',function(data){
console.log("onStop" );
socketServer.avatarStatusChange('Stop',socket.hashName,socket.__room);
//executar o comando apenas se o socket for do proprietário:
if(!socketServer.rooms[socket.__room].isOwner(socket.hashName))return;
io.sockets.in(socket.__room).emit('onStop');
var msgTemp = {
userName : socket.name,
msg : "Alguém acabou de dar stop"
};
io.sockets.in(socket.__room).emit('msg',msgTemp);
});
socket.on('onBuffering',function(data){
console.log("onBuffering" );
socketServer.avatarStatusChange('Buffering',socket.hashName,socket.__room);
//executar o comando apenas se o socket for do proprietário:
if(!socketServer.rooms[socket.__room].isOwner(socket.hashName))return;
io.sockets.in(socket.__room).emit('onBuffering');
var msgTemp = {
userName : socket.name,
msg : "Alguém acabou de dar buffering"
};
io.sockets.in(socket.__room).emit('msg',msgTemp);
});
socket.on('onThumbUp', function(){
console.log('onThumbUp');
var msgTemp = {
userName : socket.name,
msg : ""
}
io.sockets.in(socket.__room).emit('msg',msgTemp);
socketServer.avatarStatusChange('ThumbUp',socket.hashName,socket.__room);
});
socket.on('typeBegin', function(){
var currentRoom = socketServer.rooms[socket.__room];
currentRoom.addUserFromTypingList(socket.name);
var msg = currentRoom.whoIsTyping();
var msgTemp ={
msg : msg
};
io.sockets.in(socket.__room).emit('changeTyping',msgTemp);
});
socket.on('typeEnd',function(){
var currentRoom = socketServer.rooms[socket.__room];
currentRoom.removeUserFromTypingList(socket.name);
var msg = currentRoom.whoIsTyping();
var msgTemp ={
msg : msg
};
io.sockets.in(socket.__room).emit('changeTyping',msgTemp);
});
socket.on('verifySynchronization',function(data){
var currentRoom = socketServer.rooms[socket.__room];
if(!currentRoom.isSynchronized(data.currentTime) &&
currentRoom.isStarted() ){
//
socket.emit('onSeek',{time : currentRoom.getTimeout()});
var msgTemp = {
userName : 'Server',
msg : "Seu player foi sincronizado com o servidor."
};
socket.emit('msg',msgTemp);
}
});
});
socketServer.roomExists = function(hashId){
return ( this.rooms[hashId] != null );
}
socketServer.avatarStatusChange = function(action,hashName,room){
var avatarChange = {
hashName : hashName,
action : action
};
io.sockets.in(room).emit('avatarStatusChange', avatarChange);
};
socketServer.createRoom = function(name,url){
console.log(this.rooms);
//criando hash para a sala:
var data = new Date().toString();
var hashName = CryptoJS.MD5(name + data).toString();
this.rooms[hashName] = new Room();
this.rooms[hashName].registerSessionName(hashName);
this.rooms[hashName].setProperties(name,url);
console.log(this.rooms[hashName]);
return hashName;
};
socketServer.deleteRoom = function(hashNames){
delete this.rooms[hashName];
};
};
module.exports = socketServer;