googlebd2d08236268006b

شاخص برابری قدرت خرید چیست؟

شاخص برابری قدرت خرید (ppp) چیست؟
برای مقایسه بهتر اقتصادهای جهان از شاخص برابری قدرت خرید استفاده می شود.

برای اینکه بتوان عملکرد اقتصاد کشورها را سنجید و آن را با دیگر کشورها مقایسه کرد باید از یک شاخص اقتصادی بهره برد. شاخص “تولید ناخالص داخلی” (GDP) اکنون پرکاربرد ترین شاخص برای اندازه گیری حجم اقتصاد است که نشان می دهد کل ارزش فعالیت های اقتصادی بخش خصوصی و دولتی طی یک دوره زمانی مشخص برای مثال یک سال چقدر بوده است.

اگر شما حجم اقتصاد ایران را بر اساس ریال و حجم اقتصاد آمریکا را بر اساس دلار محاسبه کنید، آنگاه برای مقایسه اقتصاد این دو کشور باید واحد اندازه اقتصادها را به واحدی یکسان تبدیل کنید، ساده ترین راه حل این است که با توجه به ارزش ریال نسبت به دلار، ارزش یکی را به دیگری تبدیل کنید. مثلا اگر هر دلار معادل 3200 تومان باشد، اندازه اقتصاد ایران بر اساس تومان را بر 3200 تقسیم کنید تا ارزش دلاری آن را بسنجید. اما چنین راهکاری می تواند گمراه کننده باشد چرا که قدرت خرید معادل ریالی 10 دلار در داخل ایران با قدرت خرید همان 10 دلار در آمریکا برابر نیست.

برای مثال اگر اقتصاد چین و آمریکا را در نظر بگیرید، با 1.66 دلار می توان در چین یک قرص نان خرید اما همان نان در آمریکا 2.39 دلار قیمت دارد. در واقع اگر فقط نان را در نظر بگیریم، قدرت خرید فردی که در چین 16 دلار در ماه درآمد دارد معادل قدرت خرید فردی است که 23 دلار در ماه درآمد دارد. به همین خاطر است که در نظر گرفتن میزان درآمد بدون توجه به برابری قدرت خرید می تواند گمراه کننده باشد و باعث بروز خطا در مقایسه عملکرد اقتصادها بشود. به همین خاطر اقتصاددانان برای اینکه بتوانند همه اقتصادها را بر اساس واحد یکسانی بسنجند، علاوه بر اینکه ارزش همه آن ها را به دلار تبدیل می کنند، بر اساس قدرت خرید مختلف دلار در کشورهای مختلف، میزان درآمد کشورها را نیز تعدیل می کنند و از آن به عنوان “برابری قدرت خرید” (Purchasing Power Parity). برای مثال اندازه اقتصاد ایران در سال 2013 طبق برآورد صندوق بین المللی پول معادل 366 میلیارد دلار بوده است اما اگر برابری قدرت خرید در نظر گرفته شود آنگاه اندازه اقتصاد ایران در همان سال به 945 میلیارد دلار می رسد. در واقع می توان گفت که قدرت خرید یک دلار در ایران کمی بیش از دو برابر قدرت خرید آن در آمریکا است.

Share Button

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

Persian-Jalali Calendar with Iran Holidays

سلام

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

توی این سایت میتونین ساعت و تقویم رسمی ایران را ببینین که شامل تقویم هجری شمسی یا جلالی، هجری قمری و میلادی میشه. همچنین همه ی مناسبت هایی که توی ایران یاهاش سرو کار داریم در اون وجود داره.

ParsiTime.com

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

یک تفاوت دیگه اینه که ساعتی که توی این سایت و نرم افزار وجود داره برخلاف اکثر ساعت هایی که توی سایت های دیگه هست، به هیچ وجه عقب نمیمونه. اونایی که برنامه نویسن میتونن به گذاشتن یه debugger توی کنسول مرورگر این مساله را توی سایت های مختلف تست کنن.

