زبانهای برنامه نویسی
8 subscribers
3 photos
3 files
18 links
توسعه صنعت آراد صدرا
Download Telegram
چگونه مانع 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
جهت ارائه پیشنهادات خود به
@mjfotovat
پیام بدهید.
زبان R یا پایتون
بر اساس نتایج حاصل از مطالعه جدید، Python محبوب‌ترین زبان برنامه‌نویسی در حوزه علوم داده محسوب می‌شود و بیشترین کاربرد را در این زمینه دارد. کارشناسان در این زمینه اعلام کردند که در حوزه تحلیل و به‌کارگیری داده، هیچ زبان برنامه‌نویسی به اندازه Python محبوبیت جهانی ندارد.
 با وجود موفقیت‌های این زبان برنامه‌نویسي، کارشناسان پیش‌بینی می‌کنند که رتبه نخست همچنان در اختیار Python باقی نماند.
از دو سال قبل کارشناسان اعلام می‌کردند که Python به واسطه آسانی در فرآیند کدنویسی و قابلیت‌های پیشرفته خود می‌تواند محبوبیت جهانی کسب کند. اما بررسی‌های جدید نشان می‌دهد سلیقه کارشناسان داده در حال تغییر است.
از آنجایی که علوم داده در سراسر جهان بسیار مورد توجه قرار می‌گیرد و ابزارهای تحلیل داده برای سازمان‌ها اهمیت فراوان پیدا کرده‌اند، کارشناسان پیش‌بینی می‌کنند که زبان برنامه‌نویسی R قابلیت‌های بیشتری در این زمینه ارائه می‌دهد و همین مسئله باعث خواهد شد در آینده نزدیک R از آنجایی که زبان‌های برنامه‌نویسی با قابلیت‌های مختلف خود و توانمندی‌های متفاوت به کار گرفته می‌شوند، قیاس آنها کار چندان آسانی نیست. ولی در حوزه علوم داده کارشناسان بر این باورند که R می‌تواند موفقیت‌های بیشتری را نسبت به Python کسب کند.
در حالی که R یک زبان برنامه‌نویسی پیشرفته برای حوزه آمار و ارقام محسوب می‌شود، Python اهداف عمومی بیشتری را پیش‌روی خود می‌بیند. در مجموع گفته شده است تعداد فرصت‌های شغلی موجود مرتبط با زبان برنامه‌نویسی R بیشتر از Python است. Python را از آن خود کند.


https://telegram.me/programminglanguage
معرفی الگوی Dependency Injection
یکی از اهداف برنامه نویسی شی گرا، کم کردن وابستگی اشیا به یکدیگر است. این به این معنی است که اگر در یک کلاس(کلاس اصلی) نیاز به استفاده از قابلیت های کلاس دیگر(کلاس کمکی) بود، به نحوی این کار انجام شود که با تغییر در کلاس کمکی، کلاس اصلی نیاز به تغییر نداشته باشد. و اینکه اگر نیاز شد بعد ها عملکرد کلاس کمکی تغییر کند، بدون تغییر در کلاس اصلی این کار انجام شود.
برای مثال فرض کنید در حال طراحی کلاسی هستیم که امکان تغییر پسورد را به کاربر میدهد. میخاهیم بعد از اینکه پسورد تغییر کرد با ایمیل به کاربر خبر داده شود. در نگاه اول خبر رسانی یکی از قابلیت های کلاس اصلی ما به نظر میرسد.
اما با کمی دقت متوجه میشویم که این قسمت از برنامه میتواند ماژول جدایی باشد و فقط در برنامه از آن استفاده شود. و ممکن است استراتژی ما برای خبر رسانی در آینده تغییر کند مثلا اعلام تغییرات به وسیله SMS انجام گیرد نه ایمیل.اینجاست که DI وارد کار میشود.
مثالی دیگر از DI در طراحی برنامه های چند لایه است. هنگام تعیرف کلاس های BL نیاز به این دارید که کلاس DA که از آن استفاده میکنید را به برنامه معرفی کنید. هنگام استفاده از DI به جای تعریف یک متغیر از جنس کلاس DA مثلا SQLRepositoryدر BL تنها کافی است یک متغیر از جنس IRepository در این کلاس تعیرف کنید و بعدا در هنگام استفاده از این کلاس تعیین کنید که این Repository از چه جنسی است مثلا SQLRepository یا AccessRepository.
در یک طراحی که از DI بهره میبرد قسمت های زیر وجود دارند
– شی وابسته
– تعریف وابستگی ها
– تامین کننده وابستگی ها که عموما محل استفاده از شی وابسته است.
در پیاده سازی DI دو استراتژی جداگانه ممکن است استفاده شود. اولی Constructor Injection و دیگری Setter Injection. از مزایای روش اول این است که نمیتوان بدون تعیین وابستگی از کلاس مورد نظر استفاه برد و جلوی خطاهای انسانی گرفته میشود. اما از مزایای روش دوم میتوان به عدم نیاز به تغییر سازنده برنامه و عدم نیاز به ساخت اشیاء سنگین تا زمان نیاز به آنها اشاره کرد.

