سرشار از زندگی

طبقه بندی موضوعی
پیوندهای روزانه

۱۲ مطلب با موضوع «برنامه نویسی» ثبت شده است

مقدمه

بسته (package) کاربردی igraph در R  (دریافت R) را می توان نوع داده ی محبوبِ ذخیره ی گراف دانست، در این پست سعی می شود برخی جزئیات این نوع داده بررسی شود.

برای استفاده از این بسته، می توانید با دستور زیر آن را نصب کنید:

install.packages("igraph")

پس از نصب، با این دستور، آن را برای استفاده load کنید:

library("igraph")

در ادامه یک گراف تصادفی تولید کرده و با استفاده از آن، مثال های بعدی را توضیح می دهیم.


تولید گراف تصادفی

برای تولید گراف تصادفی راه های زیادی وجود دارد که با توزیع های مختلف این امکان را فراهم می کنند، اما اینجا از یک تابع ساده که در igraph موجود است استفاده می کنیم. در این مثال گرافی با 10 راس و 40 یال تصادفی تولید می شود:

myGraph <- igraph::random.graph.game(10,40,type = "gnm")

نوع gnm اشاره به نوع مورد نیاز برای تولید گراف تصادفی دارد، به طوری که در این نوع پارامتر دوم (40)، تعداد یال مورد نیاز است که اگر از نوع gnp استفاده شود، پارامتر دوم احتمال وجود یال بین هر دو یال خواهد بود:

myGraph <- igraph::random.graph.game(10,0.65,type = "gnp")

برای رسم گراف تولیدی، از تابع plot استفاده کنید:

plot(myGraph)

به دست آوردن جزئیات گراف

حال که متغیری از نوع igraph با نام myGraph داریم؛ برای تولید لیست درجات گره ها (درجه ی هر گره ی موجود در گراف) از این دستور استفاده کرد که مقادیر درجات را در یک متغیر می ریزد:

deg.list <- igraph::degree(myGraph)

برای به دست آوردن میانگین درجات گراف، می توان از تابع mean استفاده کرد:

mean(deg.list)
[1] 5.8

همچنینی برای محاسبه ی واریانس درجات گراف، می توان از تابع var استفاده کرد:

var(deg.list)
[1] 2.622222

برای محاسبه ی میانگین کوتاه ترین مسیر بین راس ها (در کل)، می توان از این کد استفاده کرد:

igraph::average.path.length(myGraph)
[1] 1.355556

در نهایت برای تولید لیست توزیع درجات، می توان از این کد استفاده کرد:

deg.dist <- degree.distribution(myGraph)

توزیع درجات را رسم می کنیم:

plot(deg.dist)


امیدوارم به درتون بخوره  :)

۱ نظر موافقین ۱ مخالفین ۰ ۰۸ ارديبهشت ۹۶ ، ۱۰:۰۵
مجید رحیمی

 احساسی فکر می‌کند 
 شما برنامه‌نویس بدی خواهید بود اگر دنیای بیت و بایت‌های برنامه خود را به قلم احساساتتان رنگ بزنید. غالباً می‌توانید نشانه‌های یک برنامه‌نویس بد را با شنیدن جملاتی مثل این جملات تشخیص دهید:
   - خیلی ناراحتم که برنامه‌ام کار نمی‌کند، خیلی باهاش ور رفتم، اما هنوز کار نمی‌کند. 
   - احساس می‌کنم این کد درست است، اما هنوز مطمئن نیستم چرا کار نمی‌کند. 
   - من هر روز به برنامه‌ام توجه می‌کنم و سعی می‌کنم باهاش دوست باشم، اما اون هنوز منو دوست نداره، هر موقع که می‌خوام بچسبم بهش یک اشکال اساسی بهم می‌ده. 


اول از همه به کامپایلر یا مفسر مشکوک می‌شود
یک برنامه‌نویس بد می‌گوید: «کد من درست است، شاید بهینه‌سازی کامپایلر یا مفسر باعث این مشکل شده باشد. باید به تنظیمات کامپایلر نگاهی بیندازیم.»

