hackdev

hackdev

کالی لینوکس

سلام خدمت دوستان گل

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

کالی لینوکس(kali linux)سیستم عامل متن بازی هست که مخصوص هک ساخته شده و به همین دلیل حدودا 400 اسکریپت یا برنامه مخصوص هک به صورت پیشفرض در این سیستم عامل وجود دارد


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


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

کار با کتابخانه DateTime

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

قراره یاد بگیریم که چطور میشه از DateTime استفاده کرد ، یا اصلا کاربردش چیه و ...

کاربرد این کتابخونه همونطور که از اسمش مشخصه ، برای کار کردن با تاریخ و زمان و ... هستش

مثلا میتونیم به ویروسمون دستور بدیم که اگه تاریخت برابر با فلان چیز شد

فلان عمل رو انجام بده و ...
بازم مثل قبل میگم ...

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

اول از همه باید کتابخونه ی مورد نظرش رو import کنیم

import datetime

میتونیم تاریخ امروز سیستم رو بیرون بکشیم

t_day = datetime.date.today()
print(t_day)

میتونیم اگه به تاریخ و ماه و روز اگه بصورت تنهایی نیاز داشتیم که بگیم اگه به فلان چیز رسیدی فلان کار رو انجام بده بصورت پایین کد مینویسیم

date = datetime.datetime.today()
print (date.year)
print (date.month)
print (date.day)

حالا خروجی کد پایین رو هم یه نگاه بندازین !

date_time = datetime.datetime.today()
print (date_time.ctime())

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

مثلا میتونیم اسم هفته ای که توش هستیم رو بدست بیاریم و ... که چون کم نیستن من فقط یه مثالشو میگم

اما اگه تو نت سرچ کنین لیست خوبی در این مورد گیر میارین !

مثلا من اسم روزی از هفته رو میخوام که الان توش هستم

اونموقع میتونم از قالب a% استفاده کنم که شما هم به جای a% ، میتونین اسم قالب رو که تو نت پیدا کردین ، وارد کنین ...

print(datetime.datetime.today().strftime("%a"))

خب دیگه از بحث تاریخ که بکشیم بیرون

میرسیم به ساعت و ... که مثلا بگیم فلان ساعت فلان کار رو انجام بده

میتونیم از کد پایین استفاده کنیم

time = datetime.time(1,2,3)
print (time)

حالا با یه سری تغییرات و ... میتونیم تبدیل به رشته کنیم و با split کردن که یکی از توابع رشته ها هسسش :)

بدست آوردن مشخصات کامپیوتر با پایتون

توی این پست از کار با ماژول ها قراره با کتابخونه ی platform توی پایتون کار کنیم که اطلاعاتی رو در رابطه با سیستم در اختیارمون میزاره

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

اول از همه کتابخونه ی مورد نظر رو ایمپورت میکنیم :

import platform

بدست آوردن نوع 32 بیتی یا 64 بیتی بودن ویندوز :

print platform.machine()

بدست آوردن اسم سیستم تو شبکه کامپیوتری :

print platform.node()

بدست آوردن اسم ویندوز به همراه ورژن و ... اون :

print platform.platform()

بدست آوردن اطلاعاتی راجب پردازشگر یا همون cpu :

print platform.processor()

کد پایین نسخه پایتون + تاریخ ساخته شدن اون نسخه رو در قالب یه تاپل بر میگردونه :

print platform.python_build()

شناسایی کامپایلر مورد استفاده برای کامپایل کردن برنامه ی پایتون :

print platform.python_compiler()

کد پایین ورژن پایتون رو بر میگردونه :

print platform.python_version()

کد پایین هم اسم ویندوز رو بر میگردونه ، مثلا به من میگه windows 8.1 :

print platform.release()

کد پایین هم میگه که سیستم عامل از چه نوعیه ، مثلا میگه لینوکسه ، ویندوزه و ... :

print platform.system()

کد پایین هم داخل یه تاپل ، یه خرده اطلاعات کلی به ما میده که خودتون میتونین تست کنین و ببینین که چی میگه :)

print platform.uname()

خب دیگه اینا هم از توابع مهم ماژول platform ...

کار با کتابخانه رندوم در پایتون

سلام برای شروع اول باید کلاس random رو import کنید:

import random
random.seed()

تولید یک عدد تصادفی بین 0.0 و 1.0 :

import random
random.seed()
print(random.random())

تولید عدد تصادفی بین دو عدد (دارای رنج):

import random
random.seed()
print(random.randint(1,10))
//5
print(random.uniform(3.2, 6.7))
//3.4089421725853639

توجه کنید دو علامت // به معنای یک نتیجه هستند و جزء کدهای ما نیستند

انتخاب رشته ای تصادفی:

print(random.choice("a string"))
//t
print(random.choice(["some", "random", "strings"]))
//random
print(random.choice(["a string", 10, 14.32, [1,5,5]]))
//[1,5,5]

حالا میخوام قدرت پایتون رو نشونتون بدم بهم ریختن اعداد:

shuffleMe = [0,1,2,3,4,5,6,7,8,9]
random.shuffle(shuffleMe)
print(shuffleMe)
//[2, 4, 6, 3, 7, 8, 0, 5, 9, 1]

نمایش کاراکتر یا اعداد تصادفی:

pickChars = "some things to pick"
print(random.sample(pickChars, 6))
//['c', 's', 'e', 'n', 'g', ' ']
pickNums = [0,1,2,3,4,5,6,7,8,9]
print(random.sample(pickNums, 5))
//[6, 4, 5, 9, 8]
import random
a = random.randint(0,50)
print(a)
در این کد عددی تصادفی بین 0 تا 50 ایجاد خواهد شد

فواید زبان پایتون

پایتون چیست و در چه زمینه‌هایی به کار گرفته می‌شود؟

پایتون از جمله زبان‌های برنامه‌نویسی قدرتمندی است که در زمینه علم داده‌ها، یادگیری ماشینی، خودکارسازی سامانه‌ها، توسعه وب، واسط‌های برنامه‌نویسی و... به کار گرفته می‌شود. اما سؤالی که بسیاری از کاربران و به‌ویژه برنامه‌نویسان مبتدی مطرح می‌کنند این است که اساساً پایتون چیست و آیا ارزش آن‌ را دارد تا وقت خود را روی یادگیری این زبان سرمایه‌گذاری کنیم؟ در این مقاله به‌شکل ساده‌ای به این پرسش پاسخ خواهیم داد.

برای مطالعه سلسله مقالات آموزش زبان برنامه‌نویسی پایتون(اختصاصی شبکه) روی لینک های زیر کلیک کنید

سری آموزش رایگان پایتون 3 (آخرین نگارش) - ویژه مبتدیان

سری آموزش رایگان پایتون 2


 

