چه کنیم که ایمیل هایی که ارسال میکنیم اسپم نشود؟

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

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

  • اگر smpt  راه اندازی می کنیم حواسمان به سابقه آی پی باشد.
  • حتما لینک unsubscribe  را در ایمیل قرار دهیم.
  • کاری کنیم که فرایند unsubscribe  با حداکثر راحتی برای کاربر قابل انجام باشد.
  • از استفاده لینکهایی که به جای آدرس دومین از آی پی استفاده می کنند اجتناب کنیم.
  • از عکس های خیلی بزرگ در متن ایمیل استفاده نکنیم
  • استفاده از عنوان مناسب با محتوای ایمیل.
  • از encoding  مناسب استفاده کنیم.
  • بین هر ارسال انبوه باید یک فاصله زمانی مناسب در نظر گرفته شود.
  • از متد های authentication  استفاده کنیم.( SPF  Domain Keys)
  • مطمئن شوید که آدرس reply-to معتبر است.
  • از JavaScript, ActiveX, plug-ins در متن استفاده نکنیم.
  • از encodingهای base-64 استفاده نکنید.
  • از spaceهای اضافی در عنوان استفاده نکنیم.
  •  از عکسهای مخفی برای مشخص شدن وضعیت ایمیل استفاده نکنیم.
  • دقت کنیم به چه کسانی ایمیل می دهیم(فرض کنید به یک سری از مشتریان ایمیل دهیم و ده درصد از آن ها هر سری ایمیل های مارا اسپم کنند.فاتحه)
  • سعی کنیم فایلی را پیوست نکنیم.
  • در عنوان از علامت تعجب یا هر گونه علامت غیر عادی استفاده نکنیم.

همانطور که ملاحظه کردید عوامل زیادی است که باعث می شود که ایمیل ما اسپم شود.در ضمن این موضوع نیز مانند بحث seo  در سایت ها،بسیار عدم قطعیت وجود دارد و بسیاری از موارد بالا از تجربه بدست آمده.لطفا شما نیز اگر موردی می دانید در کامنت ها مطرح کنید.


منابع

نمونه سوالات استخدامی برنامه نویسی

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

هر کسی که کد بنویسد باید بتواند به سوالات زیر جواب دهد:

  • فرق Thread و  Process چیست؟
    ترد کوچکترین واحد برای اجرای یک پروسس است.مجموع thread ها یک Process  را می سازند.تردها می توانند حافظه را به اشتراک بگذارند(روی shared memory اجرا شوند) ولی پروسس ها این امکان را ندارند.برای ارتباط بین thread ها نیاز به هیج لایه واسطی نیست .در صورتی که برای ارتباط پروسسها نیاز به inter process communication داریم.
  • چرخه عمر ویندوز سرویس با یک فایل exe چه تفاوت هایی دارد؟
    ویندوز سرویس بر پایه  background process است که هیچ UI خاصی ندارند.همچنین بر خلاف exe ها برای اجرا باید روی کامپیوتر نصب شوند.تفاوت دیگر در این است که برای اینکه ویندوز سرویس اجرا شود نیاز نیست روی کامپیوتر لاگین کرده باشید و به وسیله Service Control Manager کنترل می شود.این درحالی است که برای اجرا شدن exe حتما می بایست روی کامپیوتر لاگین کرده باشید.
  • حداکثر میزان حافظه ای که در ویندوز ، هر پروسس می تواند آدرس دهی شود چه مقداریاست؟
    بسته به نوع سی پی یو ۳۲bit/64bit متفاوت است.
  • بین EXE و DLL چه تفاوت هایی وجود دارد؟
    exe یک واحد اجرایی مجزا است که منابع منحصر به فرد خود را دارد ولی dll(Dynamic Link Library ) را نمی توان اجرا کرد .از dll ها داخل exe ها استفاده می شود.وقتی که فایل exe اجرا می شود یک پروسس برایش ایجاد می شود.
  • چه تفاوتی بین strong-typing وweak-typing وجود دارد؟
    زبان های strong-typing شما را محدود به انجام عملیات روی تایپ های هم نوع  می کند به عنوان مثال شما نمی توانید مقدار person را به یک int اختصاص دهید.
  • PID چیست؟
    شناسه پروسس است.فرض کنید زمانی نیاز دارید که به یک پروسس دسترسی داشته باشید،به راحتی می توانید به وسیله PID این کار را انجام دهید.
  • چه تعداد پروسس می تواند به یک پورت TCP گوش دهد؟
    روی هر پورت Tcp فقط یک پروسس می تواند listen کند.
  • GAC چیست؟چه مشکلی را برطرف کرده است؟
    یک مکان برای ذخیره و به اشتراک گذاری اسمبلی ها است. اگر نیاز باشد به یک اسمبلی بیش از یک برنامه دسترسی داشته باشد دیگر نمی توان آن را به صورت private دبپلوی کرد وآن را باید در مکانی که برای CLR شناخته شده است قرار داد.که آن مکان GAC نام دارد.GAC در مسیر c:\windows\assembly قرار دارد.Global Assembly Cache یک فایل ساختار یافته است که دارای بسیاری زبر شاخه است که این زیر شاخه ها توسط یک الگوریتم ساخته می شود.مشکلی که GAC حل کرد ، رهایی از جهنم DLL ها بود.