https://telegram.me/programminglanguage
معماری های MVC, MVVM, MVP و MOVE

معماری MVC
ترکیب model, view و controller که یک module را ایجاد می‌کند طراحی MVC را ایجاد می‌کند. Model لایه data را می سازد. هرچیزی که مرتبط به اطلاعات ذخیره شونده هست باید از این لایه بگزرد. View لایه‌ایست که کاربر از طریق آنdata را می‌بیند و Controller چسب بین این دو لایه خواهد بود.
در این طراحی هر نوع عملگری با استفاده از کارکردش در جای مناسبش قرار می گیرد.

معماری MVVM

طراحی MVVM اولین بار توسط microsoft ارایه شد. در ساختار این طراحی Model و View تفاوتی با MVC ندارد. VM یا ViewModel همچون Controller لایه نازکیست بین Model و View اما تفاوت هایش عبارت است از:

ارتباط دو‌طرفه با View:که ViewModel ارایه کننده View است. یعنی هر فیلد در ViewModel بیشتر برابر با View است و به همین علت از Model دورتر است.هر View مستقیماً به یک ViewModel bind می‌شود و در نتیجه تغییرات مربوط به View به صورت لحظه‌ای درViewModel دیده می‌شود و از طرفی تغییرات برعکس هم باعث render مجدد View می شود.
معمولاً برای هر View فقط یک ViewModel وجود دارد. این ارتباط یک به N می باشد.
و Model و View فقط از طریق ViewModel ارتباط دارند.

معماری MVP
این طراحی مشتق شده از MVC است و کاملاً شبیه آن عمل می‌کند فقط لایه Presenter کمی شبیه ViewModel عمل می کند.
تفاوتی که با MVVM دارد در این است که در این روش بر عکس MVVM ارتباط بین Presenter و View به صورت یک به یک می باشد.

معماری MOVE
در این طراحی که شباهت زیادی با MVP دارد تفاوتی که وجود دارد Operation جای Presenter گرفته است. و از طرفی Model با استفاده از Event می‌تواند View را دوباره Render کند. یعنی دیگر نیازی نیست که Model به لایه ارتباطی بگوید که فلان data ی من عوض شده در عوض به view می گویید.

https://telegram.me/programminglanguage
مفهوم Reflection در جاوا

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

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

یک مثال می زنم: برای اینکه در جاوا از یک کلاس شئ بسازید حتما باید نام آن را بدانید و آن کلاس نیز در classpath برنامه شما قرار داشته باشد و سپس با کد زیر یک شئ از آن بسازید:

MyClass obj = new MyClass();

حال می توانید متد doSomething را از این کلاس فراخوانی کنید. حالا می خواهیم یک برنامه بنویسیم که نقش یک container را دارد، بدین صورت که در زمان اجرا کلاس های مختلفی به آن داده می شود و آن برنامه باید متد doSomething آن کلاس ها را فراخوانی کند. اینجا است که Reflection بکار می آید چون در زمان کد نویسی ما نمی دانیم نام آن کلاس ها چیست و همچنین آن کلاس ها هنوز بوجود نیامده اند بنابراین در classpath برنامه نیز قرار ندارند.

برای قرار دادن یک کلاس در classpath برنامه از قابلیت Dynamic Class Loading در Reflection استفاده می کنیم و سپس با استفاده از Reflection یک شئ از کلاس های جدید در زمان اجرا می سازیم:

Constructor constructor = MyObject.class.getConstructor(String.class);
MyObject myObject = (MyObject) constructor.newInstance("constructor-arg1");
و در نهایت هم با استفاده از Reflection لیست متد های کلاس را بدست می آوریم و متد doSomething را از بین آنها پیدا کرده و فراخوانی می کنیم:

Method[] methods = MyObject.class.getMethods();

for(Method method : methods){
// condition
System.out.println("method = " + method.getName());
}

https://telegram.me/programminglanguage
اخیراً روشهای جدید Captcha مبتنی بر تصویر ارائه شده اند که عبور از آنها برای ما انسانها ساده تر و برای رایانه ها غیرممکن شده است. در یکی از این روشها از قدرت تشخیص انسانها در تمییز اجسام از یکدیگر در حالت سه بعدی و دو بعدی و همچنین در زوایای مختلف استفاده می شود. روش دیگر بر تشخیص یک تصویر متفاوت از بین چندین تصویر مشابه استوار است و شکستن آن برای رایانه های فعلی غیرممکن می باشد. روشی که در بیشتر وب سایتها برای جداسازی ورودیهایی که کامپیوترها تولید کرده اند از ورودیهای انسانی به کار می رود، Captcha یا Completed Automated Public Turing نام دارد. در این روشها، معمولاً ترکیبی از الفبا، اعداد و کاراکترهای دیگر را تولید می کنند به طوری که یک انسان بتواند آنها را تشخیص دهد، ولی شناسایی اجزای آن برای رایانه ها مشکل باشد. همان طور که رباتهای کامپیوتری تولید کننده ورودیها هوشمندتر می شوند، روشهای Captcha نیز آزاردهنده تر می شوند به طوری که عبور از برخی از آنها برای ما انسانها نیز دشوار می نماید. به همین دلیل متخصصان این قضیه به دنبال روشهایی هستند که استفاده از آنها برای انسانها ساده تر و برای کامپیوترها تقریباً غیر ممکن باشد. یکی از روشهای جایگزین، استفاده از عکسهای سه بعدی در اینگونه تستها است که تشخیص آنها برای انسانها ساده بوده و در حال حاضر تکنولوژی شکستن آن برای رایانه ها موجود نمی باشد. در این روش که 3D Captcha نام دارد، از قدرت تشخیص انسانها برای تمییز اجسام سه بعدی در زوایای مختلف استفاده می شود.
ایده دیگری که پیشنهاد می شود، استفاده از تصاویر در اینگونه الگوریتمها است. در همین راستا روشی به نام Captcha the Dog ابداع شده که در وب سایتی با همین نام ارائه شده است. ایده اصلی در این روش کلیک بر روی تصویری است که با بقیه متفاوت است. در اینجا منظور کلیک بر روی تصویر سگ در بین هشت تصویر گربه بر روی یک صفحه 3×3 است. در این روش هر بار جای سگ در ردیفها و ستونهای مختلف عوض می شود. در صورتی که کاربر یک بار هم اشتباه کند کل پروسه از اول آغاز می گردد. زمانی که کاربر به تعداد کافی بر روی تصویر درست کلیک کند، آنگاه کل صفحه شامل تصاویر گربه خواهد شد و به این ترتیب فرد از تست با موفقیت عبور می کند.
در حال حاضر تمییز این تصاویر از یکدیگر برای رایانه ها غیر ممکن است و همچنین انتخاب تصادفی و درست تصاویر در دفعات مختلف محال می باشد. به نظر می رسد کم کم روشهای مبتنی بر متن جای خود را به روشهای مبتنی بر تصویر بدهند.

https://telegram.me/programminglanguage
جهت ارائه پیشنهادات خود به
@mjfotovat
پیام بدهید.
نام کتاب: مقاله پردازش تصویر اثرانگشت در فناوری بیومتریک
نویسنده: زهرا عبدالله پور
تعداد صفحات:35
فرمت کتاب: PDF
زبان کتاب: فارسی

