ساخت یک وب سرور ساده به وسیله Node.js

در مطلب قبل نگاه کلی به ماهیت وجودی Node.js انداختیم.

اول بریم سراغ نصب Node.js:برای نصب بهترین راه نصب از طریق داکیومنت های سایت github.

بعداز نصب Node در یک فایل جاوااسکریپتی کد زیر را وارد کنید.

var http = require("http");
http.createServer(function (request, response) {
console.log("Request received");
response.writeHead(200, { "Content-Type": "text/plain" });
response.write("Hello World");
response.end();
}).listen(8888, "127.0.0.1");

اسم فایل را Server.js بگذارید.

برای اجرا کافی است سرور node server.js$ را در کنسول خود تایپ کنید.
و در مرورگر خود به آدرس http://127.0.0.1:8888/ بروید.

خب وقتی داریم با جاوا اسکریپت کد می زنیم باید یه زمینه ای از خود این زبان هم داشته باشیم.

همانطور که در کد مشاهده می کنید ما یک ماژول از ماژول های اصلی Node را require کردیم به این معنی که ما می خواهیم از امکانات این ماژول استفاده کنیم.
متد require یک شی از همان جنس به ما بر می گرداند در این جا ما یک شی http داریم که دارای یک متد به نام createServer است.
متد createServer در ورودی یک Callback می گیرد این به آن معنی است که Callback در زمان مشخصی بعد از یک Event خواص اجرا میشود.
در زمانی که Callback ما اجرا می شود دو پارامتر به آن پاس داده می شود request, response.
request: حاوی اطلاعاتی از قبیل مشخصات request دهنده و … که در ادامه مطالب بررسی می شود.
response: به وسیله response می توان به کلاینت مورد نظر جواب مناسب را ارسال کنیم.که در اینجا هدر مربوطه و Hello World است.
createServer شی را بر می گرداند که دارای متد listen است که روی پورت مشخص و آی پی مشخص گوش می دهد.
حال بحث multithread نبودن و پردازش هم زمان چند request پیش می اید که باید متذکر شوم در این جا از async استفاده شده است به کد بالا دقت کنید.ما یک function را پاس داده ایم این function به ازای هر request اجرا می شود.نحوه دقیق تر این موضوع در مطلب بعدی ذکر خواهد شد.یادتون باشه در هر زمان فقط یک Callback اجرا میشه به این معنی که اگه چند تا request بیاد در صف قرار می گیرن.

ارتباط با Asterisk به وسیله Socket Programming در C#

اول باید سراغ این رفت که Socket Programming دقیقاً چی هست؟

برای ارتباط بین دو Application می توان از مفهومی به اسم Socket استفاده کرد.جهت این ارتباط نیاز است به در موئلفه اصلی:

  1. IP
  2. Port

ما در این مطلب قصد داریم از C# استفاده کنیم و پروتکلی که مورد استفاده TCP است.

در این حالت اگر Request ی به سرور برسد تا زمانی که آن Request مدیریت نشود به باقی درخواست ها جواب داده نخواهد شد.برای همین است که ازMultithreading در این کار استفاده می شود.

در این مطلب قصد آموزش Socket Programming نیست و برای آن به شما توصیه می کنم به مقاله جالب سایت codeproject سر بزنید.

 Socket Programming Image
Socket Programming

کد زیر برای وصل شدن به Asterisk کافی است و می توان از آن تمامی Event های مربوط به آن را گوش کرد.

  • private static void Main(string[] args)
     {
     Console.WriteLine("Quick and Dirty Asterisk Manager Daemon Test:\n");
    
    var clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     var serverEndPoint = new IPEndPoint(IPAddress.Parse("Ip"), 5038);
     clientSocket.Connect(serverEndPoint);
    
    clientSocket.Send(
     Encoding.ASCII.GetBytes("Action: Login\r\nUsername: Username\r\nSecret: Pass\r\nActionID: 1\r\n\r\n"));
     do
     {
     Console.WriteLine(clientSocket.Connected);
    
    var buffer = new byte[1024];
     int bytesRead = clientSocket.Receive(buffer);
    
    string response = Encoding.ASCII.GetString(buffer, 0, bytesRead);
    
    if (response != "")
     {
     Console.WriteLine(response);
     }
     } while (clientSocket.Connected);
    
    Console.WriteLine(clientSocket.Connected);
     Console.WriteLine("Connection to server lost.");
     Console.ReadLine();
     }
    
    

اگر مباحث  Socket Programming را خوانده باشید به راحتی می توان کد بالا را درک کرد.

 

 clientSocket.Connect(serverEndPoint);

در کدی که مشاهده کردید ما سعی کردیم به سرور وصل شویم.


 clientSocket.Send(
 Encoding.ASCII.GetBytes("Action: Login\r\nUsername: Username\r\nSecret: Pass\r\nActionID: 1\r\n\r\n"));

در خط بالا ما درخواست Login را به Asterisk می فرستیم.بعد به انتظار دریافت پیغام از استریسک می مانیم.

