زبانهای برنامه نویسی
8 subscribers
3 photos
3 files
18 links
توسعه صنعت آراد صدرا
Download Telegram
10 زبان محبوب برنامه نویسی در رتبه بندی IEEE

سمت چپ در سال 2015، سمت راست در سال 2014
 https://telegram.me/programminglanguage
معرفی 4 کتابخانه مفید در پایتون

 Pyglet
یک فریمورک cross-platform برای مالتی مدیا و گرافیک می باشد.
هندلینگ ماوس و کیبورد،  توابع گرافیکی برای gui، پخش صدا و تصویر و کار با تصاویر از جمله ویژگی های این فریمورک می باشد.

 Peewee
یک کتابخانه کوچک ولی قدرتمند برای دسترسی به بانک های اطلاعاتی مانند sqlite, mysql و postgresql می باشد.

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

 Splinter
یک کتابخانه مفید برای تست وب اپلیکیشن ها با خودکارسازی فعالیتها از جمله پر کردن فرمها و کلیک دکمه ها و پاس دادن url می باشد.
 https://telegram.me/programminglanguage
Null-conditional Operators
در c# 6.0
حتما برای شما هم پیش آمده است که بخواهید قبل از کار با اعضای یک شی از null نبودن آن اطمینان پیدا کنید.
تا قبل از این شما با کمک یک شرط این موضوع را بررسی می کردید ولی در نسخه جدید c# با استفاده از Null-conditional Operators می توانید این کار را براحتی و در همان خط دستور انجام بدهید.
مثال:
int? length = customers?.Length;

 https://telegram.me/programminglanguage
Apache Cordova
یک فریمورک محبوب و رو به گسترش جهت برنامه نویسی و توسعه نرم افزار برای پلتفرمهای موبایل می باشد.
در این فریمورک توسعه نرم افزارها توسط فناوریهای وب مانند html5, javascript و css3 انجام می شود. از همین توسعه نرم افزار بصورت cross-platfrom  و مستقل از پلتفرم انجام می شود. استفاده از قابلیتهای سخت افزاری هر محیط، بدون درگیر ساختن برنامه نویس با پیچیدگی های آن، و ساخت یک package قابل نصب در انتها، برای هر پلتفرم، از ویژگیهای جذاب این فریمورک برای توسعه دهندگان می باشد.

 https://telegram.me/programminglanguage
📢کانال تخصصی زبانهای برنامه نویسی

📑نکات آموزشی در ارتباط با زبانهای برنامه نویسی، فناوری های نوین در مهندسی نرم افزار و نکات متدلوژی ها و روش های تولید محصولات نرم افزاری

📰ارائه آخرین اخبار در ارتباط با دنیای مهندسی نرم افزار، زبانهای برنامه نویسی و فناوری های روز

https://telegram.me/programminglanguage
نام کتاب: تفاوت برنامه نویسی Java & C++
نویسنده: نامشخص
تعداد صفحات: ۸۸
فرمت کتاب: PDF
زبان کتاب: فارسی

https://telegram.me/programminglanguage
معرفی 2 صفت کاربردی در سی شارپ

صفت Flags
این صفت برای تعریف enum ها بصورت بیتی بکار می رود. بطور مثال:

class Program
{
static void Main(string[] args)
{
int snakes = 14;
Console.WriteLine((Reptile)snakes);
}
}

[Flags]
enum Reptile
{
BlackMamba = 2,
CottonMouth = 4,
Wiper = 8,
Crocodile = 16,
Aligator = 32
}

در کد بالا خروجی BlackMamba, CottonMouth, Wiper می باشد ولی اگر عبارت [Flags] را حذف کنیم خروجی عدد 14 خواهد بود.

صفت InternalsVisibleTo
این صفت یک متد غیر public را برای یک اسمبلی دیگر قابل مشاهده می سازد. بیشترین کاربرد این صفت برای نوشتن یونیت تست برای متدهای غیر public می باشد.

https://telegram.me/programminglanguage
نام کتاب: Optimizing C++
نویسنده: نامشخص
تعداد صفحات:92
فرمت کتاب: PDF
زبان کتاب: انگلیسی

