🧑‍💻Cyber.vision🧑‍💻
465 subscribers
169 photos
12 videos
20 files
144 links
Python tips and tricks
The Good, Bad and the Ugly
متخصص امنیت شبکه های کنترل صنعتی
👨‍💻این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی این چند سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازه‌کار)
https://t.iss.one/Hacker0x01
Download Telegram
این روزا بازی همستر طوری سر وصدا ایجاد کرده که اونای که تلگرام نداشتن هم دارن جوین میشن جدیدا تقریبا امروز بالای ۱۵ تا از مخاطب هام وارد تلگرام شدن و هر کدوم یکی در میون لینک دعوت فرستاده 😅😅
🧑‍💻PythonDev🧑‍💻
https://t.iss.one/milldeofDeeplearning
لینک چنل هوش مصنوعی بنده است دوستانی که علاقه مند به یادگیری و فعالیت در این حوزه هستن می تونن تو کانال جوین شن
من فک میکردم درآمد ساقی ها زیاد باشه تا اینکه دیدم ساقی محلمون با همه شماره هاش joined the Telegram
احتمالا همستر وریفای با صرافی بزاره
کاربران آسیا و ایران رو حذف کنه
با سلام و وقت بخیر اگه کسی از دوستان هست که حوزه ماشین لرینگ کار کرده به صورت تخصصی به ایدی بنده که توی توضیحات چنل هست پیام بده ممنون میشم
⌨️📝:
🙂تا حالا شده بخواین یه لیست رو از دیتابیس بگیرین؟
برای مثال اگه رباتتون 7000 تا کاربر داشت طبیعتا 10 تا 10 تا فرستادن اطلاعات کاربر ها اصلا روش خوبی نیست
🥹

حالا راهکار چیه؟
یکی از راه های باحال استفاده از فایل های اکسل هست! چرا که نه!😊

بریم برای نوشتن تابع تبدیل لیست به فایل اکسل
👍

⌨️ابتدا باید این ابزار ها رو نصب کنین:

pip install openpyxl
pip install pandas


⌨️برای import هم :
import pandas as pd

😁 در نهایت تابع:

def list_to_excel(lst,name='output.xlsx',colum=[]):
    df = pd.DataFrame(lst,columns=colum)
    df.to_excel(name, index=False)


این تابع 3 تا ورودی داره اولی یه لیست هست، دومی اسم فایل خروجی که به صورت پیشفرض output.xlsx هست و در نهایت سومی که همان عنوان های هر ستون هست

برای مثال در اینجا لیستی داریم از کاربر های یک سایت و میخوایم هر عضو از این لیست که هر کدام یه لیسته رو داخل یک ردیف تو فایل اکسل وارد کنیم:

list = [ ["reza" , 20] , [ "zahra" , 20 ] ]
name = "output.xlsx"
colum = [ "name" , "age" ]
list_to_excel(list,name,colum)


#تیکه_کد
#پایتون
Please open Telegram to view this post
VIEW IN TELEGRAM
#Python
یکی پایه های شیء گرایی encapsulation هست، توی پایتون برای اجرا این قانون چند راه مختلف داریم، یکی از اون ها استفاده از دکوریتور ‎[at]property هستش. با بکار گیری این دکوریتور ما برای متغییر های داخل کلاس تعیین میکنیم که چه مقداری بهشون اساین بشه، یا اصلا دسترسی اساین رو میگیریم!!
برای مثال: فرض کنید ما در یک کلاس به متغییری نیاز داریم که فقط عددی از 0 تا 100 داخلش ذخیره کنیم. اسم متغییر رو y در نظرم می گیریم.
در تصویر داخل کلاس یک متغییر به اسم y_ داریم(متغییر هایی که با یک _ شروع بشن protected و اونایی که با ــ شروع میشن private هستن)
متغییر y_ درواقع همون متغییر y هست اما با توجه به اینکه مقدار این متغییر نباید مستقیم توسط instance کلاس تغییر کنه، چون باید حتما بین 0 تا 100 باشه. پس ما یک متغییر protected تعریف میکنیم که مقدار 0 تا 100 رو نگهداری کنه و یک فانکشن به اسم y که به متغییر y_ مقدار بدهد و همچنین مقدار y_ را برگرداند. به این نوع از فانکشن ها property میگن، که getter ,setter و deleter را برای یک متغییر تنظیم میکند(طبق تصویر).
سلام، اومدم یه چیزی بگم و برم 👋

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