در آخر هم در یک Loop منتظر دریافت Message می ماند.

کار بیشتر != پول بیشتر

به عنوان کسی که چندین سال هست در حوزه فناوری مشغول به فعالیت هستم، به این نتیجه رسیده ام که کار بیشتر لزوما باعث درآمد بیشتر نمی شه.
موفقیت در حوزه ی IT مستلزم صرف زمان کافی برای بالابردن دانش، انگیزه بالا و استفاده از دانش کسب شده در عمل هست و شخصی که تعادلی بین این موارد داشته باشه میتونه توی این حوزه موفقیت کسب کنه. گاهی اوقات شما در یک پروژه راهکاری ارائه میکنید که بسیار تاثیر گذار هست و برای هم تیمی ها بسیار تحسین برانگیز هست و این حاصل زمانی هست که شما بر روی افزایش دانش خودتون گذاشتید و نه به واسطه سخت کار کردن بر روی پروژه!
در کتاب ۹۷Things Every Programmer Should Know یکی از مواردی که اشاره شده با این مضمون هست که Hard Work Does Not Pay Off! این قسمت نوشته آقای Olve Maudal هست که من در ادامه برگردان فارسی این نوشته رو براتون میذارم:

“به عنوان یک برنامه نویس احتمالا شما هم تاکنون متوجه این قضیه شده اید که کار سخت لزوما موجب در آمد بیشتر نمی شود. شما ممکن است در ذهن خودتان و برخی از همکارانتان این تصور را ایجاد کنید که در حال فعالیت شدید و صرف زمان زیاد روی یک پروژه در دفتر شرکت هستید، اما واقعیت این است که شاید شما با کار کمتر بازدهی بهتری داشته باشید (گاها خیلی بیشتر). اگر میخواهید بر روی کارتان تمرکز داشته باشید و بهره وری بیشتری داشته باشید و در عین حال در هفته بیشتر از ۳۰ ساعت کار می کنید احتمالا شما در حال سخت کار کردن هستید. اما این موضوع را در نظر داشته باشید که باید سعی کنید حجم کاری خود را کمتر کنید تا بهره وری بیشتری داشته باشید و بتوانید کارهای بیشتری انجام بدهید.
این موضوع شاید در نگاه اول بسیار تامل برانگیز باشد، اما حقیقت این است که برنامه نویسی و به طور کلی توسعه نرم افزار شامل فرآیند یادگیری مداوم می باشد.

برنامه نویسی حرفه ای مانند ماراتون سرعت نیست که هدف شما قابل مشاهده باشد. اکثر پروژه های نرم افزاری بیشتر شبیه ماراتون استقامت هستند و شما مسیری طولانی را در پیش رو دارید و گاها تصویری مبهم از انتهای پروژه! بنابراین اگر شما سعی کنید به سرعت هرچه تمامتر کارتان را جلو ببرید اگرچه ممکن است عده ای را تحت تاثیر بگذارید اما در نهایت موفقیتی حاصل نخواهید کرد.بهتر است در کارتان سرعت یکنواختی داشته باشید.
علاوه بر این شما به طور کل باید در زمینه توسعه نرم افزار و به طور خاص در مورد برنامه نویسی دانش خود را افزایش دهید. شما باید کتاب بخوانید، به کنفرانس بروید، با متخصصان دیگر در ارتباط باشید و با ابزارهایی که کار شما را تسهیل میکند آشنا بشوید. به عنوان یک برنامه نویس حرفه ای باید در زمینه کاری خودتان به روز باشید. دقیقا مشابه یک جراح مغز یا خلبانی که انتظار می رود در زمینه کاری و تخصصشان به روز باشند. شما باید عصرها بعد از کار و حتی روزهای تعطیل هم در حال تحصیل و کسب دانش باشید. بنابراین شما نباید عصرها و روزهای تعطیل هم بر روی کار بر روی پروژه تان باشید. آیا به نظر شما منطقی است که یک جراح مغز ۶۰ ساعت در هفته کار کند یا یک خلبان ۶۰ ساعت در هفته پرواز کند؟ البته که نه! تحصیل و کسب دانش بخش حیاتی فعالیت شما به عنوان یک برنامه نویس است.
بر روی پروژه تان متمرکز باشید، با هم تیمی ها در تعامل باشید، سعی کنید راهکارهای مناسبی جهت پیشبرد اهداف پروژه ارائه کنید، مهارت های خودتان را ارتقا دهید و سعی کنید مانند یک همستری (Hamster) که دائما در قفس خود درحال درجا زدن است نباشید.

مانند یک همستر نباشید!
سعی کنید این موضوع را درک کنید که به عنوان یک برنامه نویس اگر میخواهید بر روی کارتان متمرکز باشید و فردی با بهره وری مناسب باشید کار کردن ۶۰ ساعت در هفته کاری منطقی نیست.
پس مانند یک حرفه ای عمل کنید:آماده باشید، تاثیر گذار باشید، نظاره گر باشید و تغییر بدهید.”

روز برنامه نویس