شاید بتوانیم این ‌گونه بیان کنیم که پایتون در مقایسه با زبان‌های بزرگ یک زبان نسبتاً جدید به شمار می‌رود. این زبان برنامه‌نویسی در سال 1991 به دنیایبرنامه‌نویسی وارد شد. از همان ابتدا، پایتون به‌منظور پر کردن شکاف‌های موجود دردنیای برنامه‌نویسی و ارائه راهکاری به‌منظور نوشتن اسکریپت‌هایی که فرآیند انجام یکسری از کارهای روتین‌ خسته‌کننده را به ‌طور خودکار اجرا کنند یا ساخت یک نمونه اولیه از برنامه‌های کاربردی که در یک یا چند زبان دیگر پیاده‌سازی شوند، مورد استفاده قرار گرفت. با این حال در چند سال گذشته، پایتون به یکی از ابزارهای تراز اول در زمینه توسعه برنامه‌های کاربردی، مدیریت زیرساخت‌ها و تحلیل داده‌ها تبدیل شده است. امروزه پایتون در زمینه توسعه برنامه‌های کاربردی تحت وب و مدیریت سیستم‌ها و تجزیه و تحلیل بزرگ داده‌ها که رشد انفجاری به خود گرفته‌اند و همچنین هوش مصنوعی به یکی از بازیگران اصلی دنیای فناوری تبدیل شده است. پایتون این موفقیت چشم‌گیر و کاربرد گسترده را مدیون یکسری ویژگی‌های ارزشمندی است که هم در اختیار توسعه‌دهندگان حرفه‌ای و هم در اختیار توسعه‌دهندگان تازه‌کار قرار داده است. از جمله این ویژگی‌ها به موارد زیر می‌توان اشاره کرد.

یادگیری پایتون ساده است

یادگیری کم‌دردسر پایتون به برنامه‌نویسان تازه‌کار اجازه داده است با صرف کمی وقت اصول اولیه این زبان را یاد بگیرند و اولین برنامه کاربردی خود را با این زبان طراحی کنند. این زبان به گونه‌ای ساخته شده است که ترکیب نحوی آن کاملاً خوانا است و برنامه‌نویسان بدون مشکل خاصی قادرند منطق دستورات را به‌شکل صریح و روشنی درک کنند و برای همکاران خود شرح دهند. سادگی، خوانایی و دور بودن از پیچیدگی‌های رایج باعث شده است تا پایتون به گزینه ایده‌آلی برای تدریس در مدارس و مراکز آموزشی تبدیل ‌شود. همین سادگی و دور بودن از پیچیدگی‌ها است که باعث شده است پایتون اولین انتخاب برنامه‌نویسانی باشد که تازه به دنیایبرنامه‌نویسی قدم گذاشته‌اند. تسلط بر زبان پایتون به‌معنای آن است که طراحان می‌توانند زمان بیشتری را برای فکر کردن درباره یک مشکل و پیدا کردن راه‌ حلی برای آن صرف و در مقابل زمان کمتری برای فکر کردن در مورد ترکیب نحوی و پیچیدگی‌های دستورات این زبان صرف کنند. همچنین، زمانی که یک برنامه به ‌طور کامل نوشته شد، طراحان با صرف کمترین زمان ممکن می‌توانند منطق به کار گرفته در کدها را برای دیگران تشریح کنند، به‌دلیل آنکه همه چیز روشن و گویا است.

پایتون به‌شکل گسترده‌ای به کار گرفته شده و پشتیبانی می‌شود

زبان پایتون دو ویژگی یک زبان خوب یعنی محبوبیت و کاربرد گسترده را توأمان با یکدیگر در اختیار دارد. کافی است به آمارهای منتشر شده از سوی منابع معتبری همچون Tiobe و پروژه‌هایی که روی سایت گیت‌هاب قرار گرفته و با پایتون نوشته شده‌اند نگاهی داشته باشید تا متوجه شوید این زبان تا چه اندازه نزد طراحان محبوب است. (شکل 1) 
برنامه‌های نوشته شده با زبان پایتون روی سیستم‌ عامل‌ها و سکو‌های اصلی و سیستم ‌عامل‌های خاص‌تر به‌خوبی اجرا می‌شوند. بخش اعظمی از کتابخانه‌های بزرگ و سرویس‌های مبتنی بر API به اشکال مختلفی پیوندهای مرتبط با زبان پایتون را در خود جای داده‌اند، به ‌طوری که به زبان پایتون اجازه داده‌اند از طریق واسط‌ها با این سرویس‌ها ارتباط برقرار یا به‌طور مستقیم از کتابخانه‌ها استفاده کند. در حالی که پایتون را در گروه سریع‌ترین زبان‌های برنامه‌نویسی نمی‌توان قرار داد و شاید کند بودن نقطه ضعف اصلی این زبان به شمار می‌رود، اما در مقابل تطبیق‌پذیری بسیار بالایی دارد.
پایتون زبانی نیست که برای انجام کارهای عادی و پیش پا افتاده مورد استفاده قرار گیرد. از این زبان به‌منظور ساخت برنامه‌های کاملاً حرفه‌ای با کیفیت بالا، برنامه‌های مستقل و سرویس‌های وب می‌توان استفاده کرد. اسکریپت‌هایی که با این زبان نوشته می‌شوند، به‌سادگی قادرند فرآیندهای بزرگی را مدیریت و خودکارسازی کنند. 

پایتون برای انجام چه کارهایی مورد استفاده قرار می‌گیرد؟

پایتون یک زبان برنامه‌نویسی چندمنظوره و شی‌گرا است که برای توسعه سایت‌های پویا، تحلیل داده‌ها و نوشتن برنامه‌های دسکتاپ می‌توان از آن استفاده کرد. اما اساسی‌ترین کاربرد پایتون در ارتباط با اسکریپت‌نویسی و خودکارسازی است. پایتونتنها یک جایگزین برای اسکرپیت‌های شل یا فایل‌های دسته‌ای نیست، به‌واسطه آنکه از پایتون برای تعامل خودکار با مرورگرهای وب، برنامه‌های گرافیکی و پیکربندی سیستم‌ها از طریق ابزارهایی همچون Salt و Ansible می‌توان استفاده کرد. 

از پایتون در ارتباط با برنامه‌نویسی‌های عادی و رایج نیز می‌توان استفاده کرد

طراحان و توسعه‌دهندگان نرم‌افزار این توانایی را دارند تا هر دو گروه برنامه‌های کنسولی و گرافیکی را با پایتون ایجاد و آن‌ها را به‌شکل خوداجرا مستقر کنند. پایتونبه طور ذاتی این توانایی را ندارد تا یک فایل‌ باینری مستقل را از یک اسکریپت‌ ایجاد کند. اما پکیج‌های ثالثی شبیه به cx_Freeze یا PyInstaller این کاستی پایتون را جبران کرده‌اند. 

زبان پایتون در ارتباط با یادگیری ماشینی و علم داده‌ها نیز به کار گرفته می‌شود

در چند سال اخیر فرآیند تجزیه و تحلیل داده‌های مرتبط با فناوری اطلاعات بیش از اندازه پیچیده شده است، به همین دلیل زبان پایتون و در تعقیب آن زبان آر به ستارگان یکه‌تاز این میدان تبدیل شده‌اند. با توجه به محبوبیت بیش از اندازه زبان پایتون امروزه شاهدیم که طیف گسترده‌ای از کتابخانه‌های مورد استفاده در یادگیری ماشین و علم داده‌ها یک واسط‌ یا به عبارت دقیق‌تر رابط‌های ویژه زبان پایتون را ارائه کرده‌اند. 

پایتون در ارتباط با وب سرویس‌ها و توابع RESTful نیز به کار گرفته می‌شود

