شروع یادگیری Data Mining

برای من کار Data Mining یک چیز مبهم و بسیار هیجان انگیز است. پس چه چیزی بهتر از اینکه برم سراغ چیزی که ازش هیچی نمی دونم!
نه اینقدر هم بی گدار به آب نمی زنم. یک کتاب خوب از انتشارات PacktPub را به صورت رایگان دانلود کردم که عنوان جالبی داره:

Social Media Mining with R

من قصد یادگیری از روی این کتاب را دارم و در این مسیر مطالبی که خودم از این کتاب آموختم را به اشتراک می گذارم

نصب آسان NodeJs

سلام خدمت دوستان خودم
چند وقتی بود که وقت نمی‌شد مطلب جدید براتون بگذارم، ولی الان وقت بیشتری پیدا کردم و امیدوارم بتونم سریع‌تر مطالب جدید براتون بگذارم.
امروز می خوام در مورد ساده‌ترین و بی دردسر ترین راه نصب NodeJs روی سیستم لینوکسی صحبت کنم.
کسایی که سیستم عامل Ubuntu دارن با دستور apt-get آشنایی دارند و بیشتر برنامه‌های خودشون را با این دستور نصب می کنند. اتفاقاً برای NodeJs هم میشه از این دستور استفاده کنین و براتون نصب کنه.
ولی من پیشنهاد می‌کنم این کار را نکنید! حتی اگر از این روش استفاده کردید برای نصب NodeJS ،‌به وسیله apt-get remove آن را پاک کنید و از روشی که خدمتتون عرض می‌کنم برای نصب استفاده کنید.
وقتی که با apt-get برنامه NodeJs را نصب می کنید، آن را در پوشه ای نصب می‌کند که بقیه کاربران سیستم هم در دسترس داشته باشند، و این فولدر، سطح دسترسی مدیر برای تغییرات لازم دارد و این همان جایی است که مشکلات شما آغاز می شود.
برای نصب ماژول های نود ما از npm استفاده می کنیم. اگر از apt-get برای نصب نود استفاده کنید، در نصب ماژول ها به مشکل می خورید، چون خود npm در همان فولدر با دسترسی محدود نصب شده و وقتی که ماژولی را می‌خواهید نصب کنید، در همان فولدر می‌خواهد نصب کند و طبیعتاً sudo باید بزنید تا نصب بشه.
کار اگر با sudo حل می‌شد مشکلی نبود، وبر فرض مثال، ماژول ها را با دسترسی مدیر نصب می کنیم. مشکل دوباره جایی می‌خوریم که این ماژول ها احتیاج دارند که پوشه های موقتی برای کار های درونی خودشان ایجاد کنند و چون سطح دسترسی ندارند، ارور می‌خورند و کرش می شوند.

روشی که من پیشنهاد می‌کنم بسیار ساده بوده و نیازی به تنظیمات خاصی ندارد. به ساین خود NodeJs می‌رویم و آخرین ورژن برنامه (که در حال حاضر ۵.۳.۰) را دانلود می کنیم. بعد در پوشه ~ خودتون فایل فشرده شده را باز می کنیم.
فایل‌های اجرایی توی پوشه bin قرار دارند (برای من در مسیر
/home/tiny/node-v5.3.0-linux-x64/bin قرار گرفته).حالا باید بتونیم به فایل‌های اجرایی این فولدر بصورت مستقیم دسترسی داشته باشیم و بتونیم فقط با تایپ نام برنامه، اون را اجرا کنیم.
برای این هدف باید اون مسیر را به متغیر PATH اضافه کنیم. توی پوشه ~ خودتون باید فایلی به نام bashrc. ایجاد کنید( یا اگر هست ویرایش کنید) و مسیر اون پوشه را به متغیر PATH اضافه کنید. دقت کنید که مسیر خودتون را به جای مسیری که من نوشتم بگذارید.
PATH=$PATH:/home/tiny/node-v5.3.0-linux-x64/bin
برای مطالعه بیشتر می تونید به این لینک مراجعه کنید
فایل را ذخیره کنید.
حالا می تونید همان خط کد را توی terminal بزنید و کار شما تمام می شود.

این روش چند مزیت دارد:
– ورژن های مختلف نود را با هم می تونید داشته باشید و از هر کدام که خواستید استفاده کنید
– نیازی به sudo برای نصب ماژول ها نیست
– نیازی به ویرایش تنظیمات npm برای تغییر فولدر نصب ماژول ها برای مساله سطح دسترسی نیست

موفق باشید

دکمه های سفارشی برای ستون های GridView – قسمت دوم

برای اینکه در ستون دکمه ها، دکمه ای دیده شود یا نه، یک option در CButtonColumn که از CGridColumn اکستند شده وجود دارد که شما می توانید به آن مقدار true یا false را بدهید تا دکمه مربوطه نمایش داده بشود یا نه.

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

لطفا به خط ۲۳ توجه کنید،