نیاز بود که 100 تا 100 تا دیکشنری هارو از توی لیست بیارم بیرون و بفرستم به مقصد
پس اول اومدم یه همچین چیزی نوشتم
ids = []

for index, item in enumerate(iterable):
    if index % 100 == 0:
        ids_string = ','.join(ids)
        ...  # اینجا دیتا رو ارسال کردم به مقصد
        ids.clear()

    else:
        ids.append(item)


اما مشکل این بود که اگر مثلا 1020 تا آیتم توی اون لیست اولیه داشتم، فقط 1000 تاش میرفت به مقصد و 20 تا باقی میموند

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

from itertools import zip_longest


def zip_long(iterable: list, count: int = 2) -> list[tuple]:
    it = [iter(iterable)] * count

    zipped = zip_longest(*it)
    result = []

    for old_tuple in zipped:
        if None in old_tuple:
            new_tuple = tuple(item for item in old_tuple if item is not None)
            result.append(new_tuple)
        else:
            result.append(old_tuple)

    return result


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

البته چون توی تاپل آخر 80 تا آیتم کمتر داریم نسبت به بقیه تاپل ها، متود zip_longest میومد و 80 تا None اضافه میکرد به تاپل آخر
پس یه فور زدم و None هارو هم حذف کردم

نتیجه اش شد فانکشن zip_long که یه لیست میگیره ازتون و تعداد آیتم های هرتاپل رو هم میگیره و نتیجه رو برمیگردونه 😉

نمیدونم چرا حس میکنم لقمه رو چرخوندم دور سرم، ولی کارمو راه انداخت
اگه راه بهتری سراغ دارید توی کامنت ها بگید 💬💔
Please open Telegram to view this post
VIEW IN TELEGRAM
اونوقت بگید LaraGram بده!

امکان ساخت Conversation ها به همین سادگی.

- ولیدیت کردن پاسخ هر سوال
- نام گذاری برای هر سوال جهت پردازش راحت تر.
- ارسال سوال به صورت media
- ساخت Conversation با کیبورد
- مشخص کردن کامند جهت skip سوال
-‏ action جهت اجرا آنی پس از دریافت پاسخ
- مشخص کردن تعداد Attempt
- مشخص کردن Timeout بدون پاسخ ماندن
- مشحص کردن کامند لغو Conversation
- مشخص کردن عملیات پس از Conversation

همه این قابلیت ها تنها با متد های پیش ساخته با یک خط کد

البته که این قابلیت ها در ورژن 2 منتشر میشن😉
https://github.com/laraXgram/LaraGram
👨‍💻📚این روزا چون درگیر امتحان های دانشگاه هستم زیاد وقت نمیکنم که مطلب بزارم ولی خوب یکی از کارهای که در کنار آزمون های دانشگاه دارم انجام میدم این هستش که دارم یه جزوه کامل برای برنامه نویسی پایتون آماده میکنم که دردسترس علاقه مند ها به این زبان برنامه نویسی قرار بدم خیلی سعی کردم تا جایی که میتونم به ذکر جزئیات بپردازم و چیزی رو از قلم نندازم به زودی توی کانال قرار میدم که استفاده کنید👨‍💻📚
سرعت تایپ خود را بالا ببرید

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

⚡️ در ادامه، تعدادی از راهکار هایی را که در افزایش سرعت تایپ تاثیر گذار هستند، بررسی خواهیم کرد🔥


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

✌️تمرین مداوم:
مانند هر مهارت دیگری، تمرین در تایپ نیز به بهبود سرعت شما کمک می کند. انجام تمرینات تایپی می تواند به صورت تدریجی سرعت و دقت شما را افزایش دهد.



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

#Site #programming
شاید نظرم اشتباه باشه ولی، لازمه که بگم :

پروسه مصاحبه فنی بعضی از شرکت‌ها خیلی جالبه، شخصاً چند مورد (کم) دیدم ولی دوستان تأیید کردند همه جا هست، اگر ازین مصاحبه‌ها رد شدید اصلا نگران نباشید قطعاً شما درست ارزیابی نشدید :

درخواست برای مثلاً، Machine Learning Enginner سوالات مصاحبه :
۱-
۵ سوال اول حاشیه‌ای، من این سوالات رو هیچ وقت جدی نگرفتم و نمی‌گیرم (سوالات مربوط به پایتون و یا مثلاً نحوه آماده سازی و publish پکیج روی pypi)

