اشتراک‌ها
10 راهکار برای استفاده Bluetooth در Xamarin

10 راهکار برای استفاده Bluetooth در  Xamarin 

Currently, I am helping my client to develop an SDK to communicate with Bluetooth le device. I developed three SDKs: one is Xamarin, iOS native with Objective-c and Java SDK for Android. Here are some tips I found when I was developing these SDKs. I hope these will save the time for firmware and mobile developers. 

10 راهکار برای استفاده Bluetooth در  Xamarin
اشتراک‌ها
سربارگزاری توابع در TypeScript

TypeScript has some "interesting" limitations when it comes to overloading functions. But it also offers you some options when you need more flexibility in declaring functions, including both optional parameters and infinite parameter lists.

 

سربارگزاری توابع در TypeScript
مطالب
تگ گذاری در کامنت‌ها
در محیط‌های برنامه نویسی مدرن و امروزی، استفاده از تگ‌ها در کامنت‌ها (CommentTag) رواج بسیاری دارد که یکی از معروفترین این تگ‌ها، تگ TODO است. این نوع تگ‌ها که عموما به همراه یک توضیح کوتاه یا عنوان به کار می‌روند، برای این است که بتوانیم از طریق ابزارهایی که ادیتورها در اختیارمان قرار می‌دهند، آن‌ها را پیدا کنیم. حتی در سیستم‌های لینوکسی میتوان با دستور Grep به جست و جوی آن‌ها پرداخت. عموما تگ‌ها با حروف بزرگ نوشته می‌شوند؛ ولی اجباری در آن نیست ولی رعایت آن بهتر است. نام‌های دیگری که برای این تگ‌ها به کار می‌رود Token و Codetag می‌باشد. از معروفترین تگ ها، می‌توان به تگ‌های زیر اشاره کرد:

TODO : معروفترین تگ شناخته شده‌است و میتوان گفت در اکثر اوقات به جای بقیه هم استفاده می‌شود. چون معنای دیگر کامنت‌ها را نیز در بر می‌گیرد. این نوع کامنت به شما می‌گویند که این کد نیاز دارد در یک زمان معین و سر فرصت به آن رسیدگی شود. به عنوان مثال بهتر است ویژگی خاصی را به کدی اضافه کرد، یا مورد خاصی بهتر است در آن پیاده سازی شود و یا نیاز به ویرایش خاصی دارد که پیاده سازی آن منفعتی دارد و این کامنت برای این است که به برنامه نویس یادآوری کند تا در دفعات آتی به این کد رسیدگی کند. سپس در دفعات آتی برنامه نویس میتواند با استفاده از ابزاری که ادیتور در اختیار وی قرار میدهد، این نوع کامنت‌ها را پیدا کند.

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

UNDONE : این تگ برای اصلاح یا تغییر نیست. ولی به شما میگوید که قبلا این کد چگونه بوده است و چه تغییراتی کرده است.  قبلا چه چیزهایی در کد پیاده سازی شده بوده است که الان در کد وجود ندارد و چرا حذف شده است.

HACK : گاهی اوقات در کدها، باگ هایی رخ میدهند که مجبور به استفاده از راه‌های غیرعادی برای رفع آن می‌شوید. این نوع روش‌های رفع مشکل، روش‌ها و راه حل‌های مناسبی نیستند؛ ولی می‌توانند به طور موقت و در زمان سریعتری پاسخگوی ما باشند. برنامه نویس بعد از رفع مشکل، با درج این نوع کامنت، در آینده به خود یادآوری میکند که این کد نیاز به راه حل مناسب‌تری دارد.
 
BUGBUG : این کامنت توسط برنامه نویس کد مربوطه درج می‌شود و مربوط به زمانی است که برنامه نویس کد را نوشته است، ولی اطمینانی از صحت آن ندارد. پس برنامه نویس نیاز دارد اطلاعات بیشتری را در مورد این مسئله بیابد.
    // BUGBUG: I'm sure these GUIDs are defined somewhere but I'm not sure which library contains them, so defining them here.
    DEFINE_GUID(IID_IFoo, 0x12345678,0x1234,0x1234,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12);

XXX :  به برنامه نویس هشدار می‌دهد که این کد راه حل‌های نادرستی دارد و احتمالا بر اساس اطلاعات نادرستی این کد شکل گرفته است، ولی در حال حاضر کار میکند.