$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'myGrid',
    'dataProvider' => $model->search(),
	'filter' => $model,
	'columns' => array(
        'firstName',
        'lastName',
		array(
			'class' => 'CButtonColumn',
			'template' => '{view}{update}{export}',
			'buttons' => array(
				'view' => array(
					'url' => 'Yii::app()->createUrl("somewhereElse/view" , array("id"=>$data->id))',
				),
				'export' => array(
					'icon' => 'picon-road pmenu',
					'label'=>Yii::t('export','create'),
					'url' => 'Yii::app()->createUrl("export/create", array("id" => "$data->id"))',//custom url
					'options' => array(
						'style' => 'color: #666666;text-decoration:none;', // set additional html styles for this button
						'class'=>'customClass',
					),
					'visible' => function($row ,$data){
						$userId = Yii::app()->user->id;
						
						if($data->userId == $userId) // some logic to check is allowed to see this button
							return true;
						else
							return false;
					},
				),
			),
        )
    ),
));

موفق باشید

دکمه های سفارشی برای ستون های GridView – قسمت اول

برای اینکه آیتم های روی ستون های را کنترل کنیم، باید template های buttonColumn را ویرایش کنیم.

$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'myGrid',
	'dataProvider' => $model->search(),
	'filter' => $model,
	'columns' => array(
        'firstName',
        'lastName',
        array(
            'class' => 'CButtonColumn',
            'template' => '{view}{update}', // only show view and edit in for grid
        )
    ),
));

حالا اگر بخواهیم می توانیم جزییات مربوط به این موارد را ویرایش کنیم تا از حالت پیش فرض استفاده نکند.
برای مثال url در view را عوض می کنیم:

array(
    'class' => 'CButtonColumn',
    'template' => '{view}{update}', // only show view and edit in for grid
    'buttons' => array(
        'view' => array(
            'url' => 'Yii::app()->createUrl("somewhereElse/view" , array("id"=>$data->id))',
        ),
    ),
)

حالا ما یک دکمه ای را می سازیم و آن را در کنار دکمه های دیگر نمایش می دهیم:

    array(
            'class' => 'CButtonColumn',
            'template' => '{view}{update}{export}',
            'buttons' => array(
                'view' => array(
                    'url' => 'Yii::app()->createUrl("somewhereElse/view" , array("id"=>$data->id))',
                ),
                'export' => array(
                    'icon' => 'picon-road pmenu',
                    'label'=>Yii::t('export','create'),
                    'url' => 'Yii::app()->createUrl("export/create", array("id" => "$data->id"))',//custom url
                    'options' => array(
                        'style' => 'color: #666666;text-decoration:none;', // set additional html styles for this button
                        'class'=>'customClass',
                    ),
                ),
            ),
        )

موفق باشید.

دوره آموزشی طراحی و تولید یک برنامه کاربردی امروزی و کارآمد شرکت پیشتازان توسعه

شرکت پیشتازان توسعه دوره آموزشی برنامه نویسی php با فریم ورک Yii را برگزار می کند.

سایت مربوطه

Yii-Final-poster-original

پیش نیاز علمی :
یادداشتن حداقل یک زبان شی گرا و نوشتن یک برنامه روی آنها

سر فصل دوره
چرا Yii : بررسی سادگی، کارآمدی ، انعطاف پذیری و جایگاه آن نسبت به بقیه.
معماری MVC و تشریح اجزا Model-View-Controller.
بررسی ORM، Active Record و فرایند پاسخگویی به یک درخواست.
ساخت بانک اطلاعاتی و ارتباط با فریمورک
فرآیند تحلیل و طراحی کلاسهای برنامه .
تولید کدهای اتومات از روی بانک اطلاعاتی.
مدیریت کاربران و احراز هویت.
معرفی شیوه های کنترل دسترسی
MAC
DAC
RBAC
تغییرات فرمها با استفاده از Ajax و CHTML
ایجاد Widget، Module
طراحی Template : منو، هدر، navigation، breadcrumb ، فوتر
مباحث پیشرفته : کنترل خطا، لاگ، Caching

ایمپورت کردن معمول کلاس ها در php در مقابل مدل Yii

با سلام
فرق بین require و require_once با include و include_once مشخص است ولی وقتی از فریم ورک Yii استفاده می کنیم آیا بهتر است از توابع بالا استفاده کنیم یا از تابع import خود فریم ورک؟
تابع import در به نام فایل حساس است. منظورم این است که مثلا وقتی کلاسی به نام House را در فایلی با نام House.php ایمپورت می کنیم، تا وقتی که در کد کلاس House استفاده نشود، آن فایل در حافظه قرار نمی گیرد.
این کارکرد در مقابل عملکرد require و include از لحاظ سرعت و مصرف حافظه بسیار مفید است ولی باید با ملاحظه استفاده شود چون اگر شما در همان فایل، کلاس Garden را هم تعریف کرده باشید، اگر قبل از new کردن کلاس House، کلاس Garden را استفاده کنید، به ارور می خورید. چون autoload بر اساس نام، ایمپورت می کند.