https://telegram.me/programminglanguage
چگونه مانع kill شدن برنامه مان شویم(سی شارپ)
شاید برای شما هم پیش آمده است که می خواهید یک پروسس را ببندید اما با پیام Unable to terminate process که میگه The operation could be completed. Access is denied روبرو شدید.
حتما هم پیش آمده که بخواهید از بسته شدن برنامه تان جلوگیری کنید(البته اصلا توصیه نمی کنم بلاخره Admin باید بتواند برنامه را kill کند)
در زیر چگونگی انجام این کار تشریح شده است.
ابتدا چند خط زیر را در قسمت using قرار بدهید.
using System.Runtime.InteropServices;
using System.Security;
using System.Security.AccessControl;
using System.Security.Principal;
ما برای اینکار از advapi32.dll استفاده می کنیم که مدیر امنیتی اجرای برنامه هاست.
تکه کد زیر را در کلاس خودتان بنویسید.
[DllImport("advapi32.dll", SetLastError = true)]
static extern bool GetKernelObjectSecurity(IntPtr Handle, int securityInformation, [Out] byte[] pSecurityDescriptor,
uint nLength, out uint lpnLengthNeeded);

public static RawSecurityDescriptor GetProcessSecurityDescriptor(IntPtr processHandle)
{
const int DACL_SECURITY_INFORMATION = 0x00000004;
byte[] psd = new byte[0];
uint bufSizeNeeded;
// Call with 0 size to obtain the actual size needed in bufSizeNeeded
GetKernelObjectSecurity(processHandle, DACL_SECURITY_INFORMATION, psd, 0, out bufSizeNeeded);
if (bufSizeNeeded < 0 || bufSizeNeeded > short.MaxValue)
throw new Win32Exception();
// Allocate the required bytes and obtain the DACL
if (!GetKernelObjectSecurity(processHandle, DACL_SECURITY_INFORMATION,
psd = new byte[bufSizeNeeded], bufSizeNeeded, out bufSizeNeeded))
throw new Win32Exception();
// Use the RawSecurityDescriptor class from System.Security.AccessControl to parse the bytes:
return new RawSecurityDescriptor(psd, 0);
}

[DllImport("advapi32.dll", SetLastError = true)]
static extern bool SetKernelObjectSecurity(IntPtr Handle, int securityInformation, [In] byte[] pSecurityDescriptor);

public static void SetProcessSecurityDescriptor(IntPtr processHandle, RawSecurityDescriptor dacl)
{
const int DACL_SECURITY_INFORMATION = 0x00000004;
byte[] rawsd = new byte[dacl.BinaryLength];
dacl.GetBinaryForm(rawsd, 0);
if (!SetKernelObjectSecurity(processHandle, DACL_SECURITY_INFORMATION, rawsd))
throw new Win32Exception();
}

[DllImport("kernel32.dll")]
public static extern IntPtr GetCurrentProcess();