این سایت را توی اوقات فراقت نوشتم و در واقع یک hobby-project واسه من بوده. البته اگه استقبال بشه قصد دارم برای تمامی پلتفرم ها این نرم افزار را تهیه کنم. به این صورت که با هر موبایلی یا مرورگر یا سیستم عاملی که هستید بتونین از این نرم افزار استفاده کنین. البته کار سختیه که همه چیز را پوشش داد ولی بر اساس درخواست هایی که توی chrome web store گذاشته میشه، اولویت بندی میکنم و سعی میکنم که انجام بدم. برای دانلود افزونه ی کروم، اگه تو ایران هستین حتما از فیلترشکن استفاده کنین.

لطفا اگه خوشتون اومد یا پیشنهادی داشتین توی همین پست و برای chrome extension (اینجا) کامنت بزارین.

اما آدرس سایت اینجاست: www.ParsiTime.com

!!! برای دانلود افزونه (plugin) برای مرورگر کروم در ایران حتما از فیلتر شکن استفاده کنید.

ParsiTime Plugin Image

 

Share Button

Invoke MsDeploy and MsBuild on Powershell

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

مایکروسافت برای بیلد و انتشار نرم افزار، ابزارهای جداگانه ای داره که سعی کرده توی tfs و در قسمت ساخت بیلد های اتوماتیک، اونارو یکجا مورد استفاده قرار بده. اما هنوز کمبودهایی داره و توی پروژه های جامع سازمانی پاسخگوی تمام نیاز ها نیست یا به دردسرش نمی ارزه که ازش استفاده کنین.

بعضی مواقع ترجیح بر اینه که از دستورات خط فرمان ویندوز استفاده کنیم. که میتونیم از  command-prompt یا powershell استفاده کنیم. از اونجایی که powershell بسیار پیشرفته تر از command-prompt هست، ترجیح بر استفاده از powershell یا دستورات cmdlet هست.
دستوراتی مثل start یا stop یا install و uninstall کردن یک ویندوز سرویس، کپی کردن فایل و کارهای را میشه از طریق powershell انجام داد.

وقتی powershell را انتخاب میکنیم، دیگه کار جالبی نیست که یک سری کارها را با powershell و یک سری دیگه را با cmd انجام بدیم و اصلا منطقی هم نیست.
MsBuild وMsDeploy دو تا از ابزارهایی هستن که توی Automatic-Deployment زیاد ازش استفاده میشه. به طور پیش فرض، این برنامه ها از طریق command-prompt اجرا میشن. با یک جستجوی ساده توی اینترنت میشه راهی پیدا کرد که این برنامه ها را از طریق powershell اجرا کرد.

برای راحت تر کردن این کار میتونیم از Moduleهای powershell استفاده کنیم.
یک ماژول برای اجرای MsBuild توی این آدرس پیدا کردم.  https://invokemsbuild.codeplex.com/
اما برای MsDeploy ماژولی پیدا نشد که خودم دست به کار شدم یکی نوشتم که از این آدرس میتونین دریافت کنین. https://github.com/omids20m/Invoke-MsDeploy-PowerShell-Module

امیدوارم این مطلب مورد توجه شما دوستان قرار گرفته باشه 🙂

Share Button

آیا تمرکز زیاد برای مدیران مضر است؟

تمرکز کردن به خودی خود در هر کاری بسیار خوب است. سال‌های سال است که به مدیران توصیه شده تمرکز خود را بر مسائل مشخصی مانند طراحی استراتژی‌هایی برای تولید بهتر و کم‌هزینه‌تر محصول، از بین بردن موانع خط تولید، …

بیشتر

Share Button

دهم آذر روز تولد من و روز برنامه نویس در ایران

از ویکی‌پدیا، دانشنامهٔ آزاد

روز ۲۵۶ام هر سال (معادل عدد ۱۰۰ در مبنای شانزده) مطابق با ۱۳ سپتامبر (۱۲ سپتامبر در سال‌های کبیسه) به عنوان روز برنامه‌نویسان نام گرفته‌است. روسیه اولین کشوری بود که این روز را به عنوان روز برنامه‌نویس به رسمیت شناخت و پس از آن کشورهای آلمان، کانادا، چین، کرواسی، فرانسه، گوآتمالا، هند، بلژیک، استرالیا، نیوزلند، لهستان، اسلوونی، بریتانیا و ایالات متحده آمریکا نیز این روز را به عنوان روز برنامه‌نویس به رسمیت شناختند.