موفق باشید

خواندنی درباره گرید ویوها (GridView) در فریم ورک Yii قسمت سوم

در گرید ویو ها شما برای ستون هایی که می خواهید نمایش دهید می توانید به چند صورت عمل کنید:
۱ – می توانید صرفا نام را وارد کنید :

$this->widget('bootstrap.widgets.TbGridView', array(
    'id' => 'post-grid',
    'dataProvider' => $model->search(),
    'filter' => $model,
    'columns' => array(
        'idPost',
        'title',
        'content',
        'isActive',
        'status',
        array(
            'class'=>'bootstrap.widgets.TbButtonColumn',
        ),
    ),
    'ajaxUrl' => array('post/custome' , 'param1' => $param1)
));

۲ – با نوع سریع :

'columns' => array(
        'idPost',
        'title',
        'content',
        'isActive:boolean', // <<<<-----
        'status',
        array(
            'class'=>'bootstrap.widgets.TbButtonColumn',
        ),
    ),

۳ – با یک رشته که پردازش شود:

'columns' => array(
    array( // <<<<-----
        'name' => 'idPost',
        'value' => 'CHtml::link( Yii::app()->createUrl("post/view" , array("id" => $data->idPost)) )',
    ),
    'title',
    'content',
    'isActive:boolean',
    'status',
    array(
        'class'=>'bootstrap.widgets.TbButtonColumn',
    ),
);

۴ – با یک تابع بدون نام:

'columns' => array(
    array(
        'name' => 'idPost',
        'value' => 'CHtml::link( Yii::app()->createUrl("post/view" , array("id" => $data->idPost)) )', // <<<<-----
    ),
    array( // <<<<-----
        'name' => 'title',
        'value' => function($data){
            if($data->isActive == 1)
                $html = '<h3 class="header">' . $data->title . '</h3>';
            elseif($data->status == 'flying')
                $html = '<h3 class="header"> Some thing is flying</h3>';
            //else
            // and so on
            return $html;
        },
        'type' => 'raw',
    ),
    'content',
    'isActive:boolean',
    'status',
    array(
        'class'=>'bootstrap.widgets.TbButtonColumn',
    ),
);

موفق باشید.

خواندنی درباره گرید ویوها (GridView) در فریم ورک Yii قسمت دوم

رفرش کردن گرید ویو با پارامتر های فیلتر جدید :

اگر در صفحه ای بخواهید که گرید شما بصورت آژاکسی با پارامتر های سرچ جدیدی ( مثلا تکست باکس های موجود در یک فرم ) رفرش شود و نتایج را بدون رفرش صفحه داشته باشید می توانید بصورت زیر عمل کنید :

$.fn.yiiGridView.update('my-grid', { // my-grid is id of your grid
	data: $("#searchForm").serialize() // searchForm is the id of form which we want to send data from
});

موفق باشید

خواندنی درباره گرید ویوها (GridView) در فریم ورک Yii قسمت اول

خب نمایش یک گرید در یک صفحه کار ساده ای است و همه کم و بیش با ستینگ های مختلف می توانیم نمایش دهیم. ولی وقتی که یک گرید را با شرایط خاصی و بر اساس آن شرایط ایجاد کرده ایم، مثلا بر اساس آپشن های یک فرمی که پست شده اند به همین صفحه شما و صفحه شما بر اساس آن گرید را نمایش داده است.
در این شرایط اگر شما گرید را رفرش کنید، گرید را از دست خواهید داد. چون وقتی پارامتر “ajaxUrl” را ست نکرده باشید بصورت پیش فرض همین آدرسی که در آن هستید را استفاده می کند و این صفحه شما چون پارامتر هایی که بر اساس آن گرید را نمایش داده است را ندارد، پس شما هم گرید را ندارید!
برای رفع این مشکل، پارامتر های ورودی از فرم را بصورت زیر بگیرید تا مهم نباشد که این پارامتر ها با متد POST ارسال شده اند یا GET.

$param1 = Yii::app()->request->getParam('param1' , null);

و در نهایت به گرید که رسیدیم :
$this->widget('bootstrap.widgets.TbGridView', array(
    'id' => 'post-grid',
    'dataProvider' => $model->search(),
    'filter' => $model,
    'columns' => array(
        'idPost',
        'title',
        'content',
        'idUser',
        'status',
        array(
            'class'=>'bootstrap.widgets.TbButtonColumn',
        ),
    ),
    'ajaxUrl' => array('post/custome' , 'param1' => $param1)
));

در اینجا ما گرید را با کنترلر کاستوم خود آپدیت می کنیم.
فقط در ذهن داشته باشید که در جواب این کنترلر باید به یک گرید با همین آیدی گرید داشته باشیم که رندر می شود داشته باشیم.

موفق باشید