کتابخانه‌های محلی زبان پایتون به‌همراه چهارچوب‌های وب بخش ثالث سریع‌ترین و راحت‌ترین راهکار را در اختیار طراحان وب قرار داده‌اند تا بدون دردسر خاصی بتوانند توابع REST چندخطی یا یک سایت داده‌محور مملو از اطلاعات را با استفاده از زبان پایتون طراحی کنند. REST (سرنام Representational State Transfer) یک معماری وب سرویس است که از پروتکل HTTP برای انتقال اطلاعات میان کلاینت و سرور استفاده می‌کند. جدیدترین نگارش‌های عرضه شده از زبان پایتون به‌شکل قدرتمندی از عملیات غیرهم‌زمان پشتیبانی می‌کند. پشتیبانی از عملیات غیرهم‌زمان به‌معنای آن است که سایت‌ها قادرند ده‌ها هزار درخواست در هر ثانیه را از طریق کتابخانه‌های درستی که مورد استفاده قرار می‌دهند مدیریت کنند. 

شکل 1- گزارشی که سایت tiobe در آگوست 2017 منتشر کرد، نشان داد که پایتون هنوز هم جزء پنج زبان برتر برنامه‌نویسی است. 

پایتون در ارتباط با برنامه‌نویسی Metaprogramming به کار گرفته شود

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

پایتون یک زبان چسبنده است

کدهای پایتون خاصیت چسبندگی دارند، به‌ طوری که در بعضی موارد از زبان پایتونبه‌عنوان یک زبان چسبنده (Glue language) نام برده می‌شود. زبان پرل نیز چنین ویژگی را دارد. این ویژگی به شما اجازه می‌دهد کدهای متفاوت را به یکدیگر وصل کنید. (به طور معمول کتابخانه‌هایی با رابط‌های زبان سی) از این تکنیک در زمینه علم داده‌ها و یادگیری ماشینی استفاده می‌شود. 

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

جوانب مثبت و منفی زبان پایتون

