19. Problems
- Don’t support multiples simultaneously
connections.
- Synchronous I/O, the real problem, if the server
are saving an archive or doing a query in database
this process have to wait before continue.
23. Solution
Multi-thread model with an asynchronous I/O
Reactor Pattern
Instead of waiting on a response from network, use
that time to process another request.
45. Why?
The deal is not about being connected
anymore, it’s about doing it faster, better and
different
46.
47. - Amazon: 100 ms of extra load time caused a 1%
drop in sales (source: Greg Linden, Amazon).
48. - Amazon: 100 ms of extra load time caused a 1%
drop in sales (source: Greg Linden, Amazon).
- Google: 500 ms of extra load time caused 20%
fewer searches (source: Marrissa Mayer, Google).
49. - Amazon: 100 ms of extra load time caused a 1%
drop in sales (source: Greg Linden, Amazon).
- Google: 500 ms of extra load time caused 20%
fewer searches (source: Marrissa Mayer, Google).
- Yahoo!: 400 ms of extra load time caused a 5–9%
increase in the number of people who clicked
“back” before the page even loaded (source: Nicole
Sullivan, Yahoo!).
50. It contribute to SPA concept and increases
the performance and the UX.
Example
http://www.toyota.com/itsacar/
60. Redis
“Redis is an open source, advanced key-value store.
It is often referred to as a data structure server
since keys can contain strings, hashes, lists, sets and
sorted sets.”
73. ~$ irb
>> aNameError: undefined local variable or method `a' for
main:Object! from (irb):1! from /Users/joaomdmoura/.rvm/rubies/
ruby-1.9.2-p290/bin/irb:16:in `<main>'
>> a = bNameError: undefined local variable or method `b' for
main:Object! from (irb):2! from /Users/joaomdmoura/.rvm/rubies/
ruby-1.9.2-p290/bin/irb:16:in `<main>'
74. ~$ irb
>> aNameError: undefined local variable or method `a' for
main:Object! from (irb):1! from /Users/joaomdmoura/.rvm/rubies/
ruby-1.9.2-p290/bin/irb:16:in `<main>'
>> a = bNameError: undefined local variable or method `b' for
main:Object! from (irb):2! from /Users/joaomdmoura/.rvm/rubies/
ruby-1.9.2-p290/bin/irb:16:in `<main>'
>> a = a => nil
75. ~$ irb
>> aNameError: undefined local variable or method `a' for
main:Object! from (irb):1! from /Users/joaomdmoura/.rvm/rubies/
ruby-1.9.2-p290/bin/irb:16:in `<main>'
>> a = bNameError: undefined local variable or method `b' for
main:Object! from (irb):2! from /Users/joaomdmoura/.rvm/rubies/
ruby-1.9.2-p290/bin/irb:16:in `<main>'
>> a = a => nil
121. Thank you!
Have a nice day!
@joaomdmourajoaomdmoura.comgithub.com/
joaomdmoura
Hinweis der Redaktion
My name, where and how you can found me, joke in Italian.\n- I've been a developer for 6 years\n- Love open source development\n
My name, where and how you can found me, joke in Italian.\n- I've been a developer for 6 years\n- Love open source development\n
I&#x2019;m from Brazil! A Great country, let they know a little bit about it.\n
This is S&#xE3;o Paulo, where I live and work, a really big town, actually the sixth largest in the world\n
Actually I&#x2019;m working on CodeMiner42 as Consultant and System Engineer developing Ruby applications, the propose is a true agile software development without bureaucracy and focused in Startups\n
Well now you already know who I&#x2019;m, let&#x2019;s gonna talk about what I came to speak to you guys, Socket Applications. In this talk I will answer three basic questions that we developers should ask ourself before start to use some technology, What, Why and How.\n
There is some web applications that the content traffic is constant. For example a chat, a livestream of feed or even public APIs.\nThe usual solution is use javascript to make Ajax requests in regular times to an server that will return the content that your application are looking for. This have a name, this is polling, and this is not the right way to do it.\n
There is some web applications that the content traffic is constant. For example a chat, a livestream of feed or even public APIs.\nThe usual solution is use javascript to make Ajax requests in regular times to an server that will return the content that your application are looking for. This have a name, this is polling, and this is not the right way to do it.\n
There is some web applications that the content traffic is constant. For example a chat, a livestream of feed or even public APIs.\nThe usual solution is use javascript to make Ajax requests in regular times to an server that will return the content that your application are looking for. This have a name, this is polling, and this is not the right way to do it.\n
There is some web applications that the content traffic is constant. For example a chat, a livestream of feed or even public APIs.\nThe usual solution is use javascript to make Ajax requests in regular times to an server that will return the content that your application are looking for. This have a name, this is polling, and this is not the right way to do it.\n
There is some web applications that the content traffic is constant. For example a chat, a livestream of feed or even public APIs.\nThe usual solution is use javascript to make Ajax requests in regular times to an server that will return the content that your application are looking for. This have a name, this is polling, and this is not the right way to do it.\n
\n
Basically we have two problems:\n\nRails and most of used languages to develop web applications don&#x2019;t support multiples simultaneously connections.\nAn there is also the synchronous I/O, the real problem, if the server are saving an archive or doing a query in database this process have to wait before continue.\n
Basically we have two problems:\n\nRails and most of used languages to develop web applications don&#x2019;t support multiples simultaneously connections.\nAn there is also the synchronous I/O, the real problem, if the server are saving an archive or doing a query in database this process have to wait before continue.\n
The solution is use a multi-thread model with an asynchronous I/O, change the procedural structure for another pattern, for a Reactor, an event handling pattern, as used by Event Machine. (Heroku, GitHub, 37signals, Engine Yard, PostRank). The idea behind Reactor pattern is instead of waiting on a response from network, use that time to process another request.\nIntelligently preload data.\n
The solution is use a multi-thread model with an asynchronous I/O, change the procedural structure for another pattern, for a Reactor, an event handling pattern, as used by Event Machine. (Heroku, GitHub, 37signals, Engine Yard, PostRank). The idea behind Reactor pattern is instead of waiting on a response from network, use that time to process another request.\nIntelligently preload data.\n
The solution is use a multi-thread model with an asynchronous I/O, change the procedural structure for another pattern, for a Reactor, an event handling pattern, as used by Event Machine. (Heroku, GitHub, 37signals, Engine Yard, PostRank). The idea behind Reactor pattern is instead of waiting on a response from network, use that time to process another request.\nIntelligently preload data.\n
An this is exactly what socket is about, the word "socket" as we know it, have some aspects there are related with the socket technology, basically a socket connection have the same concept of a socket when plugged, there's two fluxes , one that transmit the power to the machine and other that send back the power to the plug.\n
A normal application or web site, communicate with a server by patches, a user request a page or some information from your server, where your application are hosted, when this request get in the server, a connections is established, the server will do the pre-process necessary, and will serve the information the user are looking for, closing the connection.\n\nFor security reasons the connections is always requested or approved by the client, the server can&#x2019;t figure out who is every client.\n
A normal application or web site, communicate with a server by patches, a user request a page or some information from your server, where your application are hosted, when this request get in the server, a connections is established, the server will do the pre-process necessary, and will serve the information the user are looking for, closing the connection.\n\nFor security reasons the connections is always requested or approved by the client, the server can&#x2019;t figure out who is every client.\n
A normal application or web site, communicate with a server by patches, a user request a page or some information from your server, where your application are hosted, when this request get in the server, a connections is established, the server will do the pre-process necessary, and will serve the information the user are looking for, closing the connection.\n\nFor security reasons the connections is always requested or approved by the client, the server can&#x2019;t figure out who is every client.\n
A normal application or web site, communicate with a server by patches, a user request a page or some information from your server, where your application are hosted, when this request get in the server, a connections is established, the server will do the pre-process necessary, and will serve the information the user are looking for, closing the connection.\n\nFor security reasons the connections is always requested or approved by the client, the server can&#x2019;t figure out who is every client.\n
A normal application or web site, communicate with a server by patches, a user request a page or some information from your server, where your application are hosted, when this request get in the server, a connections is established, the server will do the pre-process necessary, and will serve the information the user are looking for, closing the connection.\n\nFor security reasons the connections is always requested or approved by the client, the server can&#x2019;t figure out who is every client.\n
A normal application or web site, communicate with a server by patches, a user request a page or some information from your server, where your application are hosted, when this request get in the server, a connections is established, the server will do the pre-process necessary, and will serve the information the user are looking for, closing the connection.\n\nFor security reasons the connections is always requested or approved by the client, the server can&#x2019;t figure out who is every client.\n
A normal application or web site, communicate with a server by patches, a user request a page or some information from your server, where your application are hosted, when this request get in the server, a connections is established, the server will do the pre-process necessary, and will serve the information the user are looking for, closing the connection.\n\nFor security reasons the connections is always requested or approved by the client, the server can&#x2019;t figure out who is every client.\n
A normal application or web site, communicate with a server by patches, a user request a page or some information from your server, where your application are hosted, when this request get in the server, a connections is established, the server will do the pre-process necessary, and will serve the information the user are looking for, closing the connection.\n\nFor security reasons the connections is always requested or approved by the client, the server can&#x2019;t figure out who is every client.\n
When we are talking about a connection with a socket server, everything start similar, but when the request made, get in the server and the connection is established ( the word used to describe a successfully connection is handshake ), it will never close the connections until you tell the system to do it or shutdown the server.\n\nUsually the sockets connections are grouped by channels, so you can have multiple channels and multiple clients connected in each one.\n\nIf you think just about a connection that never end, maybe you won't see all the benefits of this kind of application, when you have more then one client connected to this server you can start to think in the server like a bridge between all your clients, allowing they to interact each other, changing completely their experience in the application.\n\nIt actually gives you realtime connection between your servers and client browsers. You can literally push data to clients using your web application, you can push data from your server to your clients allowing interaction between users.\n
When we are talking about a connection with a socket server, everything start similar, but when the request made, get in the server and the connection is established ( the word used to describe a successfully connection is handshake ), it will never close the connections until you tell the system to do it or shutdown the server.\n\nUsually the sockets connections are grouped by channels, so you can have multiple channels and multiple clients connected in each one.\n\nIf you think just about a connection that never end, maybe you won't see all the benefits of this kind of application, when you have more then one client connected to this server you can start to think in the server like a bridge between all your clients, allowing they to interact each other, changing completely their experience in the application.\n\nIt actually gives you realtime connection between your servers and client browsers. You can literally push data to clients using your web application, you can push data from your server to your clients allowing interaction between users.\n
When we are talking about a connection with a socket server, everything start similar, but when the request made, get in the server and the connection is established ( the word used to describe a successfully connection is handshake ), it will never close the connections until you tell the system to do it or shutdown the server.\n\nUsually the sockets connections are grouped by channels, so you can have multiple channels and multiple clients connected in each one.\n\nIf you think just about a connection that never end, maybe you won't see all the benefits of this kind of application, when you have more then one client connected to this server you can start to think in the server like a bridge between all your clients, allowing they to interact each other, changing completely their experience in the application.\n\nIt actually gives you realtime connection between your servers and client browsers. You can literally push data to clients using your web application, you can push data from your server to your clients allowing interaction between users.\n
When we are talking about a connection with a socket server, everything start similar, but when the request made, get in the server and the connection is established ( the word used to describe a successfully connection is handshake ), it will never close the connections until you tell the system to do it or shutdown the server.\n\nUsually the sockets connections are grouped by channels, so you can have multiple channels and multiple clients connected in each one.\n\nIf you think just about a connection that never end, maybe you won't see all the benefits of this kind of application, when you have more then one client connected to this server you can start to think in the server like a bridge between all your clients, allowing they to interact each other, changing completely their experience in the application.\n\nIt actually gives you realtime connection between your servers and client browsers. You can literally push data to clients using your web application, you can push data from your server to your clients allowing interaction between users.\n
When we are talking about a connection with a socket server, everything start similar, but when the request made, get in the server and the connection is established ( the word used to describe a successfully connection is handshake ), it will never close the connections until you tell the system to do it or shutdown the server.\n\nUsually the sockets connections are grouped by channels, so you can have multiple channels and multiple clients connected in each one.\n\nIf you think just about a connection that never end, maybe you won't see all the benefits of this kind of application, when you have more then one client connected to this server you can start to think in the server like a bridge between all your clients, allowing they to interact each other, changing completely their experience in the application.\n\nIt actually gives you realtime connection between your servers and client browsers. You can literally push data to clients using your web application, you can push data from your server to your clients allowing interaction between users.\n
When we are talking about a connection with a socket server, everything start similar, but when the request made, get in the server and the connection is established ( the word used to describe a successfully connection is handshake ), it will never close the connections until you tell the system to do it or shutdown the server.\n\nUsually the sockets connections are grouped by channels, so you can have multiple channels and multiple clients connected in each one.\n\nIf you think just about a connection that never end, maybe you won't see all the benefits of this kind of application, when you have more then one client connected to this server you can start to think in the server like a bridge between all your clients, allowing they to interact each other, changing completely their experience in the application.\n\nIt actually gives you realtime connection between your servers and client browsers. You can literally push data to clients using your web application, you can push data from your server to your clients allowing interaction between users.\n
When we are talking about a connection with a socket server, everything start similar, but when the request made, get in the server and the connection is established ( the word used to describe a successfully connection is handshake ), it will never close the connections until you tell the system to do it or shutdown the server.\n\nUsually the sockets connections are grouped by channels, so you can have multiple channels and multiple clients connected in each one.\n\nIf you think just about a connection that never end, maybe you won't see all the benefits of this kind of application, when you have more then one client connected to this server you can start to think in the server like a bridge between all your clients, allowing they to interact each other, changing completely their experience in the application.\n\nIt actually gives you realtime connection between your servers and client browsers. You can literally push data to clients using your web application, you can push data from your server to your clients allowing interaction between users.\n
When we are talking about a connection with a socket server, everything start similar, but when the request made, get in the server and the connection is established ( the word used to describe a successfully connection is handshake ), it will never close the connections until you tell the system to do it or shutdown the server.\n\nUsually the sockets connections are grouped by channels, so you can have multiple channels and multiple clients connected in each one.\n\nIf you think just about a connection that never end, maybe you won't see all the benefits of this kind of application, when you have more then one client connected to this server you can start to think in the server like a bridge between all your clients, allowing they to interact each other, changing completely their experience in the application.\n\nIt actually gives you realtime connection between your servers and client browsers. You can literally push data to clients using your web application, you can push data from your server to your clients allowing interaction between users.\n
Why should I develop applications using socket technology? \n- The internet is not about being connected anymore, it&#x2019;s about do it better, faster and simpler. \n- As faster as new technologies are coming the market are looking for innovation.\n- Users are looking everyday for applications that can offer a new way of getting and share information.\n- I'm not talking only about websites, games or any other specific kind of application, I'm talking about user experience\n- Sockets is one of the technologies that make possible a new range of applications, a network socket is an endpoint of an inter-process communication flow across a computer network.\n
Web developers are still stuck in the request/response mindset. every UI interaction results in a delay before another interaction can be performed. That's the process we've used our entire careers so it's no wonder most developers are blinkered to the alternatives.\n\nSpeed matters; a lot. Or to be precise, perceived speed matters a lot\n\ndevelopers still insist on using the request/response model. Even the introduction of Ajax hasn't improved the scene much, replacing blank loading states with spinners.\nUsers would just like to use your application without any interruptions.\n
Web developers are still stuck in the request/response mindset. every UI interaction results in a delay before another interaction can be performed. That's the process we've used our entire careers so it's no wonder most developers are blinkered to the alternatives.\n\nSpeed matters; a lot. Or to be precise, perceived speed matters a lot\n\ndevelopers still insist on using the request/response model. Even the introduction of Ajax hasn't improved the scene much, replacing blank loading states with spinners.\nUsers would just like to use your application without any interruptions.\n
Web developers are still stuck in the request/response mindset. every UI interaction results in a delay before another interaction can be performed. That's the process we've used our entire careers so it's no wonder most developers are blinkered to the alternatives.\n\nSpeed matters; a lot. Or to be precise, perceived speed matters a lot\n\ndevelopers still insist on using the request/response model. Even the introduction of Ajax hasn't improved the scene much, replacing blank loading states with spinners.\nUsers would just like to use your application without any interruptions.\n
Contribute for Single Page Applications concept.\nMore dynamic application with a better performance.\n
\n
There is a lot of ways to develop a socket application.\nBut you must start to think different, you must understand that isn&#x2019;t all applications that can be converted to a client side app, you must start to think about architecture, about DCI (Data Context and Interaction) and patterns. The most useful pattern now a days are RestFull applications with an json interface\n
There is a lot of ways to develop a socket application.\nBut you must start to think different, you must understand that isn&#x2019;t all applications that can be converted to a client side app, you must start to think about architecture, about DCI (Data Context and Interaction) and patterns. The most useful pattern now a days are RestFull applications with an json interface\n
There is a lot of tools that can provide you a simple or very complex environment to implement or even develop a whole application using frameworks focused in sockets applications.\n\nAn this are just some of the options, some of those are language independent, others use an external service as Pusher, there is the Juggernaut gem ( from Alex Maccaw ), and even a whole framework, the SocketStream a Node.js based solution, and another Cramp build on top of EventMachine for Ruby.\n\nThe most of those solutions have some relation with Redis.\n
There is a lot of tools that can provide you a simple or very complex environment to implement or even develop a whole application using frameworks focused in sockets applications.\n\nAn this are just some of the options, some of those are language independent, others use an external service as Pusher, there is the Juggernaut gem ( from Alex Maccaw ), and even a whole framework, the SocketStream a Node.js based solution, and another Cramp build on top of EventMachine for Ruby.\n\nThe most of those solutions have some relation with Redis.\n
You can run atomic operations on these types, like appending to a string; incrementing the value in a hash; pushing to a list; computing set intersection, union and difference; or getting the member with highest ranking in a sorted set.\n\nIn order to achieve its outstanding performance, Redis works with an in-memory dataset. \n\nDepending on your use case, you can persist it either by dumping the dataset to disk every once in a while, or by appending each command to a log.\n
You can run atomic operations on these types, like appending to a string; incrementing the value in a hash; pushing to a list; computing set intersection, union and difference; or getting the member with highest ranking in a sorted set.\n\nIn order to achieve its outstanding performance, Redis works with an in-memory dataset. \n\nDepending on your use case, you can persist it either by dumping the dataset to disk every once in a while, or by appending each command to a log.\n
You can run atomic operations on these types, like appending to a string; incrementing the value in a hash; pushing to a list; computing set intersection, union and difference; or getting the member with highest ranking in a sorted set.\n\nIn order to achieve its outstanding performance, Redis works with an in-memory dataset. \n\nDepending on your use case, you can persist it either by dumping the dataset to disk every once in a while, or by appending each command to a log.\n
Now let practice, I decide to introduce to you guys two solutions, one in Ruby, using Rails, and another one Node.js based.\nYou may asking yourself why those two.\nCause I love Ruby and Javascript, but also cause both has the best costs x benefits that I already used until now.\nI would give a try to Cramp too, and some more advanced tool as &#xD8;MQ but I don&#x2019;t had the opportunity to get depth into those yet.\nBut why I love Ruby and Javascript? Cause both don&#x2019;t make sense sometimes.\nI saw this talk on youtube from Gary Bernhardt and decide to bring this to you guys before we started with serious code.\n
Now let practice, I decide to introduce to you guys two solutions, one in Ruby, using Rails, and another one Node.js based.\nYou may asking yourself why those two.\nCause I love Ruby and Javascript, but also cause both has the best costs x benefits that I already used until now.\nI would give a try to Cramp too, and some more advanced tool as &#xD8;MQ but I don&#x2019;t had the opportunity to get depth into those yet.\nBut why I love Ruby and Javascript? Cause both don&#x2019;t make sense sometimes.\nI saw this talk on youtube from Gary Bernhardt and decide to bring this to you guys before we started with serious code.\n
Now let practice, I decide to introduce to you guys two solutions, one in Ruby, using Rails, and another one Node.js based.\nYou may asking yourself why those two.\nCause I love Ruby and Javascript, but also cause both has the best costs x benefits that I already used until now.\nI would give a try to Cramp too, and some more advanced tool as &#xD8;MQ but I don&#x2019;t had the opportunity to get depth into those yet.\nBut why I love Ruby and Javascript? Cause both don&#x2019;t make sense sometimes.\nI saw this talk on youtube from Gary Bernhardt and decide to bring this to you guys before we started with serious code.\n
Now let practice, I decide to introduce to you guys two solutions, one in Ruby, using Rails, and another one Node.js based.\nYou may asking yourself why those two.\nCause I love Ruby and Javascript, but also cause both has the best costs x benefits that I already used until now.\nI would give a try to Cramp too, and some more advanced tool as &#xD8;MQ but I don&#x2019;t had the opportunity to get depth into those yet.\nBut why I love Ruby and Javascript? Cause both don&#x2019;t make sense sometimes.\nI saw this talk on youtube from Gary Bernhardt and decide to bring this to you guys before we started with serious code.\n
Now let practice, I decide to introduce to you guys two solutions, one in Ruby, using Rails, and another one Node.js based.\nYou may asking yourself why those two.\nCause I love Ruby and Javascript, but also cause both has the best costs x benefits that I already used until now.\nI would give a try to Cramp too, and some more advanced tool as &#xD8;MQ but I don&#x2019;t had the opportunity to get depth into those yet.\nBut why I love Ruby and Javascript? Cause both don&#x2019;t make sense sometimes.\nI saw this talk on youtube from Gary Bernhardt and decide to bring this to you guys before we started with serious code.\n
You guys know what WAT means?\n
Lets talk about Ruby\n
Lets talk about Ruby\n
Lets talk about Ruby\n
Lets talk about Javascript\n
Lets talk about Javascript\n
\n
Lets stop talk about languages that sucks lets talk about javascript\n
Lets stop talk about languages that sucks lets talk about javascript\n
Lets stop talk about languages that sucks lets talk about javascript\n
Lets stop talk about languages that sucks lets talk about javascript\n
Lets stop talk about languages that sucks lets talk about javascript\n
Lets stop talk about languages that sucks lets talk about javascript\n
Is super simple and easy to get going. As I said the juggernaut also use Node.js server.\nIt is supported by the most commons browsers in desktop and mobile.\n
Is super simple and easy to get going. As I said the juggernaut also use Node.js server.\nIt is supported by the most commons browsers in desktop and mobile.\n
Is super simple and easy to get going. As I said the juggernaut also use Node.js server.\nIt is supported by the most commons browsers in desktop and mobile.\n
Is super simple and easy to get going. As I said the juggernaut also use Node.js server.\nIt is supported by the most commons browsers in desktop and mobile.\n
Is super simple and easy to get going. As I said the juggernaut also use Node.js server.\nIt is supported by the most commons browsers in desktop and mobile.\n
Is super simple and easy to get going. As I said the juggernaut also use Node.js server.\nIt is supported by the most commons browsers in desktop and mobile.\n
Is super simple and easy to get going. As I said the juggernaut also use Node.js server.\nIt is supported by the most commons browsers in desktop and mobile.\n
\n
\n
\n
\n
\n
SocketStream is an open source Node.js web framework dedicated to building single-page realtime apps.Whether you're building a group chat app, multiplayer game, trading platform, sales dashboard, or any other realtime web app, SocketStream gets you up and running quickly by providing essential functionality and a rapid development environment.\nOn the client-side, you're free to use all the technologies you already know and love - such as jQuery, Mustache, Backbone.js, Ember.js, Angular.js\nSocketStream apps can easily be deployed to Nodejitsu, EC2 servers or any other hosting platform supporting websockets (sadly that excludes Heroku for the moment).\nWorks great with Chrome, Safari, Firefox 6 (and above) using native websockets\n\nWhen you run in production mode these files are automatically packed and minified into one CSS, JS and HTML file per-client.\n\nOptionally use Redis for fast session retrieval, pub/sub, list of users online, and any other data your app needs instantly\n
SocketStream is an open source Node.js web framework dedicated to building single-page realtime apps.Whether you're building a group chat app, multiplayer game, trading platform, sales dashboard, or any other realtime web app, SocketStream gets you up and running quickly by providing essential functionality and a rapid development environment.\nOn the client-side, you're free to use all the technologies you already know and love - such as jQuery, Mustache, Backbone.js, Ember.js, Angular.js\nSocketStream apps can easily be deployed to Nodejitsu, EC2 servers or any other hosting platform supporting websockets (sadly that excludes Heroku for the moment).\nWorks great with Chrome, Safari, Firefox 6 (and above) using native websockets\n\nWhen you run in production mode these files are automatically packed and minified into one CSS, JS and HTML file per-client.\n\nOptionally use Redis for fast session retrieval, pub/sub, list of users online, and any other data your app needs instantly\n
\n
\n
\n
\n
\n
\n
\n
\n
Is super simple and easy to get going. As I said the juggernaut also use Node.js server.\nIt is supported by the most commons browsers in desktop and mobile.\n
\n
\n
\n
My name, where and how you can found me, joke in Italian.\n- I've been a developer for 6 years\n- Love open source development\n
My name, where and how you can found me, joke in Italian.\n- I've been a developer for 6 years\n- Love open source development\n
My name, where and how you can found me, joke in Italian.\n- I've been a developer for 6 years\n- Love open source development\n