اول دست به‌کار می‌شود، بعد فکر می‌کند 
یک برنامه‌نویس بد، پس از برخورد با مشکل، سریع به راه حل فکر می‌کند. از نظر وی اشکال‌زدایی کار بیخودی است. یک برنامه‌نویس بد به معنای واقعی کلمه، بدون آن‌که ابتدا مشکل را بشناسد، را‌ه‌حلی ارائه می‌کند.
 با این کار، یک برنامه‌نویس بد جایزه پرافتخار «سریع‌ترین زمان رفع خطا» را از آن خود می‌کند. همچنین وی در آینده نه چندان دور، جایزه کم افتخار «سریع‌ترین زمان برای لاپوشانی خطایی که هنوز رفع نشده» را نیز از آن خود خواهد کرد.

۲ نظر موافقین ۱ مخالفین ۰ ۱۲ خرداد ۹۴ ، ۱۰:۲۲
مجید رحیمی



این نرم افزار یک محیط خوب و راحت برای زبان برنامه نویسی R ارائه می دهد.

  Download latest version of RStudio IDE


 Download latest version of R 

۳ نظر موافقین ۱ مخالفین ۰ ۱۴ مهر ۹۳ ، ۰۶:۵۵
مجید رحیمی

See english version here

بسته ی SignalR راهکاری مناسب برای پیاده سازی انتشار غیر همزمان در #C به حساب می یاد. حتما دیدید بعضی سایت ها بدون چک کردن منظم در پس زمینه (polling) هرگونه تغییر رو به صورت آنی نشون میدن!

اگر شما هم دوست دارید از این امکان زیبا بهره ببرید می تونید از SignalR استفاده کنید!

خب برای شروع باید این بسته رو به پروژه تون اضافه کنید؛ برای این کار اگر از 4.5 NET. استفاده می کنید، می تونید با Nuget دریافتش کنید (SignalR 2).

اما اگر از 4 NET. استفاده می کنید باید در بخش Package Manager Console، دستور زیر رو وارد کنید(SignalR 1.1.3):

Install-Package Microsoft.AspNet.SignalR -Version 1.1.3
بعد از نصب، پوشه ی Scripts توی پروژه تون ایجاد میشه که توش چند تا فایل هست!
حالا باید فایل Global.asax رو به پروژه تون اضافه کنید تا در شروع کار برنامه، SignalR فراخونی بشه!


۲ نظر موافقین ۱ مخالفین ۰ ۰۸ مرداد ۹۳ ، ۱۶:۱۶
مجید رحیمی

حالا رسیدیم به بخش جالبش! بخش اول را اینجا و بخش دوم را اینجا ببینید.

حالا برای دسترسی به داده های پایگاه داده در #C، باید به پایگاه داده متصل بشیم، که باید از همون اسمی که گفتم دلخواهه استفاده کنیم!

اضافه کردن یک سطر به جدول:

using (var context = new MyDBEntities())
{
User me = new User()
{
Username="majid",
Password="xyz"
};
context.User.AddObject(me);
context.SaveChanges();
}

این کد me را که از نوع  User است، به جدول User اضافه می کنه.

نکتش اینجاست که نیازی نیست مقدار Id رو تعیین کنید! این مقدار به طور خودکار و به صورت افزایشی تعیین میشه! (طبق بخش اول).

همچنین بعد از هر کاری که روی جدول تغییر ایجاد می کنه، برای ذخیره ی تغییرات باید از متد SaveChanges استفاده کنید!

۵ نظر موافقین ۰ مخالفین ۰ ۰۸ فروردين ۹۳ ، ۱۳:۱۳
مجید رحیمی

بخش اول رو اینجا ببینید

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

برای ایجاد فایل نگاشت (EDMX) یک فایل جدید مثل شکل پایین به پروژه تون اضافه کنید:

۰ نظر موافقین ۱ مخالفین ۰ ۰۸ فروردين ۹۳ ، ۰۹:۵۵
مجید رحیمی

این فایل رو از اینترنت پیدا کردم. به زبان فارسیه و نحوه ی نوشتن تحلیلگر برای flex رو توضیح داده!

دریافت

۲ نظر موافقین ۲ مخالفین ۰ ۲۵ اسفند ۹۲ ، ۲۱:۵۱
مجید رحیمی

نرم افزار flex برای ایجاد تحلیلگر از فایل نوشته شده به زبان flex استفاده می شود. در این فرایند، شما ابتدا فایل نوشته شده با زبان flex را به این نرم افزار می دهید و در خروجی یک فایل به زبان c ) c.*) تولید می کند که با کامپایل آن، scanner شما آماده استفاده خواهد بود!

حال به نحوه ی انجام این فرایند  با یک مثال می پردازم:

ایجاد تحلیلگر با flex

  • ابتدا فایل اجرایی flex را از اینجا دریافت کنید (200KB) و از حالت فشرده خارج کنید.
  • فایل با پسوند l  را در محلی که flex را از حالت فشرده خارج کردید (مثلا درایو F)، داخل پوشه ی زیر  قرار دهید.  (برای نوشتن فایل l ، این پست را ببینید)
F:\flex-2.5.4a-1-bin\bin
  • command ویندوز را باز کرده و با استفاده از دستور زیر به دایرکتوری مورد نظر بروید:
cd /d F:\flex-2.5.4a-1-bin\bin
  • حال با استفاده از دستور زیر فایل majidr.l را به flex بدهید:
flex majidr.l
  •  حالا اگه مشکلی نباشد، فایلی با نام lex.yy.c در همان محل تولید می شود. 

کامپایل کردن فایل تولید شده

  • برای کامپایل این کد، هر نسخه ای از Visual Studio را که دارید، باز کنید و از منوی Tools، گزینه ی Visual Studio Command Prompt را بزنید تا پنجره ی command باز شود. حال دستور زیر را وارد کنید تا به دایرکتوری مورد نظر بروید:
cd /d F:\flex-2.5.4a-1-bin\bin 
  • برای کامپایل دستور زیر را وارد نمایید:
cl lex.yy.c
  • با این کار فایل اجرایی در کنار فایل c ایجاد می شود.

استفاده از تحلیلگر کامپایل شده

  • برای استفاده از تحلیلگر،  مانند دستور زیر عمل کنید:
lex.yy <majidCodes.txt> majidOut.txt

که در آن  majidCodes.txt، فایل حاوی کد برای تحلیلگر  و  majidOut.txt ، فایل خروجی تحلیلگر است.


اگر ایرادی توی این پست بود یا ... ، در نظرات اعلام کنید!

۱۷ نظر موافقین ۰ مخالفین ۰ ۲۵ اسفند ۹۲ ، ۱۹:۴۳
مجید رحیمی

در این مطلب masm و  linker اون برای کدهای اسمبلی 16 بیتی رو براتون گذاشتم: 

دریافت

برای محیط نوشتن هم WinAsm رو توصیه می کنم:

برای دیدن بزرگتر، روی عکس کلیک کنید.

برای تنظیم masm32 برای WinAsm، در WinAsm، منوی Options < Tools را باز کرده و بخش Files & Paths را بیاورید و 3 آدرس اول را مطابق جایی که masm32 وجود دارد و با کمک شکل پایین تنظیم کنید:

یادتون باشه که WinAsm نیازی به نصب نداره و با اجرای فایل WinAsm.exe شروع میشه.

یه برنامه آزمایشی "سلام جهان" رو پایین می بینید:

.MODEL small
.STACK 100h
.data
message BYTE "Hello, world!","$"
.code
_start:
mov ax, @data
mov ds, ax
mov ah,9
mov dx,OFFSET message ; addr of buffer
int 21h
mov ah,1
int 21h
END _start
۱ نظر موافقین ۱ مخالفین ۰ ۱۱ اسفند ۹۲ ، ۱۷:۲۹
مجید رحیمی

قصد دارم آموزش Entity Framework که جزو بسته ی NET. هست و یکی از بهترین ORM هاست رو خدمتتون ارائه کنم.

حالا اول بریم سراغ این که ORM چیه و به چه دردی می خوره؟!

ORM سر واژه ی عبارت Object Relational Mapping هستش که به معنی نگاشت شی رابطه ای است. در برنامه نویسی شی گرا تمامی کارها با پیاده سازی اشیا عملیاتی می شوند اما در پایگاه داده های رابطه ای ما با جداول و رابطه ی بین آن ها سروکار داریم. مشکل اینجاست که  انواع پیچیده ای که ما برای انتزاع به صورت شی درمی آوریم  امکان ذخیره  مستقیم در پایگاه داده را ندارند. بنابراین ما مجبوریم برای ذخیره ی اشیا، آن هارا به اجزای ریز مطابق با پایگاه داده رابطه ای مورد استفاده خودمان در بیاوریم. (مثلا به انواع varchar و tinyint و... که در Microsoft SQL وجود دارد) موقع بازخوانی مقادیر هم مشکل مقدار دهی اشیا را خواهیم داشت.

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

۱ نظر موافقین ۱ مخالفین ۰ ۳۰ بهمن ۹۲ ، ۰۹:۰۴
مجید رحیمی