در ویژوال استادیو، پنل taskList برای نمایش این تگ‌ها به کار می‌رود و از تگ‌های HACK,UNDONE و TODO به طور پیش فرض پشتیبانی می‌کند. در صورتی که تمایل دارید تگ‌های اضافه‌تری داشته باشید یا ترتیب اولویت نمایش تگ‌ها در پنل taskList را تغییر دهید، مسیر زیر را طی کنید:
Tools>Options>Environment>Task List

در اندروید استادیو هم دو تگ اول لیست پشتیبانی می‌شوند. در اندروید استادیو شما می‌توانید برای todo هایتان الگو و فیلتر تعریف کنید. برای اینکار ابتدای ادیتور را باز کرده و در بخش Editor گزینه Todo را انتخاب کنید. در لیست بالا می‌توانید یک نمونه الگو برای todo خاص خود اضافه کنید. به عنوان مثال تگ‌های نامبرده در بالا را اضافه کنید و برای آن آیکن و نحوه رنگبندی و قلم و ... را برای نمایش آن انتخاب کنید.


در لیست پایینی که بخش فیلترهاست، میتوانید یک فیلتر را تعریف کنید تا بر اساس این فیلتر مشخص کنید که چه todo هایی نمایش یابند. برای فیلتر کردن در در پنل todo، در نوار ابزار، آیکن قیفی شکل را کلیک کند تا لیست فیلترها نمایش یابند.

نحوه صحیح قرار دادن یک todo به شکل زیر است:

// TODO:2008-12-06:johnc:Add support for negative offsets.
// While it is unlikely that we get a negative offset, it can
// occur if the garbage collector runs out of space.
بعد از ذکر نام تگ، تاریخ را بر اساس سال، ماه و روز وارد کرده و سپس نام شخصی که این کامنت را قرار داده است و در ادامه عنوان مناسبی را که گویای مطلب باشد، انتخاب کنید. در خط‌های بعدی هم توضیح کوتاهی که مدنظر شماست. در این حالت با استفاده از ابزار unix grep میتوانید گزارش گیری مناسبی هم داشته باشید.
اشتراک‌ها
Visual Studio 2017 Version 15.3 منتشر شد

Today we have several releases to talk about: there’s the release of Visual Studio 2017 version 15.3, the release of .NET Core 2.0, and a release of Visual Studio for Mac version 7.1. We’ll talk about them briefly in that order, but as always, there’s a lot more information in the release notes for each product. If you’d like to jump right in, download Visual Studio 2017 version 15.3download .NET Core 2.0, and download Visual Studio for Mac.

 
Visual Studio 2017 Version 15.3 منتشر شد
مطالب
نمایش خروجی RSS سایت‌های دیگر به کمک jQuery
شاید خیلی از دوستان (مثل گذشته نه چندان دور خودم ) خیلی بیش از اندازه به برنامه نویسی‌های سمت سرور اهمیت  می دهند که این کار باعث از دست دادن ، سرعت و سادگی برنامه نویسی  سمت کلاینت می‌شود.
معمولا ما برای کار با خروجی‌های XML از کد‌های سمت سرور استفاده می‌کنیم ، بدون اینکه از قدرت جی کوئری در این زمینه  اطلاعی داشته باشیم. البته در این مقاله خیلی به پردازش XML  توسط جی کوئری نمی‌پردازیم و کار اصلی را گوگل برای ما انجام می‌دهد.
برای انجام این کار ما ابتدا توسط یکی از کتابخانه‌های گوگل ، خروجی RSS یک وب سایت رامی خوانیم و بعد به کمک jQuery  آن‌ها را نمایش می‌دهیم.
    <script src="jquery-1.8.0.min.js" type="text/javascript"></script>
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript">

        google.load("feeds", "1");

        function initializeda() {
            var feed = new google.feeds.Feed("http://www.drupaleasy.ir/rss.xml");
            feed.setNumEntries(5);
            feed.setResultFormat(google.feeds.Feed.JSON_FORMAT);
            feed.load(function (result) {
                if (!result.error) {
                    for (var i = 0; i < result.feed.entries.length; i++) {
                        var entry = result.feed.entries[i];
                        $('#drupaleasy ul').append('<li><a href="' + entry.link + '">' + entry.title + '</a></li>');
                    }
                }
            });
        }

google.setOnLoadCallback(initializeda);
    </script>