ترکیب نحوی زبان پایتون کاملاً خوانا و تمیز است. به ‌طور مثال، نوشتن یک برنامه استاندارد Hello world در نسخه 3.x این زبان به دور از هرگونه کد اضافی به‌صورت (”!print(“Hello world نوشته می‌شود. زبان پایتون عناصر نحوی زیادی را ارائه می‌کند که در مدت زمان اجرای یک برنامه می‌توان از آن‌ها استفاده کرد. به‌ طور مثال، برنامه ساده زیر را در نظر بگیرید که برای خواندن خطوط موجود در یک فایل متنی داخل یک شی List نوشته شده است.

with open(‘myfile.txt’) as my_file:
     file_lines = [x.strip(‘\n’) for x in my_file]

ساختار with/as از جمله اشیای زبان پایتون به شمار می‌رود که به قابلیت Context manager تجهیز شده است. این ساختار راهکار کارآمدی برای تعریف یک شی تخصیص داده شده به یک بلوک از کدها و سپس آزاد کردن شی از بلوکی که به آن تخصیص داده شده است را ارائه می‌کند. در این مثال، شی my_file از طریق تابع open معرفی شده است. همان ‌گونه که مشاهده می‌کنید، در زبان پایتون اغلب کارها با حداقل کدنویسی به سرانجام می‌رسند. در مثال فوق، به‌جای آنکه به چند خط کدنویسی برای باز کردن یک فایل، خواندن خطوط مختلف و درنهایت بستن فایل نیاز داشته باشید، تنها از طریق دو خط این کارها را انجام دهید. 
این تکنیک در مقایسه با به‌کارگیری بلوک Try-finally ساده‌تر بوده و از خوانایی بیشتری برخوردار است. ساختار [x … for x in my_file] یکی دیگر از تکنیک‌های مختص زبان پایتون است. این ترکیب نحوی به یک عنصر تخصیص داده شده که شامل عناصر دیگری است اجازه می‌دهد (در این مثال my_file و خطوطی که همراه با آن هستند) که تکرار شده و به عناصر تکرارشونده نیز (در این مثال x) اجازه می‌دهد که پردازش شده و به‌ طور خودکار به داخل فهرست اضافه شوند. همانند هر زبان دیگری امکان انجام این کار از طریق یک حلقه for…. نیز امکان‌پذیر است، اما پایتون به شما اجازه می‌دهد کارها را با کمترین پیچیدگی و بالاترین خوانایی انجام دهید. شبیه به زبان‌های دیگری همچون جاوا، سی شارپ و گو، زبان پایتون برای مدیریت حافظه از تکنیک Garbage collections استفاده می‌کند. در نتیجه برنامه‌نویس در زمان نوشتن اشیا و آزادسازی اشیا دغدغه‌‌ای نخواهد داشت. به‌طور معمول، فرآیند Garbage collection در پس زمینه و به‌شکل خودکار انجام می‌شود. اما اگر مشکلی در این زمینه به وجود آید، برنامه‌نویس می‌تواند این فرآیند را به‌طور دستی مدیریت کند. یکی دیگر از ویژگی‌های جالب پایتون پویایی این زبان است. هر چیزی در این زبان همچون توابع و خود ماژول‌ها به‌عنوان یک شی شناخته و مدیریت می‌شوند. در حالی که این تکنیک تا حدودی سرعت را قربانی می‌کند، اما در مقابل اجازه می‌دهد کدهای سطح بالا را به‌سادگی بنویسید. این تکنیک نه‌تنها به طراحان اجازه می‌دهد اشیای پیچیده را به‌سادگی و از طریق تنها چند دستورالعمل مدیریت کنند، بلکه به آن‌ها اجازه می‌دهد بخش‌هایی از برنامه را در صورت لزوم به‌شکل انتزاعی تعریف کنند. شاید یکی از بهترین یا بدترین ویژگی‌های زبان پایتون در ارتباط با فضای سفید است. توررفتگی‌ها و رفتن به خطوط دوم در زبان پایتون تنها برای خوانایی برنامه نیست. 
فضای سفید یکی از اصلی‌ترین بخش‌های ترکیب نحوی پایتون به شمار می‌رود. مفسران زبان پایتون برنامه‌هایی را که به‌شکل درستی از دندانه‌‌گذاری به‌منظور نشان دادن جریان کنترل برنامه استفاده نکرده باشند رد می‌کنند. 

پایتون 2 در مقابل پایتون 3

در حال حاضر، دو نسخه از زبان پایتون در اختیار برنامه‌نویسان قرار دارد. هریک از این دو نسخه ویژگی‌های خاص خود را دارند. پایتون نسخه 2.X نسخه قدیمی‌تر است و پشتیبانی رسمی و عرضه به‌روزرسانی‌ها برای این نسخه تا سال 2020 ادامه خواهد داشت. حتی این احتمال وجود دارد که پس از این تاریخ نیز به‌صورت غیررسمی از این نسخه پشتیبانی به عمل آید. نسخه 3.X نسخه جدیدتر است که یکسری ویژگی‌های مفید و البته مهم دارد. 

پایتون یک زبان برنامه‌نویسی سطح بالا است، در نتیجه برای برنامه‌نویسی‌های سطح سیستمی همچون درایورنویسی یا هسته‌ سیستم‌ عامل‌ها مناسب نیست

ویژگی‌هایی که در نسخه 2.x وجود ندارند. مفسران کارآمدتر و کنترل‌های هم‌روندی بهتر از جمله این ویژگی‌ها هستند. اگر در گذشته برای نوشتن یک برنامه هم‌روند در پایتون با مشکل روبه‌رو بودید، نسخه 3.x این مشکل شما را برطرف کرده است. با وجود این، پذیرش پایتون3 به‌آرامی انجام گرفت، در نتیجه پشتیبانی از یکسری کتابخانه‌های بخش ثالث روند نسبتاً کندی داشته است. اغلب کتابخانه‌های پایتون تنها در نسخه 2 پشتیبانی می‌شوند که همین موضوع سوئیچ کردن به نسخه 3 را با دشواری همراه می‌سازد. اما در چند سال گذشته، تعداد کتابخانه‌هایی که تنها در نسخه 2 پشتیبانی می‌شدند رو به افول نهاده است و اکثر این کتابخانه‌ها با هر دو نسخه سازگاری دارند. در مقطع فعلی به دلایل مختلفی می‌توان اشاره کرد که مهاجرت به پایتون 3 را توجیه‌پذیر می‌سازند.

آیا زبان پایتون به‌لحاظ سرعت کند است؟

یکی از نکات رایجی که در ارتباط با پایتون وجود دارد مبحث کند بودن آن است. این موضوع تا حدودی صحت دارد. برنامه‌های نوشته شده با پایتون در مقایسه با برنامه‌هایی که به زبان‌های سی، سی پلاس پلاس و جاوا نوشته می‌شوند عمدتاً کندتر اجرا می‌شوند. اما سؤال این است که چرا این برنامه‌ها کند هستند؟ 
بسیاری بر این باورند که مشکل کند بودن به دلیل آن است که محیط‌های زمان اجرای پایتون مبتنی بر مفسر هستند و اگر از کامپایلر استفاده شده بود مشکل کندی برطرف می‌شد، اما این تمام ماجرا نیست. 
پویایی ذاتی و انعطاف‌پذیری اشیا در پایتون باعث شده است تا فرآیند بهینه‌سازی سرعت به‌سختی امکان‌پذیر باشد. با وجود این، مبحث سرعت مشکل بزرگی نیست که پایتون را تحت‌الشعاع خود قرار دهد. به‌واسطه آنکه راهکارهایی برای حل این مشکل وجود دارد. پایتون راهکارهای مختلفی برای بهینه‌سازی سرعت در اختیار دارد.
اگر گفته می‌شود که یک برنامه نوشته شده با پایتون کند است، به‌معنای آن نیست که این برنامه تا آخرین روزهای حیاتش کند خواهد بود. بیشتر برنامه‌های پایتون کند هستند، به‌واسطه آنکه ممکن است از کتابخانه‌های استاندارد پایتون استفاده نکرده یا به‌درستی از ویژگی‌های موجود در پایتون بهره نبرده‌ باشند. 
عملیات ریاضی و آماری می‌توانند از طریق کتابخانه‌هایی همچون NumPy و Pandas و محیط زمان اجرای PyPy سریع‌تر شوند و به‌شکل قابل توجهی سرعت برنامه‌هایپایتون را افزایش دهند. درنهایت اگر به‌دنبال داده‌کاوی داده هستید، بهتر است اززبان پایتون غافل نشوید.

هوش مصنوعی

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

- هوش مصنوعی چیست؟ 
هوش مصنوعی، هوش ماشین هاست! در واقع شاخه ای از علوم کامپیوتر است که قصد دارد راه حل های الگوریتمی را ارائه کند تا بتوانیم به وسیله آنها در ماشین ها هوشمندی ایجاد کنیم. اما این تعریف کافی نیست؛ اول از همه باید بدانیم که تعریف هوشمندی چیست و بعد باید منظور از ماشین را دربیابیم:
 
استدلال، منطق، تصمیم گیری ؛ این ها توانایی هستند که شما از آنها استفاده می کنید. پس شما هوشمند هستید. اگر این توانایی ها را در کامپیوتر هم ایجاد کنیم، آنگاه به ماشین هوشمند دست می یابیم! به همین سادگی ... ولی به جز این ها چیز های دیگری هم در رابطه با تعریف هوشمندی وجود دارند که دانستن آنها را می توان مهم ارزیابی کرد. در واقع بحث هایی که در مورد هوشمندی و هوش مصنوعی مطرح شده است؛ تنها به دوره ی امروزه ی ما و قرن 21 مربوط نمی شود، بلکه از سال 1950 این مباحث به طور جدی مطرح شد.

- پیشینه ی هوش مصنوعی: 
باید گفت که از این نظر هوش مصنوعی یکی از غنی ترین تاریخ ها را دارد، منتها در قصه ها! ماشین ها و مخلوقات مصنوعی باشعور، اولین بار در افسانه های یونان باستان مطرح شدند. شبه انسان ها باور داشتند که باید یک تمدن بزرگ را تشکیل دهند؛ تندیس ها و مجسمه های انسان نما در مصر و یونان به حرکت در آمده بودند و ... حتی در مواردی این قصه ها، پای جابر بن حیّان و چند تن دیگر را هم به سازندگان موجودات مصنوعی باز کردند.
 
از قصه ها که بگذریم ؛ فیلسوف ها و ریاضی دان ها از مدت ها پیش مباحث مربوط به استدلال و منطق را پیش کشیدند و امروزه این مباحث به صورت قرار دادی، به رسمیت پذیرفته شده است. این گونه منطق ها اساس کامپیوتر های دیجیتال و برنامه پذیر شده اند. یکی از افرادی که نقش اساسی و مهمی در این مورد ایفا کرد آقای آلن تورینگ بود.

نظریه تورینگ: 
تئوری تورینگ مبتنی بر این بود که می توانیم با استفاده از نشانه ها و اعدادی مانند 0 و 1، هر استدلال ریاضی ای را در کامپیوتر عملی کنیم. همزمان با این نظریه کشف های تازه ای در زمینه ی عصب شناسی، نظریه اطلاعات و فرمانشناسی، به وقوع پیوسته بود. این پیشرفت ها الهام بخش گروهی کوچک از پژوهشگران شد تا به طور جدی به مساله ایجاد یک مغز الکترونیکی رسیدگی نمایند.
 
- تست تورینگ: 
در سال 1950، آلن تورینگ مقاله ای را در رابطه با هوش مصنوعی منتشر ساخت که بعد ها به تست تورینگ مشهور شد. در این مقاله عنوان شده بود که اگر فردی از پشت یک دیوار یا هر چیز جدا کننده دیگری، با کامپیوتر مکالمه کتبی داشته باشد و نداند که طرف مقابلش انسان نیست و پس از پایان مکالمه نیز متوجه این موضوع نشود، آنگاه می توان کامپیوتر را ماشینی هوشمند نامید زیرا توانسته است که در برابر یک انسان به اندازه کافی از استدلال و منطق استفاده کند. تست تورینگ تا حدی توانست هوش مندی را توجیه کند ولی فقط ((تا حدی))! اما از آن زمان تا کنون ماشینی اختراع نشده است که توانسته باشد این تست را با موفقیت بگذراند. هر چند زبان AIML ابداع شد، اما این زبان هرگز به این حد از هوش مصنوعی دست نیافت.
 
تیمی که در زمینه هوش مصنوعی تحقیق می کردند، در تابستان سال 1956، کنفرانسی را در محوطه کالج دارتموس برگزار کردند. این کنفرانس به همراه افرادی مانند جان مک کارتی، ماروین مینسکی، آلین نویل و هربت سیمون که برای دهه ها پیشتازان تحقیق برای هوش مصنوعی بودند انجام شد. آنها و دانش آموزان آنها، برنامه ای نوشته بودند که حقیقتا برای عده زیادی از مردم شگفت آور بود. این برنامه می توانست مشکلات نوشتاری در جبر را حل کند، استدلال های منطقی را اثبات کند و به زبان انگلیسی سخن بگوید. در اواسط دهه ی 1960، بودجه سنگینی برای دایرکردن آزمایشگاه های تحقیقاتی در گرداگرد دنیا، از سوی حوزه ی دفاعی ایالات متحده آمریکا، اختصاص داده شد. پیشتازان هوش مصنوعی درباره آینده آن در جهان بسیار خوش بین بودند. هربت سیمون پیشبینی کرده بود که در مدت 20 سال، کامپیوتر های هوشمند می توانند، هر کاری را که انسان انجام می دهد، انجام دهند. در واقع مشکلات بزرگی که در آن زمان برای ایجاد هوش مصنوعی وجود داشت، اساسا حل شده بود.
 
- زمستانی سخت برای هوش مصنوعی: 
علیرغم چیز هایی که در بالا گفته شد، تیم مذکور، در شناخت و رفع برخی از مشکلات هوش مصنوعی با شکست مواجه شد، در سال 1970 در مقابل انتقادات آقای جیمز لایتهیل از انگلستان و فشار های مداوم کنگره برای کم کردن بودجه برای پروژه های بزرگ، دولت های انگلیس و آمریکا تمام پژوهش های به نتیجه نرسیده برای هوش مصنوعی را لغو کردند و در اندک سالیان بعد از آن، به سختی برای هوش مصنوعی، بودجه اختصاص داده می شد. این دوره را زمستان هوش مصنوعی یا A.I winter می نامند.
 
به زودی در سال 1980، پژوهش ها بر روی هوش مصنوعی از سر گرفته شد و این امر مدیون این بود که سیستم های هوشمند، به موفقیت های تجاری دست یافتند. سیستم های هوشمند، ترکیب هایی از هوش مصنوعی بودند که مهارت و دانش و توان تجزیه تحلیلی یک متخصص را شبیه سازی می کردند. در سال 1985، هوش مصنوعی به بازار یک میلیارد دلاری دست یافت و در همان زمان پروژه ی کامپیوتر های نسل پنجم ژاپن، که متوقف شده بود، از سر گرفته شد و بودجه ای برای تحقیقات آکادمیک در این زمینه در نظر گرفته شده بود. اما در سال 1987 باز هم چرخ گردان به گونه ای دیگر چرخید و بازار فروش ماشین های پردازش لیست (Lisp Machines) (با زبان Lisp) که با مشکلاتی موجه بودند، نابود شد و در یک ثانیه تمام آبروی هوش مصنوعی را هم با خود برد. پس این بار زمستان طولانی تر و سخت تری برای هوش مصنوعی فرارسید.
 
- پس از آن، بهاری نو : 
پس از این مشکلات، در دهه 1990 و نزدیک به قرن بیست و یکم، هوش مصنوعی به یکی از بزرگ ترین موفقیت های خود دست یافت. اگر چه چیز هایی پشت پرده ماندند ولی هوش مصنوعی در زمینه های مهمی مانند استدلال و منطق، داده کاوی، تشخیص های پزشکی و طیف های گسترده ای از تکنولوژی و صنعت به کار گرفته می شد.

- مقایسه، استدلال و حل مسائل: 
خیلی زود توسعه دهندگان هوش مصنوعی به این نتیجه رسیدند که باید در الگوریتم های خود از نحوه حل مساله ((گام به گام)) استفاده کنند. در واقع انسان ها هم معمولا برای حل مواردی از جمله: ساختن پازل و ... از این روش استفاده می کنند. آنها همچنین توانستند که پس از دهه های 80 و 90 الگوریتم های موفقیت آمیزی را برای درک داده ها و اطلاعات نا کامل عرضه کنند که این الگوریتم ها از احتمالات، برای درک این اطلاعات استفاده می کردند.
 
برای حل مسائل سخت، بیشتر این الگوریتم ها به کامپیوتر های بزرگ و قدرتمندی برای پردازش نیاز داشتند. بسیاری از این الگوریتم ها به مقدار زیادی حافظه (رم) نیاز داشتند و حتی در صورت فراهم آمدن آن، با وجود سخت افزار های آن زمان، مدت مورد نیاز برای پردازش نجومی بود. بنابر این می توان این مساله را دریافت که: جستجو برای الگوریتم های بهتر و موثر تر در آن زمان، از اولویت های اصلی پژوهشگران هوش مصنوعی بود.
 
انسان برای حل مسائل خود خیلی سریع عمل می کند. چیزی که باید فهمید این است که اگر چه انسان در جمع و تفریق اعداد از کامپیوتر شکست می خورد، اما مساله فقط جمع و تفریق نیست. در واقع اولین گام برای حل مساله درک آن است و این چیزی است که برای انسان بسیار ساده و برای کامپیوتر ها بسیار سخت است. بر این اساس آنها به تحقیقات زیادی پرداختند و به این نتیجه رسیدند که باید برای بازدهی بیشتر از شبکه های عصبی استفاده کنند. این کار به آنها کمک می کرد تا بتوانند به ساختار اعصاب و مغز انسان و سایر حیوانات نزدیک تر شوند.
 
- نمایش معلومات: 
نمایش معلومات و مهندسی معلومات مرکز توجه در پژوهش های هوش مصنوعی بودند. بسیاری از دستگاه های حل مساله برای حل مسائل نیازمند معلومات گسترده و وسیعی بودند این معلومات عبارت می شد از : شناختن اشیاء، خواص و اقلام- شناختن روابط بین اشیاء- درک موقعیت، نوع واقعه و زمان و مکان- علت ها و تاثیر عوامل و بسیاری چیز های دیگر...
 
و سخت ترین مشکلات درباره نمایش اطلاعات و معلومات عبارت بود از:
1- استدلال پیش فرض و مسائل نسبی: دانسته ی یک فرد از یک چیز برابر است با پنداشت او از آن چیز، برای مثال وقتی نام پرنده به گوش کسی می خورد، معمولا یک موجود کوچک را به یاد می آورد با صدای زیبا و قابلیت پرواز؛ در حالی که این موضوع برای همه ی پرندگان صدق نمی کند. مثلا پنگوئن هیچکدام از این ویژگی ها را ندارد! جان مک کارتی این موضوع را به عنوان یک مسئله نسبی در سال 1969 کشف کرد. برای هر قضاوت صحیح (در تعریف عام) که محققان هوش مصنوعی، سعی در پیاده سازی آن داشتند، تعداد زیادی استثنا وجود داشت. بنابر این، آنها به این نتیجه دست یافتند که در قضاوت عام، نمی توان یک چیز را مطلقا درست یا غلط دانست بلکه همه چیز نسبی است. مثلا وقتی به شما می گویند که فلان شخص، خوب است یا بد؟ شما اول به مواردی توجه می کنید که مهم تر هستند و بر این اساس در مورد خوبی و بدی قضاوت می کنید. در حالی که هیچ کس مطلقا خوب یا بد نیست! در واقع شما اول به مواردی اهمیت می دهید که مهم تر است. محققان هوش مصنوعی هم با پیاده کردن چنین الگوریتمی توانستند این مشکلات را حل کنند.
 
2- سطح وسیع اطلاعات مورد نیاز برای قضاوت عام: منظور از قضاوت عام، همان نحوه قضاوتی است که در بالا توضیح داده شد که شما به نکاتی که بیشتر اهمیت دارند، امتیاز بیشتری اختصاص می دهید و آنها را ملاک قضاوت خود قرار می دهید. اما این نوع قضاوت، شاید در زندگی روزمره ما کار عادی ای شده باشد؛ اما در واقع برای کامپیوتر این کار نیاز به اطلاعات پایه ای زیادی در زمینه هستی شناسی و شناخت ویژگی های موجودات دارد. محققان هوش مصنوعی می بایست، مفاهیم دقیق و پیچیده ای را با دست خود، به کامپیوتر می فهماندند. کار بزرگی که انجام شد این بود که توانستند کامپیوتر را قادر سازند که از منابع اطلاعاتی (نظیر اینترنت امروزی) ، مفاهیمی را کسب کند و از این راه به اطلاعات خود در این باره بیافزاید.
 
3- استفاده از زبان Sub-Symbolic برای توضیح بعضی مفاهیم در قضاوت عام: بسیاری از معلوماتی که مردم دارند، چیز هایی است که نمی توان آن ها را تصویر کرد و یا توضیح داد. برای مثال یک شطرنج باز ماهر، از قرار دادن یک مهره در یک وضعیت خاص پرهیز می کند زیرا احساس می کند که این کار خطرناک است و یا یک کارشناس و منتقد هنری با نگاه کردن به یک مجسمه و یا یک نقاشی تشخیص می دهد که آن جعلی و تقلبی است. پیاده کردن چنین الگوریتم هایی با استفاده از زبان سمبلیک ممکن نبود و باید از زبان دیگری بر پایه Sub-Symbolic استفاده می شد.
 
قبل از هر چیز باید، توضیح مختصری از این دو را به شما ارائه کنیم:
در واقع اساس کار زبان های سمبلیک بر پایه استدلال و نتیجه گیری و به طور کلی، منطق است. در این گونه زبان ها برای متغیر ها و توابع مقدار های مشخصی در نظر گرفته می شود و بدین وسیله، هر متغیر حاوی بخشی از اطلاعات برنامه و هر تابع حاوی بخشی از قوانین استنباطی برنامه است.
 
اما روش Sub-Symbolic تا حد زیادی متفاوت است. این روش از شبکه های عصبی برای پردازش اطلاعات استفاده می کند. این شبکه های عصبی از واحد های ورودی، واحد های پنهان و واحد های خروجی تشکیل شده اند که همگی با یکدیگر ارتباط دارند. این واحد ها گاهی سلول عصبی نیز، خطاب می شوند. همانطور که گفته شد، این سلول های عصبی با یک دیگر ارتباط دارند. اما چیزی که باید بدانید این است که اطلاعات در بین این ارتباطات، پردازش می شوند و بر این اساس ممکن است یک سلول عصبی در پردازش اطلاعات موثر و یا کم اثر باشد. در عوض، در شبکه های عصبی تمامی اجزا مهم تلقی می شود. چون هیچ کدام از آنها به تنهایی نمی توانند، اطلاعات را پردازش کنند ولی وقتی تمام اجزا با هم کار کنند، موجب ایجاد یک عملکرد هوشمند می شوند.
 
برای این که این روش را بهتر درک کنید، به این مثال توجه نمایید: یک مورچه تنها را در نظر بگیرید، طبعا نه کاری می تواند بکند و نه اثری دارد، اما وقتی مجموعه ای از این مورچه ها جمع می شوند و یک کلونی را تشکیل می دهند، آنگاه جامعه ای از آنها درست می شود که در کلیت، هوشمند و موثر است، به طوری که حتی ما هم با دانستن راز های زندگی جمعی مورچه ها، به فکر فرو می رویم! همین کار را هم می توان با شبکه های عصبی انجام داد و یک شبه مغز را ایجاد کرد.
 
- برنامه ریزی: 
موجودات و به طور کلی، چیز های هوشمند، باید بتوانند هدف هایی را برای خود تعیین کرده و به آنها دست یابند. برای این کار اولا لازم است که تصوری از آینده خود داشته باشیم. یعنی وضع کنونی هدف مورد نظر را در نظر بگیریم و پیش بینی کنیم که تصمیماتی که خواهیم گرفت، چگونه می تواند بر آن تاثیر بگزارد. پس از این کار باید، برای رسیدن به بهترین نتیجه؛ از بین گزینه هایی که داریم، بهترین و سودمند ترین آنها را انتخاب نماییم.
 
پس تصمیم گیری و برنامه ریزی از این روش، کاری است که بدون هوشمندی، نمی توان آن را انجام داد و فقط موجودات هوشمند از پس آن بر می آیند! در مسائل کلاسیکی که در مورد برنامه ریزی وجود داشت، عامل هوشمند می توانست فرض کند که تنها یک چیز (هدف مورد نظر) در جهان فعال است و احتمالا می توان نتیجه آن را تغییر داد. بنا بر این هدف مورد نظر تعیین می شد و برای آن راه حل هایی ارائه می گردید. همچنین عامل هوشمند - که میتواند برنامه و یا هر چیز دیگری باشد – به طور مرتب و دائمی چک می کرد که پیشگویی هایش درست باشد و اگر اینطور نبود، راه حل مورد نظر برای هدفش را تغییر می داد.
 
در این مورد می توانید یک روبوت را در نظر بگیرید که می خواهد از یک مسیر مارپیچ عبور نماید. این روبوت ابتدا هر یک از این مسیر ها را امتحان می کند و اگر هر کدام از آنها به بن بست، بر خورد، آن را به حافظه می سپارد تا دوباره تکرارش نکند و این عمل را آنقدر ادامه می دهد که راه خودش را بیابد! ( این یک تعریف بسیار ساده بود)
 
- یادگیری: 
ایجاد امکان یادگیری برای ماشین ها، همواره از پژوهش های اصلی در زمینه ی هوش مصنوعی بوده است. یادگیری بدون نظارت: قابلیت یادگیری الگو ها، از اطلاعات ورودی را فراهم میکند. یادگیری نظارت شده هم، می تواند هردو امکان: طبقه بندی و عبرت عددی را ایجاد کند.
طبقه بندی این امکان را می دهد که کامپیوتر بتواند تشخیص دهد که چه چیز هایی را می توان در یک گروه خاص گنجاند. عبرت عددی (Regression takes) نیز به این صورت عمل می کند که بعد از دادن چیز هایی به عنوان ورودی به کامپیوتر و مشخص کردن خروجی دقیق آنها، کامپیوتر می تواند روابط بین ورودی و خروجی را کشف کرده و الگوریتم ها و توابع پیوسته ای را برای آنها تعیین کند. این روش برای به وجود آوردن الگوریتم های بسیار پیچیده، مفید خواهد بود.
 
اجازه دهید تا در این مورد مثالی بزنیم: وقتی در حال رانندگی هستید و به عابران پیاده نگاه می کنید، می توانید تا حد زیادی تشخیص دهید که آنها قصد چه کاری را دارند. مثلا می خواهند از خیابان رد شوند یا این که تاکسی بگیرند و یا این که فقط سر جای خود ایستاده اند. خب، این کار برای من و شما نسبتا ساده است اما اساسا برای نوشتن الگوریتم آن برای کامپیوتر، از دست یک انسان کاری ساخته نیست. با استفاده از روش عبرت عددی می توان با روش های خاص این مورد را با مثال های زیادی به کامپیوتر و برنامه ی مربوطه نشان داد و به تدریج الگوریتم مورد نیاز را تحویل گرفت.
 
اما چیزی که باید هم اکنون به آن اشاره کرد، عملیات تقویت یادگیری است. این کار به این صورت انجام می پذیرد که تئوری تصمیم گیری کامپیوتر آنالیز شده و برداشت های سودمند آن تئوری، مورد تاکید قرار می گیرند. در واقع کار های درست با تشویق (به صورت اولویت دادن) و کار های غلط با تنبیه (به صورت امتیاز منفی) پاسخ داده می شوند و به همین خاطر یادگیری کامپیوتر به طور مرتب بهبود می یابد.
 
یادداشت: آنالیز الگوریتم های یادگیری ماشین ها، شاخه ای از علوم نظری کامپیوتر است که با نام تئوری یادگیری کامپیوتری شناخته می شود.
 
- پردازش زبان طبیعی: 
پردازش زبان طبیعی یا Natural Language Processing، به ماشین های هوش مند این قابلیت را می دهد که زبان انسان ها را بخوانند و آنها را متوجه شوند. بسیاری از تحقیقات به این نتیجه رسید که برای ایجاد قدرت کافی برای سیستم پردازش زبان طبیعی، نیاز است که اطلاعات زیاد و کاملی را به این سیستم ارائه کنیم که می تواند با استفاده از خواندن متن های موجود در اینترنت انجام شود.
 
برنامه هایی که هم اکنون در زمینه پردازش زبان طبیعی درست عمل می کنند، از امکاناتی مانند: بازیابی اطلاعات، جستجو در متن ها و امکان ترجمه ماشینی بهره مند اند.
 
- حرکت و جا به جا کردن اجسام: تحقیقات در زمینه روبوتیک، بیش از هر چیزی به هوش مصنوعی وابسته است. روبات ها برای موارد بسیار زیادی نیاز به هوشمندی دارند که از جمله آنها می توان مواردی مانند: مسیر یابی ، جا به جا کردن، این که بدانند کجا هستند، این که درکی از محیط خود داشته باشند و بتوانند برای حرکت به سوی نقطه خاصی، برنامه ریزی نمایند و هدف خود را تعیین کنند. بدین ترتیب هوش مصنوعی برای روبات ها بسیار پر کاربرد است و تقریبا در تمام زمینه های ذکر شده از آن استفاده می نمایند.

- ادراک: 
درک ماشینی، به آنها این امکان را می دهد که بتوانند با استفاده از سنسور های ورودی خود، نظیر: دوربین، میکروفون ها و دیگر سنسور های عجیب و غریب (!) ؛ از محیط خود برداشت صحیحی داشته و بتواند محیط پیرامون خود را درک کند. در اصل، بینایی کامپیوتری این امکان را می دهد که کامپیوتر بتواند چیز هایی که می بیند را مورد تجزیه و تحلیل قرار دهد. چند مورد از آنالیز های معروف در روبات ها عبارت است از : آنالیز صحبت و صدا ها و تشخیص منظور، آنالیز چهره ها و تشخیص حالات آن ها. مانند: خشم، ناراحتی، خنده و ... ، آنالیز اشیاء پیرامون و تشخیص آنها .
 
با استفاده از انواع آنالیز ها و تجزیه و تحلیل هایی که در بالا ذکر شدند، روبات ها قادر خواهند بود که بسیار هوشمند تر از قبل عمل کنند. مثلا در جا به جایی اجسام شیشه ای، دقت بیشتری کنند. برای کسی که ناراحت و عصبانی است، جک تعریف نکند! و سلام را با خدا حافظ پاسخ ندهد.
 
- هوش اجتماعی: 
احساسات و مهارت های اجتماعی، دو بخش مهم از هوش مندی را تشکیل می دهند. اولا، باعث می شود که ماشین هوشمند بتواند عکس العمل طرف مقابل را در برابر یک رفتار خاص، تشخیص دهد. که این کار با درک از انگیزه فرد و احساسات او عملی خواهد شد.
 
ثانیا؛ برای تعامل بهتر بین انسان و کامپیوتر، ماشین هوشمند باید بتواند که احساساتی را از خود بروز دهد. در بد ترین حالت، این امر باید به صورت نشان دادن احساسات ضعیف در گفتار و با کمال ادب انجام گیرد و در بهترین حالت باید با حساسیت طبیعی و مناسب در برابر انسان همراه باشد. در واقع سعی بر این است که کامپیوتر طوری عمل کند که اگر با لحن بدی با او حرف زدید، با کمال ادب به شما پاسخی مناسب با لحن خودتان دهد. و بالعکس!
 
نکته مهم: مساله کمال ادب بسیار مهم است چون کامپیوتر در صورت عدم رعایت این موضوع، موجودیت خودش را به خطر خواهد انداخت و در این صورت نیاز به یک الگوریتم برای کشتی گیری انسان و کامپیوتر (یا ربات) هم به شدت احساس می شود. (معمولا انسان ها اعصاب ندارند و خیلی زود درگیر می شوند.)
 
- ابتکار وخلاقیت: 
یکی از شاخه های مهم، هوش مصنوعی سعی در ایجاد قوه ی خلاقیت در کامپیوتر دارد. پیاده سازی ابتکار و خلاقیت در هوش مصنوعی، هم از نظر فلسفی و هم از نظر فیزیولوژی قابل توجیه می باشد. همچنین از نظر عملی هم با پیاده سازی یک الگوریتم مخصوص که خروجی هایی هوشمندانه و متفکرانه تولید نماید، امکان پذیر است. این شاخه معمولا با نام های: درک مصنوعی (Artificial Intuition) و پندار مصنوعی (Artificial Imagination) شناخته می شود. برای پرهیز از پیچیده شدن مقاله، توضیح بیشتری نمی دهیم اما می توانید مباحث مربوط به این دو را نیز در سایت های دیگر دنبال نمایید.
 
- هوش عمومی: 
برای پیاده سازی هوش عمومی روی کامپیوتر نیاز است که از تمامی توانایی های بالقوه ی هوش مصنوعی استفاده کنیم. برای مثال مترجم متن گوگل را در نظر بگیرید؛ می دانیم که این مترجم در حال حاضر با خطا های بسیاری رو به رو است. حال اگر بخواهیم که اشکالات کار ترجمه، حل شود؛ می توانیم از هوش عمومی استفاده نماییم: برای ترجمه خوب باید اول بفهمیم که نویسنده از چه استدلال ها و چه دلایلی برای مطرح کردن یک منظور خاص استفاده می کند.( به کار گیری جنبه درک استدلال و منطق)، همچنین باید بدانیم که موضوعی که درباره آن صحبت می شود چیست.(درک و جمع آوری اطلاعات). مرحله بعدی کار ما این است که مقصود نویسنده از جملات را پیدا کنیم؛ مثلا بفهمیم که دارد انتقاد می کند یا تعریف. (هوش اجتماعی). پس از این کار ها و در نظر گرفتن موارد فوق می توانیم به ترجمه یک متن بپردازیم.
 
شاید بپرسید که اگر مساله فقط این است، پس چرا گوگل کاری نمی کند ؟ در این مورد باید گفت که شاید در زبان ساده باشد اما به کار گیری چنین الگوریتم هایی با خطای بسیار کم، در حال حاضر عملا امکان پذیر نیست. البته این الگوریتم ها در ترجمه گوگل استفاده می شوند ولی خطای آنها زیاد است. برای کم کردن این گونه خطا ها، راهی که کارشناسان پیشنهاد می کنند، استفاده از شبکه های عصبی و زبان Sub-Symbolic است.

چطوری برنامه نویسی یاد بگیرم؟

با سلام خدمت شما دوستان

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

برای شروع برنامه نویسی به چه چیزی نیاز داریم ؟

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

هکر کیست

وواژهٔ هکر برای اولین بار در اوایل دههٔ ۱۹۵۰ مورد استفاده قرار گرفت. در آن زمان کامپیوتر به صورت امروزی وجود نداشت. رادیو Amateur واژهٔ هک کردن را، در ارتباط با تجهیزات الکترونیکی، اینگونه تعریف کرد:

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

در سال ۱۹۵۹ واژهٔ هکر در موسسهٔ تکنولوژیِ ماساچوست (MIT) برای اشاره به برنامه‌نویسان استفاده شد. در سال ۱۹۷۲، مجلهٔ Rolling Stone در مقاله‌ای اینگونه می‌نویسد:

هکر واقعی، شخصیتی گروه‌گرا ندارد. او شخصی است که دوست دارد تمام شب را بیدار بماند. او و ماشین در رابطه‌ای میان عشق و نفرت گرفتارند … آنان کودکانی هستند که می‌خواهند بدرخشند اما برای اهداف عادی اهمیتی قائل نیستند.

بعدها و با گذشت زمان، مقاله نویسان از واژهٔ هکر برای اشاره به نفوذگران امنیتی استفاده کردند. در سال ۱۹۸۳ با ساخته شدن فیلم WarGames که در آن گروهی نوجوان سعی در نفوذ در کامپیوترهای مختلف را داشتند، و نقدی که newsweek بر آن نوشت، این امر شدت گرفت. تقریبا از آن سال‌ها به بعد واژهٔ هکر در نزد عموم مترادف با خرابکاری و مختل کردن امنیت سیستم‌های کامپیوتری به کار می‌رود.

هکرهای واقعی، آنان که هنوز هم به فرهنگ و منش هکرها باور دارند، این را بر نمی‌تابند و نفوذگران و خراب‌کاران را کراکر (Cracker) می‌نامند.

تعاریف مختلفی از معنای حقیقیِ کلمهٔ هکر ارائه شده است. در واژه نامهٔ کلماتِ کابرانِ اینترنت (RFC1392) که در سال ۱۹۹۳ منتشر شده است، چنین می‌خوانیم:

شخصی که از درک عمیق عملکرد یک سیستم، کامپیوتر و یا شبکهٔ کامپیوتری لذت می‌برد. این واژه معمولا به اشتباه برای اعمال تحقیر آمیزی به کار می‌رود که واژهٔ کراکر برای آن مناسب‌تر است.

Jargon File تعریف زیر را در مقابل کلمهٔ هکر آورده است:

شخصی که از برتری یافتن بر محدودیت‌ها به روش‌های مبتکرانه لذت می‌برد.

واژهٔ هکر لزوما به معنای یک هکرِ نرم‌افزار نیست، منش هکرها می‌تواند در هر نوع علمی به کار رود. به عنوان مثال شخص می‌تواند هکرِ ستاره‌شناس باشد. واژهٔ هکر برای اشاره به شخصی به کار می‌رود که به بالاترین سطح از درک در رشتهٔ خود رسیده باشد و بتواند مسائل را زودتر از افراد عادی حل کند. به عبارت دیگر، زندگی خود را وقف هنر خویش کرده باشد.

هکرهای کامپیوتر معتقدند کامپیوتر می‌تواند زندگی را بهبود بخشد. آنان به کامپیوتر همانند چراغ جادو می‌نگرند که می‌تواند آرزوها را به واقعیت تبدیل کند. و این کاری است که آنان در عمل انجام می‌دهند: عجیب‌ترین ایده‌های خود را به واقعیت تبدیل می‌کنند. آنان می‌خواهند آنچه خود به واسطهٔ کامپیوتر به دست آورده‌اند، به جامعه نیز هدیه کنند. هکرها سیستم‌عامل را به صورت امروزی توسعه دادند، اینترنت را پدید آورند، و آنچه ما امروز به عنوان کامپیوتر می‌شناسیم، حاصل تلاش آنان است.

اصول اخلاقی هکرها
اولین بار عبارت «اصول اخلاقی هکرها» توسط Steven Levy در کتاب «هکرها: قهرمانان انقلاب کامپیوتر» به کار رفت. Levy عنوان می‌کند که اصول عمومی‌ای که میان هکرها مشترک است، شامل موارد زیر می‌شود:

به اشتراک گذاری در سال‌های ابتدایی، زمانی که کامپیوترها به اندازهٔ یک اتاق بودند، در موسسهٔ MIT هکرها برنامه‌های خود را در اختیار یکدیگر قرار می‌دادند. هر شخصی که برنامه‌ای می‌نوشت، آن را بر روی نوارمغناطیسی ذخیره می‌کرد و دیگر هکرها می‌توانستند آن را به دست آورده، مطالعه کنند و یا بهبود بخشند.

در نسل دوم هکرها، اشتراک گذاری عبارت بود از به اشتراک گذاشتن نرم‌افزار با تمامی مردم. به عنوان مثال، گروهی به نام Community Memory کامپیوترها را در مکان‌های عمومی قرار می‌دادند تا تمامی مردم بتوانند از آن استفاده کنند. و یا People’s Computer Company که در ازای دریافت مبلغ کمی، به عموم مردم اجازهٔ استفاده از کامپیوتر را می‌داد.

تمامی اطلاعات باید آزاد باشند اطلاعات سیستم‌ها باید آزاد و در دسترس همگان باشد تا هکرها بتوانند سیستم‌ها را برسی کرده، تعمیر کنند، بهبود بخشند و یا از این اطلاعات برای ابداع سیستم‌های جدید بهره گیرند. تبادل آزاد اطلاعات باعث افزایش خلاقیت می‌گردد. از دیدگاه هکرها، تمامی سیستم‌ها می‌توانند از جریان آزاد اطلاعات بهره ببرند.

بهترین راه برای داشتن جریان آزاد اطلاعات، وجود یک نظام صریح و روباز است. نظامی که مانعی میان یک هکر و ایده‌ها و هدف وی نباشد. هکرها از هرگونه تشریفات اداری و دولتی دوری می‌کنند.

هکر باید از روی اعمال خویش قضاوت شود، نه از روی عناوین ساختگی همچون درجه و مدرک جامعهٔ هکرها اهمیتی به سن، جنس و تحصیلات افراد نمی‌دهد. آنچه مهم است، مهارت هکر است. تمامی هکرها باید از شانسی مساوی برای حضور در اجتماع برخوردار باشند. به عنوان شاهدی بر این مدعا، می‌توان Peter Deutsch، نوجوانی دوازده ساله را نام برد که در میان هکرهای TX-0 پذیرفته شد.

start

با سلام خدمت شما دوستان گرامی امیدوارم این وبلاگ هم بتونه براتون مفید باشه .

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

با تشکر از همراهی شما دوستان گرامی .