https://telegram.me/programminglanguage
چهارچوب یا زبان برنامه نویسی؟
در دهه 1980، چالش اصلی در یادگیری برنامه‌نویسی در ارتباط با انتخاب بهترین زبان برنامه‌نویسی ممکن همچون سی، پاسکال، لیسپ یا فرترن بود. برنامه‌نویسان زمان زیادی صرف می‌کردند تا توضیح دهند دقیقاً چرا راه ویژه و انتخابی آن‌ها در به‌کارگیری if-then-else متناسب با درخواست رییس‌ آن‌ها است. امروزه این مبارزه شکل دیگری به خود گرفته و در ارتباط با ترکیب نحوی و ساختاری است که به‌مراتب بزرگ‌تر از گذشته شده است. به‌‌ دلیل این‌که جهان در حال حرکت به سوی یک هم‌گرایی در ارتباط با عرضه چند استاندارد ساده قرار دارد. امروزه تفاوت بین سمیکالن‌ها، براکت‌‌ها و این موارد جزیی در زبان‌های سی، جاوا و جاوااسکریپت محسوس نیست.
ما هنوز هم بحث‌های جالبی در ارتباط با استفاده از آن‌ها یا این‌که آیا باید یک براکت بسته شود یا خیر وجود دارد. اما به‌دلیل وجود خودکارسازی مشکلاتی این چنینی به‌طور خودکار برطرف می‌شوند. اگر تمایل ندارید از یک نوع داده خاص استفاده کنید، این موضوع فرصت خوبی در اختیار کامپیوتر قرار می‌دهد تا دقیقاً نوع داده‌ای مورد نیاز شما را حدس بزند. امروزه فعالیت‌های جالبی در ارتباط با چهارچوب‌ها در جریان است. اگر از استادی در دانشگاه جان هاپکینز در ارتباط با تدریس یک درس جدید بپرسید، چهارچوب‌ها از تسلط مطلق برخوردار هستند. آیا Angular نسبت به Enber بهتر است یا Node.Js از هر دو آن‌ها بهتر است؟ در گذشته مباحث مربوط به معماری و کشف معماری‌‌های قدرتمند برای مهم‌ترین بسته‌های نرم‌افزاری که زیربنای اینترنت را تشکیل می‌دادند، در جریان بود. مباحثی این چنینی در گذشته بازار گرمی داشتند. ماحصل این مباحث و وجود کلاس‌های مختلف زمینه‌ساز به وجود آمدن قدرتمندترین بسته‌های نرم‌افزاری شد که امروزه اینترنت بر مبنای آن کار می‌کند. در عصر حاضر چهارچوب‌ها، زبان‌های برنامه‌نویسی جدیدی هستند. آن‌ها مکانی هستند که می‌توانید، جدیدترین ایده‌ها، فلسفه‌ها و کدنویسی‌های مدرن را در آن‌ها مشاهده کنید. هرچند بعضی از آن‌ها چندان مورد توجه نیستند، اما تعداد دیگری در حال تبدیل شدن به اجزای اساسی برنامه‌نویسی هستند. چهارچوب‌ها این روزها بازار بسیار داغ‌تری نسبت به‌ ‌زبان‌های برنامه‌نویسی دارند.

https://telegram.me/programminglanguage
مهم‌ترین قابلیت‌های SQL Server 2016

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

قابلیت Stretch Database
در کنفرانس Ignite، مایکروسافت درباره مزایای بزرگ کلاود با سناریوهای هیربدی جدیدی که شامل بانک‌های اطلاعاتی کششی است به بیان دیدگاه‌های خود پرداخت. آن‌چنان‌که هسته جداول تراکنشی، به لحاظ اندازه در حال بزرگ شدن است، ممکن است نیازمند آرشیو کردن داده‌ها بر مبنای تاریخ برای کاهش هزینه و افزایش کارایی باشید. این فناوری جالب به شما اجازه می‌دهد، به طور پویا تراکنش‌های داده‌ای را به Microsoft Azure وارد کنید. در نتیجه عملیات مورد نیاز روی داده‌های همیشه در دسترس و قابل استفاده بوده و مهم نیست چه اندازه‌ای داشته باشند. این فناوری به شما اجازه می‌دهد با کمترین هزینه از Azure استفاده کنید. همچنین از ترکیب Always Encrypted و Stretch Database برای بسط دادن داده‌های خود در یک شیوه امن‌تر و با آرامش خیال خاطر می‌توانید استفاده کنید.