[Flags]
public enum ProcessAccessRights
{
PROCESS_CREATE_PROCESS = 0x0080, // Required to create a process.
PROCESS_CREATE_THREAD = 0x0002, // Required to create a thread.
PROCESS_DUP_HANDLE = 0x0040, // Required to duplicate a handle using DuplicateHandle.
PROCESS_QUERY_INFORMATION = 0x0400, // Required to retrieve certain information about a process, such as its token, exit code, and priority class (see OpenProcessToken, GetExitCodeProcess, GetPriorityClass, and IsProcessInJob).
PROCESS_QUERY_LIMITED_INFORMATION = 0x1000, // Required to retrieve certain information about a process (see QueryFullProcessImageName). A handle that has the PROCESS_QUERY_INFORMATION access right is automatically granted PROCESS_QUERY_LIMITED_INFORMATION. Windows Server 2003 and Windows XP/2000: This access right is not supported.
PROCESS_SET_INFORMATION = 0x0200, // Required to set certain information about a process, such as its priority class (see SetPriorityClass).
PROCESS_SET_QUOTA = 0x0100, // Required to set memory limits using SetProcessWorkingSetSize.
PROCESS_SUSPEND_RESUME = 0x0800, // Required to suspend or resume a process.
PROCESS_TERMINATE = 0x0001, // Required to terminate a process using TerminateProcess.
PROCESS_VM_OPERATION = 0x0008, // Required to perform an operation on the address space of a process (see VirtualProtectEx and WriteProcessMemory).
PROCESS_VM_READ = 0x0010, // Required to read memory in a process using ReadProcessMemory.
PROCESS_VM_WRITE = 0x0020, // Required to write to memory in a process using WriteProcessMemory.
DELETE = 0x00010000, // Required to delete the object.
READ_CONTROL = 0x00020000, // Required to read information in the security descriptor for the object, not including the information in the SACL. To read or write the SACL, you must request the ACCESS_SYSTEM_SECURITY access right. For more information, see SACL Access Right.
SYNCHRONIZE = 0x00100000, // The right to use the object for synchronization. This enables a thread to wait until the object is in the signaled state.
WRITE_DAC = 0x00040000, // Required to modify the DACL in the security descriptor for the object.
WRITE_OWNER = 0x00080000, // Required to change the owner in the security descriptor for the object.
STANDARD_RIGHTS_REQUIRED = 0x000f0000,
PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF),// All possible access rights for a process object.
}
حال با بدست آوردن هندل پروسس خود بکمک Kernel32.dll و صدا زدن متد SetProcessSecurityDescriptor پروسس شما غیر قابل بستن می شود.
کد زیر اینکار را می کند آنرا می توانید در load فرم و یا در رویداد کلیک یک دکمه بگذارید.
// Get the current process handle
IntPtr hProcess = GetCurrentProcess();
// Read the DACL
var dacl = GetProcessSecurityDescriptor(hProcess);
// Insert the new ACE
dacl.DiscretionaryAcl.InsertAce(
0,
new CommonAce(
AceFlags.None,
AceQualifier.AccessDenied,
(int)ProcessAccessRights.PROCESS_ALL_ACCESS,
new SecurityIdentifier(WellKnownSidType.WorldSid, null),
false,
null)
);
// Save the DACL
SetProcessSecurityDescriptor(hProcess, dacl);
حال برنامه شما غیر قابل kill شدن است!

https://telegram.me/programminglanguage
کدام ادیتور بهتر است: ویم یا ایمکس؟
ایمکس (Emacs) و ویم (Vim) دو ویرایشگر متن محبوب و متن باز در سیستم های یونیکس و شبه یونیکس می باشند. طرفداران این دو ویرایشگر در طول تاریخ همواره بر سر برتری ویرایشگر محبوب خود بحث و جدل داشته اند. در حالیکه بسیاری از ویژگی ها و عملکردهای این دو ویرایشگر در پلاگین ها، اسکریپت نویسی ها و کلیدهای میانبر یکسان است ولی روش کار آنها تا حدودی با هم متفاوت است. با فیسیت همراه باشید تا پس از معرفی مختصر این دو ویرایشگر، مقایسه ای نیز بین آنها داشته باشیم.