این سوال هم من متوجه نشدم 😉

Corillian’s product is a “Component Container.” Name at least 3 component containers that ship now with the Windows Server Family. Wink |

مشخصات یک لاگ خوب

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

اما یکی از مهمترین ویژگی هایی که یک لاگر خوب باید داشته باشد ، یک لاگ فایل استاتدارد و صحیح است.در ادامه به برخی از این مواردی که باید برای داشتن یک لاگ خوب توجه کنیم پرداخته شده است:

  • قابل پارس کردن باشد.به این معنی که هر خط از آن را بتوان به وسیله یک اسکریپت خواند و پارس کرد.می توانید از فرمت key-value یا json استفاده کنید.
  • قابل خواندن برای انسان باشد.یعنی کاربر بتواند آن را براحتی بخواند و نباید از فرمت های باینری استفاده کرد.
  • هر لاگ که به واسطه یک رویداد بوجود آمده ، در یک خط جدید ثبت شود.این کار باعث می شود خواندن آن توسط ابزار راحت تر باشد.
  • فرمت لاگ فایل خود را مستند کنید.فرض کنید که شما ۶ ماه بعد فایل لاگ خود را باز می کنید و ممکن است که ندانید یک ستون و یا یک عبارت خاص در لاگ به چه معناست.علاوه بر آن  ساختار لاگ نیز مانند کد می تواند تغییر کند.
  • از لاگ کردن اطلاعات اضافی نگران نباشید.سعی کنید برای لاگ کردن درجه بندی تعیین کنید.به این نکته توجه کنید که همیشه امکان دارد شما فراموش کرده باشید اطلاعات مهم را لاگ کنید.
  • سعی کنید فایل لاگ را با دیتا بیس اشتباه نگیرید و به فکر نرمال کردن آن ها نیافتید.به طور مثال زمانی که می خواهید اطلاعات یک کاربر را از قبیل نام و نام کاربری و زبان سیستم لاگ کنید،به این فکر نیافتید که بهتر است فقط شناسه کاربر را لاگ کنم.این کار باعث می شود بعدها زمانی که نیاز به تجزیه تحلیل لاگ داشتید از انجام خیلی از کارهای اضافی صرفه جویی شود.
  • اولین چیزی که در هر سطر باید وجود داشته باشد Timestamp است.
  • اطلاعات حساس مثل پسورد یا اطلاعات بانکی را لاگ نکنید.
  • اگر اطلاعات شخصی مثل ایمیل یا شماره تماس را لاگ می کنید باید تمام نکات امنیتی در رابطه با نگهداری آن را مد نظر قرار دهیم.
  • از Log rotation استفاده کنیم.Log rotation فرایندی اتوماتیک است که لاگ ها را بر اساس تاریخ آرشیو می کند.
  • از یک فریمورک لاگینگ استفاد کنید.

منبع:

Log Like A Boss

کارتیمی

در خیلی از جاها شنیده بودم که افراد سرمایه اصلی شرکت هستند ولی نظرم به کل در این مدت تغییر کرده و به نظرم افراد سرمایه اصلی شرکت نیستند بلکه تیم (ها) سرمایه اصلی یک شرکت است.

teamwork

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

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

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

این جاست که افراد دیگر سرمایه نیستند بلکه ضرر هم هستند.همه می خواهند دانش خود را به صورت فردی به نمایش بگذارند و هر کاری انجام می شود به نام خود ثبت می کنند.

یکی دیگر از مشکلاتی که ممکن است این دسته از افراد یا تیم سازی اشتباه بوجود بیاورند زمانی است که مدیر تیم مجبور می شود آن ها را در یک پروژه به تنهایی زندانی کند که مشکلی برای خودشان و بقیه بوجود نیاورند.آن وقت دانش آن پروژه را فقط آن شخص که می داند رفتنش از شرکت تبدیل به ریسک اساسی خواهد شد.

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