با پی در پی سانسور شدن پیامرسانهای مختلف در کشورمان ایران، مردم به دنبال پیامرسانهای دیگر میگردند. از طرفی، با توجه به این که دادههای ارسالی از طریق پیامرسان باید خصوصی بین فرستنده و گیرنده یا گیرندهها بمانند، امن بودن پیامرسان مهم است. و البته پیشنیاز امن بودن یک پیامرسان، آزاد بودن آن است. اگر یک پیامرسان نرمافزار آزاد یا متنباز یا دستکم با کد منبع در دسترس نباشد، نمیتوانیم در مورد امن یا ناامن بودن آن نظر دهیم. به همین صورت نمیتوانیم در مورد امن بودن واتساپ نظر دهیم چرا که کد منبع آن در دسترس نیست. واتساپ ادعا میکند که از رمزنگاری سراسری استفاده میکند و اینگونه، تنها فرستنده و گیرنده میتوانند دادههای رد و بدل شده را بببنید؛ اما در حالی که کد منبع واتساپ در دسترس نیست، چطور میتوانیم مطمئن شویم که واتساپ واقعا حقیقت را میگوید؟
روبوکد یک بازی برنامهنویسی است که در آن با زبان جاوا، اقدام به برنامهنویسی کردن روباتهای کوچکی میکنید که با بقیهٔ روباتها باید بجنگند. مبارزه میتواند به صورت تکبهتک با یک روبات دیگر یا به صورت گروهی با مثلاً ۹ روبات دیگر باشد. هرچند که باید روباتهای خود را به زبان جاوا بنویسید، اما دانش عمیقی از این زبان مورد نیاز نیست و در صورتی برنامهنویس یکی از زبانها از همین خانواده باشید، میتوانید بهراحتی یک روبات بسازید.
من به عنوان یه متخصص کامپیوتر در پاسخ به هشدارم در مورد جمعآوری اطلاعات توسط شرکتهایی مثل گوگل و… همیشه یک پاسخ تکراری میشنوم: «من که هیچ اطلاعات مهم و سرّیای ندارم!»
با توجه به این که امروزه در عصر ارتباطات و اطلاعات هستیم و استفاده از چنین خدماتی بسیار فراگیر شده، لازم میدونم در این مطلب بگم که «چرا اطلاعات شما مهم هستند؟» و «جامعهٔ نرمافزارهای آزاد چه تأثیری بر این مورد دارند؟»
اطلاعات شما مهم نیستند!
اطلاعات خودشون به تنهایی ارزش آنچنانی ندارند اما پردازش آنها بسیار با ارزش خواهند بود. بذارید براتون توضیح بدم. شاید شما یک مامور اطلاعاتی یا یه فرد مهم در یک جایگاه دولتی نباشید اما وقتی اطلاعات شما پردازش شوند، میتواند به افراد دیگر آسیب برساند.
برای مثال خدمات گوگل میتوانند حتی در صورت غیرفعال بودن GPS، موقعیت تقریبی شما را بدانند. این امکان چیزی مخفی و سری نیست، خود گوگل این مورد رو اعلام و در گوشیها امکان استفاده از اون هست! در کل چیز بدی هم نیست، اگه جایی بودید که به ماهوارهٔ GPS دسترسی نبود، باز هم یه موقعیت تقریبی دارید، اما گذشته از این که میتونه برای یهسری افراد بد بشه، جالبه بدونید این امکان با پردازش دادههایی که از افراد عادی به دست اومده، فراهم شده.
چهطوری؟ با استفاده از موقعیت نسبی و دکلهای مخابراتی. هر دکل مخابراتی یک سریال مخصوص داره که گوشی شما هم اون رو دریافت میکنه. امروزه هر گوشی همزمان به بیش از یک دکل وصل هست و اگر در این حین مکانیابی گوشی هم فعال باشه به همراه قدرت سیگنال اتصال یک موقعیت تقریبی از اون دکل داریم. از طرفی با استفاده از یه شبکه (گراف) از اسامی وایفایها و بلوتوثهای نزدیک میشه هم موقعیت نسبی افراد و هم موقعیت وایفای ها رو پیدا کرد.
از طرفی تا به حال متوجه شدید که گوگل میتونه حدس بزنه خونهتون کجاست؟! من متوجه چنین موردی شدم، اگه برید به نقشه google maps احتمالا یه جایی توی نقشه به عنوان خونهٔ شما مشخص شده. حدس من اینه که احتمالاً از مدت زمانی که در یک مکان هستم و هم جاهایی که میرم و برمیگردم به یک نقطهٔ ثابت متوجه این مسئله شده!
حمایت و گسترش
با استفاده از این خدمات، درواقع شما دارید از اون ها حمایت میکنید و بهشون خوراک اطلاعاتی میدید، اونها با پردازش اطلاعاتی که شما بهشون دادید، آمارها و اطلاعات رو استخراج میکنن و اونها رو میفروشن، البته همیشه این اطلاعات چیزهای شخصی نیستند، گاهی سلیقهٔ مصرفکنندههای یه محصول و چیزهای اینچنینی که ارزش تجاری دارند، هستند. اینطوری قدرتشون بیشتر میشه. از طرفی خودبهخود به فراگیر شدن استفادهٔ دیگران از این خدمات کمک میکنید، افراد دیگه که قالباً از چیزهایی که تو این مطلب گفتیم بی اطلاع هستند، مجبور و یا ترغیب به استفاده از چنین خدماتی میشن، در نتیجه کمکم هم قدرت این خدمات و هم مصرفکنندههای اونها بیشتر میشه. مثلا نرمافزار Shareit که همه میشناسیمش، این نرمافزار به تمام پروندهها دسترسی داره و به حریم خصوصی کاربران هم زیاد پایبند نیست، بعد اون وقت هر کسی که میخواد پروندهای برای کسی بفرسته، اولین جملهای که میگه اینه که «shareit نصب کن»!
تأثیرگذاری
از مواردی که گوگل به صورت شفاف گفته که نتایج و تبلیغات رو مطابق سلیقهٔ شما بهتون نشون میده. این هم میتونه مفید و کمککننده باشه و هم میتونه به هدایت شما به سمت یک هدف خاص منجر بشه. نمیخوام از توهم توطئه و کنترل شما توسط این خدمات بگم! ولی فیلتر نتایج یا نمایش هدفمند بعضی از اونها زیاد چیز جالبی نیست! این کار برای این خدمات معمولاً سود تجاری به همراه داره.
یا مثلاً اینستاگرام هم با توجه به علاقهٔ شما، فرستهها رو بهتون نشون میده. حتی بعضی اوقات لابهلای صفحاتی که دنبال میکنید از جاهای دیگه هم فرسته بهتون نشون میده، منجر میشن به این که یه چیزی مثلاً یه مد، یه رفتار یا یه فرهنگ (گاهاً درست و گاهاً غلط) ترند (فراگیر) بشه. یا حتی به یه تحلیل از سلیقهٔ جمعی برسن.
برای مثال در زمان انتخابات در کشورهای بیگانهٔ غربی 😄 با کمک اینفواِنسرها (influencer: افرادی که قدرت تأثیر بر افکار مردم رو دارن، همون شاخهای مجازی!) میتونن تأثیراتی روی دیدگاه و طرز فکر مردم داشته باشن (تعجبی هم نداره؛ تعریف کلمه همینه!) یا مثلاً تأثیری که اونها روی صنعت مد، پوشاک و صنایع آرایشی دارن کاملاً مشخصه.
علاوه بر اون، این روزها الگوریتمها دارن تمام تلاششون رو میکنن که شما رو هر چه بیشتر پای این پلتفرمها نگه دارن که این عوارض بدی براتون به همراه داره.
پ.ن: مواردی که در مورد «تأثیرگذاری» گفته شده تا حدود زیادی مربوط به سواد رسانهای هستن. دانشی که برای هر کسی لازمه که بدونه هر رسانهای چه هدفی داره و برای رسیدن به اون هدفش از چه تکنیکها و ترفندهایی استفاده میکنه
شناخت ارتباطات
بسیاری از شبکههای اجتماعی با تخمین نسبتاً دقیقی میتونن ارتباطات شما با اطرافیانتون رو بسنجن، باز هم شاید این مورد در پیدا کردن دوستهاتون توی شبکههای اجتماعی کمکتون کنه ولی روی تحلیل اطلاعاتی که میخوان از یه شخص خاص جمع کنن تاثیر مستقیم داره.
اعتماد کاذب!
شما (یا خیلیهای دیگه) شاید به نصب یه نرمافزار از یه شرکت ناشناس مثلاً روسی یا چینی مخصوصاً متنبسته شک میکنید ولی خیلی ها به شرکتهایی مثل گوگل یا مایکروسافت اعتماد دارن. اما اگر از مرورگر کروم استفاده میکنید و اون رو به عنوان یه مرورگر امن میشناسید باید بگم که گوگل کروم در ابتدا یک نرم افزار متنباز بود تا زمانی که گوگل تصمیم گرفت یهسری اطلاعات نامعلوم (که شاید چیزهایی نباشن که دوست داشته باشیم!) رو اون پشتمشتها بفرسته به سرورهای خودش یا حتی بدون اطلاع شما به بهونهٔ اسکن ویروسها پروندهها رو اسکن کنه؛ با این که کروم اصلاً یه پادویروس نیست! چنین سرویسی رو خودم خیلی وقت پیشها زمانی که کروم داشتم دیدم، به صورت خودکار در پسزمینه اجرا میشد و امکان غیرفعال کردنش هم نبود! برای همین چیزها بود که عدهای از توسعهدهندههای کروم گفتند که ما نمیخواییم دیگه گوگل کروم رو توسعه بدیم و chromium که متنباز هست رو توسعه میدن (اگر میخوایید از کرومیوم استفاده کنید بگم که من این مرورگر رو پیشنهاد یا تبلیغ نکردم و پیشنهاد میکنم که صرفاً به من اعتماد نکنید و خودتون کرومیوم رو قبل از استفاده بررسی کنید!)
جامعهٔ نرم افزارهای آزاد
آزاد به معنی متنباز بودن نرمافزارها نمیتونن به تنهایی تضمینی برای حفظ حریم خصوصی شما باشه، ولی میتونه روی این موضوع تأثیرگذار باشه. اولاً خیلی از استفادهکنندهها وقت نمیگذارند کدها رو بررسی کنن! دوماً که بعضی از خدمات مثل تلگرام همونطوری که فاروق جان تو مطلب «آیا تلگرام امن و آزاد است» گفت، متن باز بودن نرمافزار گاهی اوقات تأثیری رو حفظ حریم خصوصیتون نداره.
اما این که ارائهدهندههای اون خدمت سخاوتمندانه منبع رو باز گذاشتند و ترسی از لو رفتن هیچ رازی ندارن چیز خوبیه! از طرفی میتونیم بفهمیم که درآمد این خدمات از کجا تأمین میشه (از فروش اطلاعات! یا دونیت یا…) و هم این که میتونیم روی این نرمافزارها تأثیر بگذاریم و اگر برای حریم خصوصی خودمون و دیگران ارزش قائل هستیم اونها رو ویرایش کنیم.
سخن پایانی
این طومار بلند و بالا حرفها و حقایقی هستند که شاید به واسطهٔ موضوع بحث و در کنار هم قرار گرفتنشون کمی بوی توهم توطئه بگیرن یا حتی با درگیر کردن ذهن شما ناخواسته بهتون انرژی منفی وارد کرده باشم! ولی متأسفانه اینها حقایق تلخی هستند که امکان دارند و هم در حال استفاده هستند. این مطالب برای یک بحث سرپایی با اون دوستی که میگه «اطلاعات من ارزش ندارن» طولانی و با جزئیات هستند ولی لازمه که مردم از اون آگاه باشن.
قبلاً راجع به کتابخوان اونیکس بوکس پوک پرو صحبت کردم و راجع به این که چرا تصمیم گرفتم یک تبلت اندرویدی با صفحهنمایش جوهر الکترونیکی (E-ink) کاغذ الکترونیکی (e-paper) داشته باشم و این تصمیمم چه تأثیری در سلامت چشمانم دارد. متأسفانه تبلت قبلی از میکروفون پشتیبانی نمیکرد و با وجود اندروید ۶ نمیتوانستم از نرمافزارهای جدیدتر روی تبلتم استفاده کنم. و البته از همه مهمتر خرابکاری بنده حین تعمیر کتابخوان باعث آسیب به صفحهاش و در نتیجه غیرقابل استفاده شدنش شد و مجبور شدم آن را در ایسام با قیمتی بسیار پایین به عنوان معیوب به فروش برسانم!
به عنوان یک نتیجهٔ این خرابکاری، باید دنبال وسیلهای جدید به عنوان تبلت اندرویدی میبودم و این بار از همان شرکت قبلی تبلت Boox Leaf را خریداری کردم که با صفحه ۷ اینچ کمی بزرگتر از پوک بود. البته در زمان تصمیم من برای خرید، یک سال از ورود لیف به بازار میگذشت و Leaf 2 جدیدترین محصول این شرکت با اندروید ۱۱ بود. اما به دلیل دو برابر بودن تعداد هستههای پردازندهٔ لیف، قید اندروید ۱۱ را زدم و نهایتاً Boox Leaf را خریدم.
در این مطلب، مواردی که در مطلب قبلم راجع به پوک پرو نوشتهام را تکرار نمیکنم و روی تغییرات لیف نسبت به پوک تمرکز میکنم.
تعریف کلی کاراکتر یا نویسه در کامپیوتر یعنی کوچکترین واحد نمایش اطلاعات که میتونه یک حرف یا علامت باشه. نویسهها شامل فاصله، عددها و علامتها هم هستند!
نویسه در دنیای دیجیتال
در دنیای دیجیتال برای انتقال اطلاعات چیزی جز خاموش و روشن نداریم! جریانهای الکتریکی که قطع و وصل میشن، نوری که چشمک میزنه یا حتی تغییر جهت قطبهای مغناطیسی توی هاردها دنیای دیجیتالما رو میسازن!
به این خاموشها و روشنها میتونیم غلط و صحیح یا صفر و یک رو نسبت بدیم. این صفرها و یکها به کمک قوانین مبنای عددی در ریاضیات معنا پیدا میکنن. یعنی مثلاً عدد ۲ توی کامپیوتر میشه ۰۰۱۰، عدد ۱۱ توی کامپیوتر میشه ۱۰۱۱ و عدد ۵ میشه ۰۱۰۱. در واقع هر عدد، کد مخصوص به خودش رو داره که قابل محاسبه هست. این محاسبه بین مبنای ده (اعداد خودمون) و مبنای دو (اعداد کامپیوتر) به سادگیِ انجام چند تقسیم هست.
برای انتقال اعداد مشکلی نداریم اما اگر بخوایم نویسهها رو منتقل کنیم مشکل خواهیم داشت. برای این کار مجبوریم جدولی بسازیم و برای هر نویسه یک کد تعیین کنیم.
امروز میخوام براتون از رمزنگاری دوسویه یا دو کلیده بگم، این رمزنگاری دنیای اطلاعات رو زیر و رو کرده! تو جهان امروز هر جا رو که نگاه میکنی ردپای این رمزنگاری هست! HTTPS ،SSH، ارز های دیجیتال، شبکههای مجازی و … همه و همه دارن از این روش برای حفظ امنیت استفاده میکنن.
آنچه خواهید خواند!
- در ابتدا خواهم گفت در صورت نبود رمزنگاری اطلاعات چطور لو میروند
- بعد یه دید کلی از رمزنگاری میدم و میگم چرا نمیشه از روش های رایج استفاده کرد
- سپس روش رمزنگاری دوسویه رو به زبون ساده توضیح میدهم
- در ادامه از چگونگی استفاده آن در وب میگم
- چند خط کد مینویسیم و در پایتون از این روش استفاده میکنیم
از بزرگترها میشنوم که صفحهنمایشهای قدیمیتر اشعههایی از خود ساطع میکردند که باعث آسیب زدن به چشم و بروز سرطان میشدند. البته منظور از بروز سرطان اینجا به این معنی نیست که هرکس که با آن صفحهنمایشهای غولآسا کار میکرد سرطان میگرفت اما به این معنی است که شانس ابتلا به سرطان در افرادی که بیشتر در معرض صفحهنمایشهای CRT بودند، بیشتر میشد. صفحهنمایشهای امروزی بسیاری از مشکلات صفحهنمایشهای قدیمی را ندارند. در عین حال که سبکتر و نازکتر و کممصرفتر هستند به چشم نیز کمتر آسیب میزنند. اما هنوز هم خیرهشدن طولانی مدت به صفحهنمایش میتواند به چشمما آسیب بزند.
ما اهالی کامپیوتر ساعتها جلو صفحهی کامپوتر هستیم و این مسئله دغدغه خیلی ها از جمله خود من هست؛ برای همین، راهکار ها و مواردی که پیدا کردم را در این مطلب با شما به اشتراک خواهم گذاشت.
در این مطلب میگیم که چطور میشه در پایتون یک پروسه دیگر را اجرا کرد و خروجی استاندارد و ورودی استاندارد رو بگیریم و ازش استفاده بکنیم. خروجی و ورودی استاندارد همون چیزایی هستن که تو محیط متنی چاپ میشن یا کاربر توی ورودی برنامه وارد میکنه. در واقع توی این مطلب یاد میگیرید که چطور میتونید در پایتون با برنامه های کنسولی دیگه تعامل کنید.
پایپ (pipe) چیست؟
به طور پیشفرض سیستمعامل ورودیها رو از موس و کیبورد میگیره و خروجیها رو روی صفحهنمایش مینویسه. اما در بعضی مواقع نیاز هست که یک برنامه از خروجیهای یک برنامه (یا دستور) دیگه استفاده کنه یا به ورودی استاندارد یک برنامه داده ارسال کنه. در چنین شرایطی pipe استفاده میشه. pipe یک فضای موقتی در حافظه برای جابهجایی اطلاعات بین دو برنامه هست که البته یک طرفه هم هست؛ یعنی مثلا برای گرفتن خروجی باید از یک pipe و برای نوشتن ورودی هم از یک pipe دیگر باید استفاده کرد.
زبانها معمولاً یا تعیین نوع پویا دارند؛ مانند کامن لیسپ، پایتون، جاوا اسکریپت یا دارای تعیین نوع ایستا هستند؛ مانند سی و سیپلاسپلاس، راست و دوباره کامن لیسپ (معمولاً پیادهسازیهای مدرن کامن لیسپ، مانند SBCL، اجازه میدهند بنا به خواست برنامهنویس، قسمتی از کد، دارای تعیین نوع ایستا و قسمتی دارای تعیین نوع پویا باشد).
در پایتون، تعیین نوع متغیرها، مقدار یا مقادیر بازگشتی توابع و متدها و آرگومانهای توابع اجباری نیست. اما میتوانیم با تعیین نوع و استفاده از یک نرمافزار Linter به کاهش خطاهای خود پیش از اجرا کمک کنیم.
def f(x: int) - > int:
return x * 2 + 1
با این که تعیین نوع آرگومان یا ورودی تابع f که x باشد و مقدار بازگشت آن یعنی x*2 + 1
در اجرا تأثیری ندارد، اما زمانی که بخواهم مقدار بازگشت تابع f را با یک رشته نویسه (کاراکتر) جمع کنم به من اخطار داده میشود:
بدیهی است که اجرای این برنامه به وسیلهٔ پایتون نیز باعث خطا میشود. در مقابل زمانی که نوع ورودی و خروجی تابع را مشخص نمیکنم اخطاری داده نمیشود:
در ادامه با تعیین نوع ورودیها و خروجی توابع و متدها و ویژگیهای یک کلاس آشنا میشویم.
مسئلهٔ ۸ وزیر میپرسد که در یک صفحهٔ شطرنج چهطور میتوانیم ۸ مهرهٔ وزیر را چنان قرار دهیم که هیچکدام در معرض تهدید دیگری نباشد. در ریاضیات و علوم کامپیوتر، مسئلهٔ n وزیر یک نسخهٔ تعمیمیافته از ۸ وزیر میباشد که برای اکثر nهای صحیح مثبت (یا طبیعی) بیشتر از یک چینش وجود دارد.
قبلاً یک روش برای پیدا کردن راه حل برای مسئلهٔ ۸ وزیر با استفاده از الگوریتم ژنتیک ارائه دادم. حال میخواهم یک روش دیگر برای همین هدف اما به صورت یک الگوریتم قطعی و تصادفی به همراه کد پایتون ارائه دهم.
زمانی که از یک برنامهنویس پایتونی بخواهید یک تابع ساده بنویسد تا ارقام یک عدد را جمع کند و برگرداند، احتمالاً ابتدا عدد را به یک رشته تبدیل میکند و سپس رشته را به لیست (فهرست) و نهایتاً تکتک اعضای لیست را که ارقام عدد به صورت رشتههای تکنویسهای هستند به عدد تبدیل میکند و سپس آنها را با هم جمع میکند. ولی الزاماً اولین روشی که برای حل مسئله به ذهنمان میرسد، بهترین روش نیست. در این مطلب دو الگوریتم برای جمع ارقام یک عدد صحیح به صورت بازگشتی و تکرارشونده به همراه کد های پایتون آن ها ارائه میدهم.
صدای بوق ممتد از لحاظ فنی همان موج سینوسی با فرکانسی (بسامد) ثابت است. در این مطلب یک کد ساده و کوتاه پایتون ارائه میدهم که بدون استفاده از کتابخانههای اضافی، میتواند یک بوق را با هر فرکانسی تولید کند و در یک فایل صوتی wave ذخیره کند.
مسئلهٔ ۸ وزیر یک تمرین معروف در علوم کامپیوتر و ریاضیات میباشد. این مسئله در مورد یک صفحهٔ شطرنج رایج و مهرهٔ وزیر در این بازی فکری میباشد. در ریاضیات ثابت میشود که میتوان ۸ وزیر را در یک صفحهٔ شطرنج چنان قرار داد که هیچکدام از وزیرها، دیگری را تهدید نکنند. با تعمیم این مسئله در ریاضیات، ثابت میشود که در یک صفحهٔ شطرنج به ضلع n، میتوان تعداد n وزیر قرار داد؛ چنانچه هیچکدام دیگری را تهدید نکنند. در علوم کامپیوتر میتوان با روشهای مختلفی این مسئله را حل کرد و به یک چینش از مهرههای وزیر رسید که هیچکدام دیگری را تهدید نکنند. یکی از این روشها «الگوریتم ژنتیک» است.
خیلی ها میگن پایتون زبان سادهای هست، میشه اون رو زود یاد گرفت، بخاطر تعیین نوع پویا(dynamic typing) دیگه نیازی نیست که برنامهنویس با type ها درگیر باشه و …
ولی آیا واقعا همینطوره؟! توی این مطلب قصد دارم کمی زبان پایتون رو به عنوان یه برنامهنویس پایتون بررسی کنم.
۱. پایتون زبان سادهای هست
منظور از سادگی زبان میتونه خوانا بودن اون و نزدیکی اون به زبان انگلیسی (زبان انسان) باشه. برای مثال دو تکه کد زیر رو ببینید:
زبان پایتون:
if not 2 in lst:
for x in lst:
print(x);
زبان سیشارپ:
if ( ! lst.contains(2) )
foreach ( int x in lst )
Console.WriteLine(x);