ایمکس (Emacs)
ایمکس یک ویرایشگر متنی محبوب است که عمدتا توسط کاربران، برنامه نویسان و مهندسین سیستم های شبه یونیکس و مدیران سیستم استفاده می شود. مانند دیگر ویرایشگرهای متنی، ایمکس نیز دستورات تایپی و کلیدهای اصلی دارد که می توان کلمه ها و خطوط را حذف یا اضافه کرد. ایمکس با استفاده از زبان برنامه نویسی لیسپ نوشته شده و کاربرانی که قصد توسعه یا شخصی سازی آن را دارند، نیز از همان زبان استفاده می کنند.
ایمکس اولین بار توسط ریچارد استالمن در دانشگاه MIT ایجاد شد. نسخه محبوبی از این ویرایشگر گنو ایمکس نامیده می شود. نسخه هایی از ایمکس، نیز برای استفاده بر روی ویندوز توسعه داده شده است.
ویم (Vim)
برام مولینار در سال 1988 شروع به کار بر روی ویرایشگر ویم، برای کامپیوترهای آمیگا کرد. مولینار این ویرایشگر را اولین بار بار در سال 1991 منتشر کرد. این ویراشگر مبتنی بر ویرایشگر اولیه به نام Stevie بود که توسط تیم تامپسون و دو همکارش ابداع شده بود. نام Vim برگرفته از Vi Improved است زیرا ویم، یک نسخه گسترش یافته از ویرایشگر vi با بسیاری از ویژگی های جدید دیگر است.
ویم یک پروژه نرم افزاری متن باز است که در سال 2006، به عنوان پر طرفدارترین ویرایشگر متن توسط خوانندگان لینوکس ژورنال رای داده شد.
ویم بهتر است یا ایمکس؟
جنگ بین ویرایشگرها یا Editor War همواره وجود داشته است ولی چه تفاوت هایی بین این دو ویرایشگر وجود دارد که این چنین مورد بحث و جدل قرار می گیرد؟
واسط کاربری
ویم از محیط های ویرایشی ساخته شده است که رایج ترین آنها محیط Command و محیط insert می باشد. ویم در تلاش است تا تعداد کلیدهایی که کاربر باید فشار دهد، کاهش دهد زیرا ویرایشگر vi که ویم هم بر اساس آن ساخته شده است، برای استفاده در ترمینال هایی با سرعت کند طراحی شده بود.
ایمکس از کلیدهای ترکیبی برای فعال سازی میانبرها استفاده می کند که اغلب باید چندین کلید را همزمان با هم فشار داد، تا عملی صورت گیرد. این جنبه از ایمکس اغلب مورد انتقاد قرار می گیرد.
سهولت یادگیری
یادگیری ایمکس به دلیل واسط کاربری طبیعی تری که دارد، بخصوص برای کاربرانی که با ویرایشگر های متنی مبتنی بر GUI آشنایی دارند، آسان تر است، ولی ویم محیط های ویرایشی متفاوتی دارد که برای افرادی که برای اولین می خواهند شروع به یادگیری کنند، کمی مشکل است.
سرعت ویرایش
علاقمندان ویم معتقدند کاربران بعد از آشنایی با محیط های ویرایشی این ویرایشگر و دستورات ویم، کارآیی و بهره وری بیشتری را در این ویرایشگر خواهند داشت. ویرایش فایل با ویم بسیار سریعتر از ایمکس است زیرا یکی از اهداف تولید ویرایشگر ویم، داشتن سرعت بالا بوده است. برای مثال، حرکت نشانگر در ویم می تواند از طریق کلیدهای H، J، K و L در محیط عادی کنترل شود. در این حالت نیازی نیست که دست کاربر صفحه کلید را رها کند که موجب افزایش سرعت می شود ولی در کنار آن، زمانی هم صرف تغییر از حالت ویرایشی به حالت حرکتی خواهد شد. در ایمکس، نشانگر می تواند با میانبرهای Ctrl-B و Ctrl-F حرکت کند که به دلیل استفاده از دو کلید سرعت کاربر را پایین خواهد آورد.
استفاده از منابع
ویم از ایمکس سبکتر است و فضای حافظه کمتری را اشغال می کند. طرفداران ویم معمولا به این مصرف منابع ایمکس ایراد می گیرند و Emacs را برگرفته از پنج کلمه “Eighty Megabytes And Constantly Swapping” می دانند که به حافظه قابل توجهی برمی گردد که به طور معمول ایمکس از آن استفاده می کند.
البته با کلاینت گنو، یک فرآیند ثابت ایمکس می تواند به گونه ای اجرا شود که از چندین کلاینت به صورت همزمان پشتیبانی کند. این کار سبب می شود تا سرعت بالا رود و مصرف حافظه نیز کاهش یابد، که در این صورت تا حدودی ایمکس به ویم نزدیک می شود.
توسعه پذیری و سفارشی سازی
اگرچه هر دو ویرایشگر ویم و ایمکس از پلاگین های بسیاری برای افزایش کارکردهای خود استفاده می کنند ولی با ایمکس خیلی بیشتر می توان محیط ویرایشگر را سفارشی سازی کرد. این یکی از مهمترین ویژگی های قابل بحث بین این دو ویرایشگر است.
ایمکس در elisp یا Emacs Lisp توسعه داده می شود ولی ویم زبان اسکریپتی مخصوص به خود را دارد و از دیگر زبان های برنامه نویسی برای توسعه پلاگین، پشتیبانی می کند. ایمکس با تعریف دوباره توابع داخلی elisp، بصورت مداوم در حال توسعه است. گروهی از تغییرات مرتبط با هم، حالت ها یا mode نامیده می شوند و به آسانی برای استفاده اتوماتیک در انواع مختلف فایل ها، پیکربندی می شوند. تعریف این حالت ها برای زبان های برنامه نویسی مختلف بسیار راحت است، بنابراین می توان به سادگی برای زبان برنامه نویسی یا فریم ورک های مختلف، حالت هایی را تعریف کرد مثلا lisp mode یا Ruby mode. در این محیط ها می توان به صورت مستقیم عملکردهای اصلی ایمکس را هم تغییر داد مثلا به صورت اتوماتیک فرمت یا رنگ متن را تغییر داد و یا الگوهای استانداردی اضافه کرد. بنابراین می توان گفت که ایمکس برای برنامه نویسان بسیار قابل انعطاف تر از ویرایشگر ویم است ولی بسیاری هم مخالف این نظرند. ویم نیز می تواند با استفاده از محیط دستوری خود، توسعه یابد. در محیط دستوری می توان تنظیماتی را انجام داد، توابعی را تعریف کرد و ماکروهایی ساخت. در واقع فایل های پیکربندی ویم، تنها، دستوراتی هستند که می توانند از طریق محیط دستوری، وارد شوند.
واسط کاربری گرافیکی
هر دو ویرایشگر ویم و ایمکس، رابط کاربری گرافیکی دارند. ایمکس از XDisplay یا gtk2 برای واسط کاربری خود استفاده می کند ولی ویم می تواند از واسط های کاربری بسیاری نظیر gtk، گنوم، گنوم 2، موتیف، آتنا، neXtaw و نیز gtk2 بهره می برد.