توضیحات کد :
ابتدا نیاز داریم کتابخانه گوگل را به صفحه اضافه کنیم. شما می‌توانید مستندات کامل این کتابخانه در این لینک  بخوانید.
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
در ابتدا معرفی می‌کنیم که به کدام امکان این کتابخانه نیاز داریم ، در این جا ما از ورژن "1" تابع feed  استفاده می‌کنیم.بد نیست برای آشنایی بیشتر سری هم به این لینک  بزنید.
google.load("feeds", "1");
ابتدا لینک مورد نظر که باید خروجی از آن گرفته شود را معرفی می‌کنیم و آن را در متغییری قرار می‌دهیم.
var feed = new google.feeds.Feed("http://www.drupaleasy.ir/rss.xml");
تنظیمات دلخواه خودمان را نظیر تعداد پست واکشی شده و نوع خروجی مشخص می‌کنیم. تجربه (شخصی )نشان داده که بهترین نوع خروجی JSON   است.
feed.setNumEntries(5);
feed.setResultFormat(google.feeds.Feed.JSON_FORMAT);
و بعد هم به کمک jQuery  ساختار مورد نظر خودمان را تنظیم می‌کنیم. شما می‌توانید به کمک مستندات ، و سلیقه شخصی خودتان این کار را انجام بدهید ، و در آخر هم تنظیم می‌کنید ، اجرای تابع شما در چه زمانی اتفاق بیافتید.
            feed.load(function (result) {
                if (!result.error) {
                    for (var i = 0; i < result.feed.entries.length; i++) {
                        var entry = result.feed.entries[i];
                        $('#drupaleasy ul').append('<li><a href="' + entry.link + '">' + entry.title + '</a></li>');
                    }
                }
            });
در این جا من خروجی فید را به صورت یک لیست (ul)  تنظیم کردم ، به این صورت که به ازای هر سطر یک li  همراه با تگ a  تولید کرده ام و به ul  مورد نظر append  کردم. 
فایل HTML :
            <div id="drupaleasy" class="feeds">
            <span>DrupalEasy.ir</span>
                <ul>
                </ul>
                <a href="http://drupaleasy.ir">more</a>
            </div>
همچنین خیلی راحت می‌توانید به کمک CSS  استایل‌های دلخواه خودتون رو اعمال کنید.
        .feeds
        {
            float: right;
            background-color: rgba(234, 242, 243, 0.73);
            margin: 5px;
            border-radius: 20px;
            padding: 8px;
            width: 293px;
            height: 217px;
            border: 1px solid #293883;
        }

        #drupaleasy ul
        {
            list-style-image: url("img/drupal.png");
        }
این هم شد خروجی کار  من 

اشتراک‌ها
بررسی تعاریف نواحی زمانی در 120 سال قبل

A 2016 study found that the economic impact of Daylight Saving , due to increased heart attacks, workplace accidents and cyberloafing (slacking off at work!) cost the US economy $434 million each year, there are a great many others that present similar evidence.

In 2019 the European Union voted to abolish daylight saving in 2021, similarly the “Sunshine Protection Act of 2021” is gaining traction in the US. Over the next decade I feel quite sure that most of the globe will reject daylight saving entirely. 

بررسی تعاریف نواحی زمانی در 120 سال قبل
اشتراک‌ها
سخت افزار Nick Craver از برنامه نویسان ارشد Stack Overflow

Stack Overflow Developer Desktop Build - 2017

One of the things we're big on at Stack Exchange is hardware - we love it. More importantly, we love not waiting on it. With that in mind, we upgrade our developer machines every 2 years. In case it helps anyone else, I'm posting our current parts list here. This isn't set in stone, we review and update it to the latest tech every time we build a machine. We also customize the build for each developer if needed - for example those needing extra space or specific display connections, etc. I'll try and keep this page updated as we make changes

 

سخت افزار Nick Craver از برنامه نویسان ارشد  Stack Overflow
اشتراک‌ها
مصاحبه ای خواندنی با یکی از بنیانگذاران شرکت Telerik
نکات مهم از داخل متن:
Telerik introduced the Telerik Platform
In the European Union alone, income from the development of mobile applications is estimated at 17.5 billion euros for 2013, according to a report published by the European Commission
Three weeks after releasing the first version[Telerik Platform], it achieved over 61 thousand registrations. Eight thousand people joined the online presentation of the platform 
و در نهایت پارگراف آخر
مصاحبه ای خواندنی با یکی از بنیانگذاران شرکت Telerik
اشتراک‌ها
تامین هویت مرکزی به کمک keycloak در برنامه‌های Web API
.NET Web API with Keycloak

In this article, we will explore the advantages of using Keycloak, an open-source identity and access management solution. With Keycloak, you can easily add authentication and authorization to your applications, benefiting from the robustness of a proven system instead of building your own. This allows you to avoid the complexities and security challenges of managing application access control on your own.
تامین هویت مرکزی به کمک keycloak در برنامه‌های Web API