از جمله دلایل انتخاب عدد ۲۵۶ به عنوان روز برنامه نویس می‌توان به موارد زیر اشاره کرد:

  • عدد ۲۵۶ بزرگترین توان عدد ۲ کوچکتر از ۳۶۵ که تعداد روزهای یک سال است، می‌باشد.
  • در سیستم دودویی کامپیوتری تعداد اعدادی که می‌توان در یک بایت جا داد ۲۵۶ تا می‌باشد.
  • عدد ۲۵۶ به صورت کلی برای برنامه‌نویس‌ها عددی آشناست.

 

نکته ی جالب اینکه توی ایران روز 256 ام سال شمسی میشه 10 آذر که مصادف با تولد من هست 🙂

پس روز برنامه نویس را به همه ی برنامه نویسان  و همچنین روز تولد خودم را به خودم تبریک میگم 😉

 

سایت programmerday.ir هم کار جالبی کرده و یک نظرسنجی برای حمایت از این روز گزاشته. من که امضا کردم شما هم اگه موافقین امضا کنین.

Share Button

تنظیمات راه اندازی اس اس ال روی یک نرم افزار- پورت

How to Configure a Port with an SSL Certificate

  1. Add Certificate to Trusted Root and Personal (and install certificate by double-click on it)
  2. Obtain the SHA-1 Hash of a Trusted Root CA Certificate read here or here
  3. In .Net Projects retrive applicaion GUID from Assembly.cs
  4. Add SSL Certificate by folowing command (Windows 2012)
    netsh http add sslcert ipport=0.0.0.0:8020 certhash=aa00b0000bb0c00cc00000dd00e0000e0ff00g00 appid={0c0e0ec0-0000-0000-0000-a0cf0000d0af}
  5. NOTE: DO NOT Copy Paste Certificate Hash because it may contain un-visible characters. Just type it.

Read more about How to: Configure a Port with an SSL Certificate

Share Button

Bundling AngularJs Html Pages With Aps.Net

Bundling AngularJs Html Pages With Aps.Net

یه مطلب خوب درباره Bundle کردن فایل های html در AngularJs پیدا کردم که براتون گزاشتم. البته این مطلب یه مقدار قدیمیه و یه کم مشکل داره ولی برای ایده گرفتن بسیار عالیه. در آینده اگه خواستین بگین که کدی که خودم نوشتم را هم بزارم براتون.
bundle_image_6Bundling and minification are two well-known techniques used to improve the load time of your website. These are especially important for sites that use extensively JavaScript to offer better user experience. There are plenty of tools to help you do bundling and minification of JavaScript and CSS files. If you are a .NET developer you are probably very used to live inside Visual Studio and expect it to offer you everything you might think of. In ASP.NET 4.5 you can use a bundling API to define how your files will be grouped and sent to the client. The following example demonstrates the usage of this API.
public static void Register(BundleCollection bundles)
{
 bundles.Add(new ScriptBundle("~/bundles/jquery")
  .Include("~/Scripts/jquery-{version}.js"));
 bundles.Add(new StyleBundle("~/bundles/css")
  .Include("~/css/*.css"));
}

Then in your page (either an ASP.NET page or a MVC view) you would invoke the rendering of these bundles by calling Scripts.Render(“~/bundles/jquery”) and Styles.Render(“~/bundles/css”).

When using AngularJS for building a rich client-side applications you would typically end up with a lot of HTML pages too. These HTML pages are actually the views in the MV* pattern that AngularJS implements. If you use a routing mechanism to simulate multiple pages in AngularJS, then for every page a new request to the server will be issues to download the HTML page for the corresponding page. For your production environment, however, you may wish to predownload all HTML pages so that no further requests are made to the server. One options is to rely on tools like Grunt, which provides a rich set of options. However, in this post I want to show you a very easy way to achieve the same using the bundling API of ASP.NET.