نظر بنده : این سری سوال مخصوصاً وقتی روی یک کار خاص هست به هیچ وجه نمی‌تونه شمارو ارزیابی کنه (مگر اینکه به شما یک زمان معقول داده بشه و درک شما و نحوه برخورد شما با مسائل جدید رو بخوان بسنجند که بسیار کار درست و خوبیه)
۲-
دومین مورد اینه که از شما راجب الگوریتم و ساختمان داده نحوه عملکرد الگوریتم خاص یا پیاده‌سازی اون.

نظر بنده: اگر قرار باشه شرکت شمارو بعنوان
Software developer, software engineer
یا ... استخدام کنه الزام هست که این الگوریتم هارو بدونید  (منظور از دانستن اینه که بدون گوگل کردن نحوه کار الگوریتم بتونید اون رو پیاده‌سازی کنید ینی تک تک جزئیات رو بدونید.)

۳-
سوال خیلی بهتر و حرفه‌ای تر که شخصاً فقط توی ۱ مصاحبه داخلی دیدم، تعریف یک مسئله خاص هست و اینکه از چه راه حلی برای حل اون استفاده می‌کنی ؟

(معمولاً ساختمان داده و الگوریتم لازمه و نظرم روی قبلی هست ولی خب بهتره)

۴-
دیپ‌لرنینگ چیست؟، ماشین لرنینگ چیست؟ یا ...
نظر من :
جالبی این مدل سوال اینه که ی چیزی توی سایت خوندن و حفظ کردن و هیچ درکی از مفهوم ندارند واسه همین اگر یک مدل دیگه تعریف کنید، هیچی نمی‌فهمند

۵-
شخص فنی مصاحبه کننده هیچ تخصصی در زمینه کاری شما نداره و فقط یکبار به اجبار پروژه چند خط کد از گیت‌هاب برداشته و اجرا کرده و شانسی جواب خوبی گرفته.

نظر بنده:
این رایج ترین حالت توی ایران هست، همیشه خودتون رو برای مواجه با این افراد آماده کنید، ۸۰٪ موارد شخص روبرتون توی یکی ازین دسته‌هاس (ادمین دیتابیس، وب دولوپر (بکند یا فرانت)، مدیر شبکه، ادمین سرور (ویندوز) ) توی ۱۹٪ موارد هم شانس بیارید ادمین سرور لینوکس یا سیستم دولوپر هست و ی مقدار سوالات بهتر می‌پرسه.
۱٪ تخصص شمارو داره و می‌دونه چی ازتون می‌خواد، ساده‌ترین حالت مصاحبه همینه (چندتا سوال از نحوه پیاده سازی چیزی که می‌خواد می‌پرسه و اونجا باید خودتونو نشون بدید)
---------------

چندتا پیشنهاد برای دوستان مصاحبه گر (هوش مصنوعی یا دیتا ساینس):

۱- سعی کنید سوال جوری باشه که نحوه حل مسئله طرف رو بسنجید، کلی بپرسید و ببینید چه راهکار یا راهکارهایی برای حل اون مسئله ارائه میده ( اینکه بتونه کانولوشن رو از حفظ فرمولش رو بنویسه یا ... یا اینکه اسمهای بزرگ. gpt و ... رو بلد باشه و از حفظ توضیح بده بدرد شما نمی‌خوره ) شخصی مفید هست که بتونه با دیدن مسئله راهکار درست رو ارائه بده این راهکار باید کم هزینه‌ هم باشه و زمان کمی بگیره

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

۳- اگر توی کاری که‌ می‌کنید research هم مهم هست، یک مقاله مرتبط ارسال کنید و یک زمانبندی بدید از شخص بخواید درکش از مقاله رو براتون توضیح بده.

۴- اجازه سرچ کردن به شخص موقع مصاحبه رو بدید و این موضوع رو همون اول بهش بگید، مصاحبه‌های ۱۰-۱۵ سال پیش بود که به توقع داشتیم شخص متقاضی همه‌ی موضوع رو حفظ باشه و ذهنی بگه، الان خود درست سرچ کردن و پیدا کردن راه‌حل یا درک راه‌حلی که توی اینترنت موجود هست از هرچیزی واجب‌تر و مهمتره
همه‌ی ما stack overflow رو روزی چندبار دنبال می‌کنیم، این چیزی نیست که بابتش ناراحت باشیم بلکه بخشی از
کار هست و خوب تخصصیه اگر کسی در کمترین زمان راه‌حل چالشش رو پیدا کنه

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

۶- برای بیزینس MLOPS بسیار اهمیت بیشتری داره تا مدلی با بالاترین دقت، راجب سرعت و نحوه deploy مدل‌ها سوال کنید حتماً
صرف اینکه طرف می‌تونه مدلی رو تولید کنه بدرد شما نمی‌خوره، بیزینس نیازی به تولید مدل نداره
اهمیت روی دیتا و دیپلوی هست