قابلیت Real-time Operational Analytics & In-Memory OLTP
برای اولین بار SQL Server در زمینه فناوری‌های در حافظه پیشرو خواهد بود، به طوری‌که مصرف‌کنندگان از مزیت‌های ترکیب بلادرنگ تجزیه و تحلیل‌های قابل استفاده با سرعت بخشیدن به عملکرد تراکنش‌ها که برای اولین بار توسط مایکروسافت عرضه شده است، بهره خواهند برد. In-Memory OLTP به مصرف‌کنندگان اجازه می‌دهد که نزدیک به 30 برابر سریع‌تر از سیستم‌هایی که بر پایه دیسک کار می‌کنند، باشند. یک بانک‌اطلاعاتی که از حافظه اصلی سیستم به جای هارددیسک برای ذخیره‌سازی داده‌ها استفاده می‌کند، از سرعت بیشتری برخوردار است. بانک‌های اطلاعاتی In-Memory یا به‌اختصار IMDB به طور متناوب در محیط‌هایی با حجم بالا که زمان پاسخ‌گویی در آن‌ها مهم است مورد استفاده قرار می‌گیرند. در این بانک‌های‌اطلاعاتی به دلیل به‌کارگیری حافظه سیستم برای ذخیره‌سازی، زمان دسترسی و درخواست‌های بانک‌اطلاعاتی به طرز کاملا قابل محسوسی سریع‌تر هستند. شما اکنون می‌توانید از این فناوری تطبیق یافته برای کارایی تراکنش‌ها روی تعداد قابل توجهی از برنامه‌ها استفاده کرده و همچنین از مزایایی همزمانی افزایشی بهره ببرید. با این پیشرفت‌ها کاربران ویژگی‌های منحصر به فردی همچون ذخیره‌سازی ستون‌ها در حافظه را تجربه خواهند کرد که 100 برابر محاوره‌ها را سریع‌تر کرده، تأخیرهای به وجود آمده در پاسخ‌دهی همزمان را کاهش داده و امکان تجزیه و تحلیل‌های بلادرنگ را فراهم می‌کند.
قابلیت Built-in Advanced Analytics, PolyBase and Mobile BI
برای درک دقیق‌تر داده‌ها، SQL Server 2016 محدوده پردازش تراکنش‌ها، انبار داده‌ها و اطلاعات تجارت‌ها برای تجزیه و تحلیل‌های پیشرفته را از طریق فناوری عرض شده توسط Revolution Analytics توسعه داده است. (مایکروسافت 23 ژانویه سال جاری میلادی اعلام کرد، Revolution Analytics را خریداری کرده است. شرکتی که محصولات و سرویس‌هایی پیرامون زبان برنامه‌نویسی R عرضه می‌کند که یکی از ارکان اصلی توسعه تجزیه و تحلیل‌ داده‌های حجیم است.) در نتیجه نه تنها تجزیه و تحلیل‌های پیشرفته بیشتر از گذشته در دسترس خواهند بود، بلکه افزایش کارایی در زمان تجزیه و تحلیل‌ داده‌ها و قابلیت تحلیل پیشرفته در SQL Server با به کارگیری مستقیم الگوریتم‌های پردازش تحلیلی R که روی SQL Server اجرا می‌شوند به همراه خواهد آمد. همچنین، Microsoft Azure Marketplace به شما این توانایی را می‌دهد تا بهره‌وری و کارایی کتابخانه تجزیه و تحلیلی خود را افزایش دهید. علاوه بر این، PolyBase نیز به SQL Server وارد شد تا قدرت استخراج و مدیریت روی داده‌های بدون ساختار و دارای ساختار را با استفاده از مهارت‌هایی که کاربران در T-SQL دارند افزایش دهد. با این موج جدید، فهم سریعتری از مجازی‌سازی قدرتمند روی بیشتر دستگاه‌ها که شامل برنامه‌های همراه روی ویندوز، iOS و آندروید هستند را به دست خواهید آورد. Mobile BI بینش دقیق‌تر تجاری را برای داده‌های پیش‌فرض از طریق مجازی‌سازی قدرتمند روی دستگاه‌های موبایل که مجهز به ویندوز، آندروید و iOS هستند و برنامه‌های محلی خاص خود را دارند، فراهم می‌کند. Enhanced Reporting Services نیز گزارش‌های مدرنی را با مجازی‌سازی قدرتمند فراهم می‌کند.

https://telegram.me/programminglanguage
Forwarded from اوراکل و هوش تجاری
معماری RAC
@OracleBI