جا داره این روزو به همه برنامه نویسای عزیز تبریک بگم.در ضمن می دونم کاره سختیو انجام میدید ولی حتی یک دهم زحماتتون به نتیجه نمیرسید.منظورم از لحاظ مالیه.واقعا اگه بخواهید خوب و حرفه ای کار کنید باید شبانه روز به صورت هدفمند مطالعه کنید و خیلی بیشتر از یک مهندس عمران یا حتی یک پزشک.ولی در عوض شاید نصف یک پزشک جایگاه داشته باشید چون میگن طرف پزشکه.

Programmers Day T-shirt

مهم نیست می دونم خیلی از شما ها بخاطر عشقتون کار می کنید و نتیجه مالی براتون مهم نیست.

روز برنامه نویس ۲۵۶ مین روز ساله که به نام Programmers Day نام گذاری شده.که امسال روزه ۱۳ سپتامبره و روز جمعه.سایت های مختلفی این روزو جشن گرفتن که جالب ترین اونها گیت هاب که درآن طرز تهیه Cocktails به روش گیکی آموزش داده .

Cocktails for Prgrammers

 

 

حقوق برنامه نویسان در کشور ها و شرکت های مختلف

به ترتیب کشورهای زیر:

  1.  Australia (87K $)
  2.  Japan (86K $)
  3.  US (76K $)
  4. Canada (60K $)
  5. India (12K $)
  6. Malaysia (8K $)
  7. Philippines (7K $)

در زمینه برنامه نوسی و در زمینه گرافیک دیزاینر

  1. Switzerland (96K $)
  2. Australia (64K $).

بیشترین حقوق رو در سال به برنامه نویسا وطراحاشون میدن.

شکل زیر نشان دهنده میانگین حقوق سالیانه به تفکیک کمپانی های دنیای کامپیوتر هستش.

حقوق برنامه نویسان
حقوق برنامه نویسان در شرکت های مختلف

منبع

اولین باگ تاریخ در ۶۶ سال پیش

در ۹ سپتامبر ۱۹۴۷ اپراتور های دانشگاه هاروارد داشتن روی Mark II تست انجام می داند که متوجه یک مشکل جدی شدند.

اولین باگ در تاریخ کامپیوترجالب بدونید خانوم گریس هاپر (اولین زن برنامه نویس )ایده Debugging رو مطرح کرد.

GraceHopper
GraceHopper

همچنین در سایت AmericanHistory کتاب جالبی وجود داره که تاریخچه باگ های کامپیوتری هستش.

مروری بر Node js

در این پست قصد دارم یکی از تکنولوژی های جدید رو بهتون معرفی کنم.تکنولوژی که در نظر سنجی سایت stackoverflow جز تکنولوژی هایی بوده که خیلی ها رو مبهوت خودش کرده.

چرا Node js؟

nodejs چیست
nodejs

این تعریف سایت Node  هستش:

Node.js is a platform built on Chrome’s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.

JavaScript is an assembly language. The JavaScript + HTML generate is like a .NET assembly. The browser can execute it, but no human should really care what’s there. – Erik Meijer

  •  Asynchronous Programming  را ب راحتی تجربه می کنید.
  •  جامعه سورس باز با ده ها ماژول ارزشمند.

Node.js چیست؟

Node.js امکان ساخت برنامه های scalable  شبکه را با جاواسکریپت فراهم می کند.نود بر روی V8 JavaScript Engine ساخته شده است.

Google V8 JavaScript Engine یک موتور جاوااسکریپت متن‌باز است که توسط گوگل توسعه‌یافته و همراه مرورگر گوگل کروم عرضه می‌شود. لارس باک رئیس برنامه‌نویسی آن است.
وی با کامپایل کردن جاوااسکریپت به زبان محلی ماشین قبل از اجرا به جای اجرای بایت‌کد یا سپردن آن به مفسر کارایی را افزایش می‌دهد. بیشتر افزایش کارایی در آن به‌وسیلهٔ به‌کارگیری فن‌هایی بهینه‌سازی‌ای چون استفاده از نهانگاه درون‌برنامه‌ای (Inline caching) به‌دست می‌آید. با این قابلیت‌ها برنامه‌هایی که با موتور وی اجرا می‌شوند سرعت خوبی دارا هستند که با کدهای اجرایی کامپایل شده قابل مقایسه است.

چیزهایی که میشه با Node js نوشت:

  1. Web Socket Server
  2. Fast File Upload
  3. ad Server
  4. Any real-time application

Node js چه چیزهایی نیست؟

  1. یک فریمورک وب نیست.
  2. برای تازه کارها نیست.
  3. Multithread  نیست.

نحوه پردازش یک Request در Node به وسیله Event انجام می شود.به طور مثال برای پردازش از یک لوپ استفاده می شود و درآن منتظر Request جدید می ماند به محض آن که Request  جدید رسید آن را پردازش می کند.

png;base643f17317a5d7e7fe9شکل فوق کاملا مشخص کننده نحوه رفتارEvent loop هست.

 

در مطالب بعدی نگاهی دقیق تر به داخل Node خواهیم انداخت.