First we have to understand how AngularJS processes the HTML pages. When AngularJS needs to render a view (e.g., when loading a route or when visualizing a directive), it checks a local cache, called template cache. This is an abstraction over a simple key-value store that runs locally. If the template is not in this template cache, then AngularJS issues a request to the server in order to download it and then it puts into the cache. Next time the same view is requested, it can be rendered immediately. So what we can do in this scenario is that we can prepopulate this template cache will all the HTML pages we have. Thus, every time AngularJS needs to render a view, it will have a cache hit.

The next question is how to implement this logic using the bundle API. With the help of a .NET reflector one can look into the code of the existing JavaScript and CSS minification mechanisms and see how they work. The interface IBundleTransform provides a method that can manipulate all the files in a bundle and decide how to render them. Thus, we can collect all HTML pages that are included in the bundle and render them as a JavaScript file. We can attach a method to the run block of our AngularJS application module and make use of the $templateCache service to manipulate the template cache. Here is an excerpt of our AngularJsHtmlCombine transform implementation.

var sb = new StringBuilder();
sb.Append("(function(){");
sb.AppendFormat("angular.module('{0}'), appName);
sb.Append("a.run(['$templateCache',function(t){");
 
foreach (BundleFile file in response.Files)
{
 string fileId =
  VirtualPathUtility.ToAbsolute(file.IncludedVirtualPath);
 string filePath =
  HttpContext.Current.Server.MapPath(file.IncludedVirtualPath);
 string fileContent = File.ReadAllText(filePath);
 
 sb.AppendFormat("t.put({0},{1});",
  JsonConvert.SerializeObject(fileId),
  JsonConvert.SerializeObject(fileContent));
}
 
sb.Append("}]);");
sb.Append("})();");

Note that I rely on JSON.NET to convert a .NET string to a JSON string. We can then create a special bundle to apply our transformation.

public class AngularJsHtmlBundle : Bundle
{
 public AngularJsHtmlBundle(string virtualPath)
  : base(virtualPath, null, 
   new[] { (IBundleTransform)new AngularJsHtmlCombine() }) {}
}

How do we use this bundle now? Well, the same way as we use the scripts and the styles bundle.

public static void Register(BundleCollection bundles)
{
 bundles.Add(new ScriptBundle("~/bundles/js")
  .Include("~/Content/app.js"));
 bundles.Add(new AngularJsHtmlBundle("~/bundles/myapp/html")
  .Include("~/Content/*.html"));
}

When we request the bundle via Scripts.Render(“~/bundles/myapp/html”) a JavaScript file will be returned with all HTML pages rendered as strings. If we do not want to enable the bundling process, e.g., the debug attribute is present in the web.config, then nothing will be rendered and AngularJS will still make the usual requests to the server. Voila!

A have to mention a few notes in my implementation.

  • We need a way to pass the name of the application module to our bundle. I have chosen to do this via a predefined URL template, i.e. ~/bundles/{appName}/html.
  • Although I use JSON.NET, even the traditional DataContractJsonSerializer should be capable of the string serialization.
  • Be careful with the HTML file IDs. This implementation will make the file IDs with a leading slash in the URL. However, AngularJS is sensitive about this slash. So if you write the template URL of your directive to be “Content/hello.html”, AngularJS will not find it in the template cache and hence a new request will be made.

You can find the source code along with a demo on GitHub.

Source

بیشتر

Share Button

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

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

Deployment Challenges in Enterprise Scenarios

سلام

یه مدتی هست که درگیر Deployment شدم. گفتم بد نیست توی این زمینه یه ذره بنویسم.

همه ی کسانی که برنامه نویسی میکنند خواه نا خواه درگیر مقوله ی Deployment یا Publish نرم افزار میشن.

وقتی تعداد یا حجم کد پروژه ها از یه حدی بیشتر میشه و یا تعداد جاهایی که باید روی اونا نرم افزار رو نصب کرد زیاد میشن، دیگه با روش های سنتی نمیشه کار Deployment را انجام داد و باید این کار را به کامپیوتر سپرد تا به طور اتوماتیک انجام بشه.

کاری که قرار شد من برای اون Automatic-Deployment را راه اندازی کنم شامل بیش از 20 تا پروژه در زمینه ی راهکارهای جامع مالی کارگزاری بورس بود که شامل یک سری Web-Application و Windows-Service میشد. هدف ما این بود که بتوانیم به صورت زمان بندی شده (مثلا هر روز یکبار) یا با یک کلیک، کل این پروژه ها را در جاهای مختلفی که قبلا تعریف شده منتشر (Publish) کنیم.

شاید بعدا در این رابطه بیشتر بنویسم.اما توی این پست فقط سعی دارم به چالش هایی که در مبحث Enterprise-WebApplication-Deployment باهاش مواجه هستیم، اشاره ای داشته باشم:

  1. پروژه ها باید در محیط های مختلفی که از نظر زیر ساخت سخت افزاری و نرم افزاری و امنیتی با هم متفاوت هستند و هر کدام کانفیگ (پیکربندی) خاص خود را دارند منتشر و نصب شوند. برای مثال: developer or test environments, staging-platforms, and production-servers
  2. باید بتوانیم پروژه های مرتبط به هم را در یک مرحله (مثلا با یک کلیک) یا به صورت اتوماتیک و زمان بندی شده (مثلا هر روز) منتشر کنیم.
  3. باید بتوانیم هر بار که کدی به Source-Control اضافه میشه، کل نرم افزارهای وب و ویندوز-سرویس ها را publish کنیم.
  4. باید بتوانیم در هر لحظه، هر نسخه دلخواه از نرم افزار را روی یکی از سرورها publish کنیم.
  5. باید بتوانیم بدون نیاز به ابزارهای توسعه، مثل Visual Studio، توسط شخصی بدون داشتن دانش مربوط به توسعه نرم افزار و با ساده ترین روش ممکن کار انتشار را انجام دهیم. بهترین روش هم از طریق وب است.
  6. باید بتوانیم بر روند انتشار و تنظیم متغیرهای انتشار، کنترل داشته باشیم.
  7. پایگاه داده ها باید بدون از دست دادن داده های قبلی به طور اتوماتیک Update به روز رسانی شوند.
  8. باید بتوانیم قبل از پابلیش و بعد از آن یک سری Command روی سرورها اجرا کنیم (مثلا Start and Stop Windows-Service) و همچنین بتوانیم برخی از فایل ها را اضافه یا حذف کنیم ( مثلا اضافه کردن فایل app_offline.htm قبل از Publish و حذف آن بعد از Publish).
Share Button

به دنبال تیم پروری باشیم نه قهرمان پروری

Share Button

کد کثیف بدهی فنی نیست !

کد کثیف بدهی فنی نیست !

بدهی چیست ?
بدهی بیانگر تعهد یک شخص حقیقی یا حقوقی (بدهکار) به شخص حقیقی یا حقوقی دیگر (بستانکار) است. بدهی معمولاً به دارایی واگذارشده‌ی بستانکار به بدهکار اشاره دارد، اما می‌تواند به عنوان استعاره برای بیان تعهدات اخلاقی یا سایر تعاملات اقتصادی نیز استفاده شود. بازپرداخت بدهی معمولاً شامل دو بخش `اصل بدهی` و`بهره`ی آن است. [Wikipedia]

بدهی فنی چیست ?
اولین بار Ward Cunningham از واژه بدهی فنی استفاده کرد و آن را بدین صورت تعریف کرد:

بدهی فنی یک سبک-سنگین (trade-off) مهندسی است که توسعه دهندگان نرم افزار و سهامداران کسب و کار برای رسیدن به زمان بندی و انتظارات مشتریان انجام می دهند. به طور خلاصه شما ممکن است به یک طراحی کمتر از حد معمول در یک دوره کوتاه نیازمند باشید، به دلیل اینکه محدودیت زمانی به شما اجازه طراحی مطلوب را نمی دهد.

بیشتر

Share Button