https://telegram.me/programminglanguage
مفهوم REST
کلمه REST مخفف Representational State Transfer میباشد یک معماری وب سرویس است که از HTTP برای انتقال اطلاعات میان کلاینت و سرور استفاده میکند کار کردن با REST بسیار ساده تر از وب سرویس های پیچیده ای مانند SOAP میباشد.

یک سرویس به اصطلاح RESTful عموما بر روی پروتکل HTTP  و تمام افعال استاندارد این پروتکل را که توسط مرورگرهای وب قابل درک هستند کار میکند مانند (GET, POST, PUT, DELETE)

معماری REST لازم است شرایط زیر را داشته باشند:

کلاینت سرور (client-server) باشد.
بدون حالت (stateless) باشد.
قابلیت cache داشته باشد.
سیستم لایه‌بندی شده  داشته باشد.
واسط یکنواخت  داشته باشد.
دارای قابلیت کد در صورت نیاز  باشد.
از لحاظ رویکرد برنامه نویسی REST جایگزینی ساده برای سرویس‌های وب است. توسعه‌پذیری در تعاملات میان اجزا، عمومیت واسط ها، توسعه مستقل اجزا و استفاده از واسطه ها  از کلیدی ترین اهداف معماری REST می‌باشد و همچنین استفاده از معماری REST در برنامه‌نویسی کارایی، سادگی، انعطاف‌پذیری، امکان مشاهده و نظارت، قابلیت حمل و قابلیت اطمینان را افزایش می دهد.

یک وب سرویس REST دارای مشخصات زیر است

بوسیله URI کار میکند یعنی ریسورس ها و کالکشن های خود را به صورت http://example.com/resources دریافت میکند

اطلاعات را به صورت عموما JSON دریافت میکند البته میتواند اطلاعات به صورت XML هم برگردانده شود

برخلاف وب سرویس های برپایه SOAP هیچ استاندارد رسمی برای وب سرویس های REST وجود ندارد به دلیل اینکه REST یک معماری است در حالی که SOAP یک پروتکل وب سرویس است.

https://telegram.me/programminglanguage