۷- نحوه پردازش و درک افراد از دیتا رو سوال کنید، درک اشتباه ینی راه‌حل اشتباه که ینی خسارت.
1
-اصل Good Comments در کلین کد

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

‏1 - Legal Comments
گاها نیازه که تو اول هر فایل سورس یه سری کامنت در باره ارزش های حقوقی پروژه بزارید مثل این کامنت توی FitNesse
// Copyright (C) 2003,2004,2005 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the GNU General Public License version 2 or later.


‏2 - Informative Comments
خوبه که بعضی مواقع یه سریع توضیحات دقیق و مختصر رو کامنت کنیم . البته بهتره تا جایی که میشه اسم تابع این اطلاعات رو بهمون بده ولی اگه نشد یه کامنت بزارید مثلا :
// Returns an instance of the Responder being tested.
protected abstract Responder responderInstance()


‏3 - Explanation of Intent
بعضی مواقع خوبه که قصدی که از نوشتن  اون تیکه کد رو داشتید کامنت کنید (با این که در اکثر مواقع نیازی به کامنت نیست)

‏4 - Clarification
گاها خوبه که اون تیکه از کدمون که یه مقدار مبهمه به صورت ساده شده یه کامنت در بارش بزاریم  مثلا
assertTrue(a.compareTo(a) == 0); // a == a
assertTrue(a.compareTo(b) != 0); // a != b


‏5 - Warning of Consequences
ممکنه یه تیکه کدی داشته باشید که ران کردنش یه عواقبی داشته باشه حالا چه کم چه زیاد
بهتر براش تو کامنتا هشدار بنویسید که برنامه نویس های دیگه حواسشون باشه

‏6 - TODO Comments
بعضی وقتا قصد دارید که بعدا یک قسمتی رو بهبود بدید یا اضافه کنید اینطور مواقع میتونید TODO بزارید که با TODO // شروع میشه معمولا
👌1
-اصل Use Pronounceable Names در کلین کد

این اصل میگه که شما باید اسم هایی که برای متغیر هاتون انتخاب میکنید قابل تلفظ باشه اگه نتونید تلفظش کنید نمیتونید در بارش بحث کنید بدون این که صدای احمقانه در بیارید این مهمه چون برنامه نویسی یه فعالیت اجتماعیه

ما برنامه نویسا باید اسم هارو جوری انتخاب کنیم که وقتی در بارش توضیح میدیم راحت باشیم مثلا این دوتا کد رو ببینید اولی اسم های غیر قابل تلفظ داره و دومی اسم های درست درمون

کد زیر :

class DtaRcd102 {
      private Date genymdhms;
      private Date modymdhms;
      private final String pszqint = "102";
};


میتونه با متغیر های بهتر  زیر نوشته باشه :

class Customer {
      private Date generationTimestamp;
      private Date modificationTimestamp;
      private final String recordId = "102";
};



حالا وقتی میخوایم به رفیقمون بگیم بیا یه نگاه به این کد بنداز دیگه راحت تلفظ میکنیم و صدای احمقانه در نمیاریم
Unpopular opinion

خیلی دیدم جامعه رو <سخت کار کردن> مانور رفته. سخت کار کن. موفق میشی. و ...
ولی حقیقتا اصلا مهم نیست چقدر سخت کار میکنید. مهم خروجیه. ممکنه من ۷ صبح کار کنم تا ۷ شب. ولی خروجیم کمتر از کسی باشه که ۱۱ صبح کار میکنه تا ۴.

پس مهم نیست چقدر سخت کار میکنی. مهم اینه که کارآمد و بهینه کار میکنی.
👍2👾1
به عنوان یه سیستم ادمین یه زمانی ممکنه بخواین همه سرویس های سرور رو ریستارت کنین طوری که کرنل ریبوت نشه (خود سرور ریستارت نشه)

واسه os های جدید که از systemd پشتیبانی میکنن دستور زیر یه همچین کاری رو انجام میده:
systemctl isolate rescue
systemctl isolate default


و برای os  های قدیمی تر با تغییر runlevel ها اینکارو میتونین انجام بدین:
init 1; init 3

اگر خواستید یکی رو آزار بدید
بهش بگید
Red-Black Tree
رو  توی Rust پیاده سازی کنه


فکر کنم این عذاب برنامه‌نویس‌های جهنمی باشه 😂😂