Skip to Content

بلاگ

چگونه به یک برنامه نویس اندروید موفق تبدیل شویم؟!

چگونه به یک برنامه نویس اندروید موفق تبدیل شویم؟!

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

۱- تحصیلات مهم است اما واجب نیست!
شما برای اینکه یک برنامه نویس ماهر شوید نیازی ندارید که تحصیلات آکادمیک در این زمینه داشته باشید. البته مسلم است که اگر داشته باشید برای پیشرفت به شما کمک خواهد کرد ، اما اگر در رشته ی دیگری درس خوانده اید خیلی عذاب وجدان نگیرید. دیر نشده است! هنوز فرصت دارید.
برای مثال خود من ، من تمامی مواردی که در حال حاضر در آن تخصص دارم ، اعم برنامه نویسی اندروید ، طراحی و برنامه نویسی وب سایت و … را خودم یاد گرفته ام و منبع تخصص فعلی من دانشگاه یا موسسه خاصی نبوده است.
این را بدانید که تمام علمی که نیاز دارید ، در دنیای اینترنت (و شاید بتوان گفت در دنیای Stackoverflow) وجود دارد. پس حتما از این منبع لایتناهی علم استفاده کنید. اگر هم دیدید به منابع بیشتری نیاز دارید ، به کتاب فروش محله خود یا شاید میدان انقلاب سری بزنید.

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

۳- صبر داشته باشید!
خودتان را فریب ندهید. در راه برنامه نویس شدن بارها شکست خواهید خورد و این جزئی از این راه است.
برنامه نویسی یعنی کدی را بنویسید و پس از آن باید کلی تلاش کنید که آن کد واقعا بدون نقص کار کند.
در این مسیر است که شما تجربه لازم برای برنامه نویس شدن را کسب خواهید کرد.

۴- تلفن همراه خود را قورت دهید!
این یک نکته مهم برای تبدیل شدن به یک برنامه نویس موفق است.
اگر از تلفن همراه خود یا بهتر بگویم اپلیکیشن های تلفن همراه خود استفاده مداوم نکنید ، بعید می دانم برنامه نویس خوبی شوید.
شما باید بصورت روزانه اپلیکیشن هایی که در مارکت های مختلف منتشر می شوند را رصد کنید و از آنها الگو بگیرید.
اپلیکیشن های موفق را تحلیل کنید و سعی کنید راز موفقیت آنها را دریابید.
تقریبا می توان گفت برنامه نویسی موبایل یک ساختار کلی را دنبال می کند ، شما با این روش به آن ساختار دست خواهید یافت.

۵- عاشق شغل خود باشید!
اگر از برنامه نویسی اندروید لذت می برید ، مطمئن باشید که راه درستی را انتخاب کرده اید.
اگر هیچ تجربه جدی در برنامه نویسی اندروید ندارید ، دنبال شغل مرتبط گشتن حرکت خوبی نخواهد بود.
بهتر است نخست بر روی یک یا چند پروژه بصورت جدی کار کنید تا حداقل در زمان مصاحبه شغلی چیزی برای گفتن داشته باشید.
داشتن چند پروژه به کارفرما نشان می دهد که شما عاشق شغل آینده خود هستید و برای آن حاضرید حتی قبل از بدست آوردن آن شغل ، تجربه کسب کنید.

۶- از ریسک کردن نترسید!
احتمالا خیلی مواقع در شغل شما پیش می آید که برای انجام یک کار ، دو راه در پیش روی خود دارید.
یک راه ساده و سریع و یک راه جدید که تابحال تجربه اش نکردید.
من فقط منظورم موارد مرتبط با برنامه نویسی نیست.
اگر قانونی در شرکت خود دارید که همیشه راه سریع و آسان باید انتخاب شود ، بنظر من بهتر است در بعضی مواقع بیخیال این قوانین شوید و آن کودک درون کنجکاو خود را بیدار کنید. تجربه های جدید همیشه مفید خواهند بود.
بهتر است بعضی مواقع دل به دریا بزنیم.

۷- بدنبال یک تیم باشید.
به عنوان یک برنامه نویس اندروید شاید در اکثر موارد به تنهایی کار کنید. دلیل آن این است که پروژه هایی که دارید شاید به اندازه کافی بزرگ نیستند.
به نظر من برای یک بار هم که شده عضو یک تیم برنامه نویسی شوید و پروژه های بزرگتری را تجربه کنید.
عضویت در یک تیم برنامه نویسی هم هیجان بیشتری دارد و هم تجربه بیشتری برای شما به ارمغان خواهد آورد.

۸- سعی نکنید همیشه فردی ضعیف تر از خود را انتخاب کنید!
اگر تصمیم گرفتید عضو یک تیم برنامه نویسی شوید یا یک تیم برنامه نویسی تشکیل دهید ، بهتر است در آن تیم حداقل یک نفر از نظر تخصصی از شما قویتر باشد. اینگونه است که شما خواهید توانست نکات و تجارب بسیاری را کسب کنید.
مهم نیست شما چقدر از نظر خودتان حرفه ای هستید. همیشه راه برای پیشرفت بیشتر وجود دارد.

۹- از GIT استفاده کنید!
مهم نیست که برای چه پلتفرمی کد نویسی می کنید.
برنامه کنترل نسخه (GIT) دقیقا چیزیست که شما در هر پروژه ای چه برای شرکت شما باشد و چه برای شخص شما کاربرد خواهد داشت.
کنترل نسخه (GIT) مقداری پیچیده است اما نترسید ، فقط کافیست مقداری با آن کار کنید.
GIT بسیار مهم است بویژه زمانی که بصورت تیمی کار می کنید.
اگر نمی دانید گیت(GIT) چیست ، بزودی در مطلبی جداگانه آن را بررسی خواهم کرد.

۱۰-راه و روش خود را پیدا کنید!
هیچ فرمول کامل و دقیقی برای روش های برنامه نویسی وجود ندارد.
بهتر است با تیم خود بر روی مشکلات خود کار کنید و راه حل مخصوص به خودتان را پیدا کنید.
البته منظور من این نیست که از تجربه ها دیگران استفاده نکنید یا الگو نگیرید. فقط بدانید همیشه این الگو ها جوابگوی کار شما نخواهند بود.

ادامه مطلب

نمایش IP Address با استفاده از #C

نمایش IP Address با استفاده از #C

همانطور که می دانید IP Adress بخشی جدا نا پذیر از شبکه می باشد . شاید عنوان این مقاله زیاد جالب به نظر نرسد ولی در بعضی از پروژه ها شاید نیاز داشته باشیم تا برای بعضی از عملیات آدرس IP کاربر را به دست بیاوریم .راه های مختلفی برای به دست آوردن آدرس IP سیستم وجود دارد از جمله CMD ویندوز.

در ابتدا برای آشنایی بیشتر با استفاده از خود ویندوز آدرس IP را بدست آورده و بعد با استفاده از سی شارپ این کار را انجام می دهیم .

IP Address

بدست آوردن IP Address با استفاده از cms.exe :

ابتدا بر روی دکمه start کلیک و در کادر جستجو cmd.exe را وارد و بعد از پیدا کردن Enter را بزنید تا وارد برنامه شد .برای گرفتن آدرس IP  و نمایش اطلاعاتی درباره شبکه و جزئیات آن ipconfig را نوشته و Enter را بزنید می بینید که لیسیتی از جزئیات شبکه از جمله IP Adress ، Host Name، Getway و … را به شما نشان می دهد.

ipconfig-Get-IPAddress

به دست آوردن IP Address در #C  :

در NET. برای کار با شبکه  و به دست آوردن اطلاعاتی در این باره تعدادی کلاس در System.Net ، namespace داریم .

1 – پروزه جدید از نوع Console ایجاد کنید .

2 – ابتدا namespace زیر را به پروژه اضافه کنید .

Using System.Net;

3- ابتدا HostName را بدست آورده و با استفاده از متد ()GetHostByName و پاس دادن پارامتر HostName با آن IP Asdrress را بدست می آوریم .

static void Main(string[] args)

{

string hostName = Dns.GetHostName(); // Retrive the Name of HOST

Console.WriteLine(hostName);

// Get the IP

string myIP = Dns.GetHostByName(hostName).AddressList[0].ToString();

Console.WriteLine(“My IP Address is :”+myIP);

Console.ReadKey();

}

خروجی کدهای بالا به صورت زیر می باشد :

Get-IPAddress-Using-C#

این مقاله شروعی برای آشنایی بیشتر با System.Net,namespace بود . در مقاله های بعدی سعی می کنیم بیشتر با این namespace و کلاس های آن کار کنیم .

ادامه مطلب

بدست آوردن مشخصات کاربران سايت در ASP.NET

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

1 –  نام دستگاه کاربر و IP آن

1
2
ClientName = Request.UserHostName
ClientIP = Request.UserHostAddress

2 – لينکی که کاربر با کليک بر روی آن سايت را يافته است.

1
REFERER = Request.ServerVariables.Item("HTTP_REFERER");

3 – اطلاعاتی در رابطه با سیستم کاربر (Client)

1
2
3
LANGUAGE = Request.ServerVariables.Item("HTTP_ACCEPT_LANGUAGE  ")
AGENT = Request.ServerVariables.Item("HTTP_USER_AGENT")
Platform = Request.Browser.Platform()

4 – QUERY STRING صفحه حاضر

1
QUERY STRING = Request.ServerVariables.Item("QUERY_STRING")

5 – اطلاعاتی در رابطه با Browser کاربر

1
2
3
Browser = Request.Browser.Browser()
Browser_Type = Request.Browser.Type()
Browser_Version = Request.Browser.Version()

 

ادامه مطلب

آموزش ساخت Multi Threading برای فراخوانی اطلاعات

آموزش ساخت Multi Threading برای فراخوانی اطلاعات

هرچقد کیفیت و کاربرپسند شدن برنامه را در پروژه های خود بالاببریم این امکان برای جذب مشتری بیشتر میشود در این مطلب توسط Multi Threading و یک Progress اطلاعات دسته به دسته load میکنیم.درباره مزایا Multi Threading در ادامه بحث خواهیم کرد.همراه ما باشید.

آموزش ساخت Multi Threading برای فراخوانی اطلاعات

ابتدا بریم برسی کنیم ببینیم چند نخی یا یا مالتی تردینگ چیست !

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

یک پروژه در سی شارپ ایجاد و یک دیتاگرید و یک Button روی آن قرار بدید.(فرمی همانند فرم اول )

یک کلاس با نام “clsProgress” ایجاد کنید و کد زیر را در آن قرار دهید.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private static Thread th = new Thread(new ThreadStart(showProgressForm));                
       public void startProgress()
       {
           th = new Thread(new ThreadStart(showProgressForm));
           th.Name = "first";
           th.Start();           
       }
       private static void showProgressForm()
       {
           frmProgress sForm = new frmProgress();
           sForm.ShowDialog();           
       }
       public void stopProgress()
       {
           th.Abort();
           th = null;
       }

در Load فرمی که ساخته اید کد زیر را قرار دهید.

1
2
3
4
5
6
7
DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();
            col1.HeaderText = "UserID ";
            dataGridView1.Columns.Add(col1);
            col1 = new DataGridViewTextBoxColumn();
            col1.HeaderText = "Password";
            dataGridView1.Columns.Add(col1);

در Button فرم نیز کد زیر را قرار بدید !

1
2
3
4
5
6
7
8
9
10
clsProgress cPro = new clsProgress();
cPro.startProgress();
for (int i = 0; i < 9999; i++)
{
    dataGridView1.Rows.Insert( dataGridView1.Rows.Count-1,1);
    dataGridView1[0, i].Value  = i.ToString();
    dataGridView1[1, i].Value = i.ToString();
}
cPro.stopProgress();

ما برای نمایش Loading به کاربر نیازبه یک فرم دیگه داریم یک فرم با نام FrmProgress  بسازید

سعی کنید سایزشو کوچیک کنید و موقعیت نمایش را روی Center Screen قرار بدید که وسط فرم به نمایش دربیاد یک ابزار تصویر که تصویر آن ضمیمه شده به ابزار تصویر اضافه کنید
و کد زیر را به فرم Progress اضافه کنید.

1
2
3
4
5
6
7
public static frmProgress sForm = null;
       public static frmProgress Instance()
       {
           if (sForm == null) { sForm = new frmProgress(); }
           return sForm;
       }

خیلی سخته براتون ! فایل ضمیمه کردم برید دانلودش کنید !

ادامه مطلب

آموزش طراحی فرم popup به زبان jquery

آموزش طراحی فرم popup به زبان jquery

 

پنجره های Popup از پرکاربرد ترین مواردی هستند که توی طراحی ها امروزه استفاده می شن و برای ایجاد چنین پنجره متونید با آموزش امروز یکی ساده ترین و سبک ترین آن ها را باهم بسازیم همراه ما در ادامه باشید.

آموزش طراحی فرم popup به زبان jquery

ابتدا فایل های مورد نیاز را در صفحه قرار میدهیم.

1
2
<script src="jquery.min.js" type="text/javascript"></script>
<script src="jquery.reveal.js" type="text/javascript"></script>

کد فوق را در head اضافه کنید !

بخش بعدی ساخت فایل CSS :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
.big-link {
    display:block;
    margin-top: 100px;
    text-align: center;
    font-size: 12px;
    color: #06f;
}
.reveal-modal-bg {
    position: fixed;
    height: 100%;
    width: 100%;
    background: #000;
    background: rgba(0,0,0,.8);
    z-index: 100;
    display: none;
    top: 0;
    left: 0;
}
.reveal-modal {
    visibility: hidden;
    top: 100px;
    left: 50%;
    margin-left: -300px;
    width: 520px;
    background: #eee url(modal-gloss.png) no-repeat -200px -80px;
    position: absolute;
    z-index: 101;
    padding: 30px 40px 34px;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    border-radius: 5px;
    -moz-box-shadow: 0 0 10px rgba(0,0,0,.4);
    -webkit-box-shadow: 0 0 10px rgba(0,0,0,.4);
    -box-shadow: 0 0 10px rgba(0,0,0,.4);
}
.reveal-modal.small {
    width: 200px;
    margin-left: -140px;
}
.reveal-modal.medium {
    width: 400px;
    margin-left: -240px;
}
.reveal-modal.large {
    width: 600px;
    margin-left: -340px;
}
.reveal-modal.xlarge {
    width: 800px;
    margin-left: -440px;
}
.reveal-modal .close-reveal-modal {
    font-size: 22px;
    line-height: .5;
    position: absolute;
    top: 8px;
    right: 11px;
    color: #aaa;
    text-shadow: 0 -1px 1px rbga(0, 0, 0, .6);
    font-weight: bold;
    cursor: pointer;
}

مرحله بعدی کد html برای فراخوانی فرم Popup است.

1
2
3
4
5
<div id="myModal" class="reveal-modal">
    <h4>ساختن پنجره های Pop Up با جی کوئری</h1>
    <p>مدرسه وب ایران ، آموزش طراحی وب سایت به زبان پارسی</p>
    <a class="close-reveal-modal">&#215;</a>
</div>

 

بعد از نوشتن کد فرم و طراحی بخش مورد نظر باید کد فوق را فراخوانی کنیم:

1
<a href="#" data-reveal-id="myModal">کلیک کنید</a>

دقت داشته باشید myModal که در کد بالا میبینید ID کد Html ما را فراخوانی میکنه و به کاربر نمایش میده !

فایل دانلود نیز آماده دانلود شده.موفق باشید.

ادامه مطلب

آموزش مقدماتی Globalization و Localization در Asp.net MVC

آموزش مقدماتی Globalization و Localization در Asp.net MVC

آموزش مقدماتی Globalization و Localization در Asp.net MVC

آموزش مقدماتی Globalization و Localization در Asp.net MVC

ما دراین مقاله سعی می کنیم تا Globalization و Localization در Asp.net MVC را یاد بگیریم و اجرا کنیم.

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

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

اگر ما بخواهیم که سایت طراحی شده توسط ما،نیازهای کاربران را در سراسر کره زمین برآورده کند،شاید این یک ایده ی خوبی باشد که Globalization و Localization را در برنامه هایمان یاد بگیریم و اجرا کنیم.

در این مقاله ،ما سعی خواهیم کرد تا ببینیم چه چیزی را برای اجرای Globalization و Localization در Asp.net MVC نیاز داریم.

قبل از شروع مختصری راجع به این دو کلمه توضیح می دهیم.

Globalization ،پروسه ی طراحی یک برنامه در راهی است که آن برنامه بتواند قابل استفاده برای کاربران در سراسر کره زمین(فرهنگ های مختلف)

باشد.

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

استفاده در کد

اجازه دهید ما سعی کنیم تا ببینیم چگونه Globalization و Localization در Asp.net MVC با انجام یک مثال کوچک ،اجرا می شود.

این برنامه شامل تعداد کمی متغیر string  ثابت است،همچنین تعدادی TextBox،Button و validation error.

اجازه دهید ما برنامه رو بدون پشتیبانی هیچ یک از Localization و globalization  اجرا کنیم.سپس می بینیم که چگونه localization  وglobalization را اجرا کنیم. هم اکنون شروع به ساختن یک دمو مدل می کنیم.

1
2
3
4
5
public class Demo
{
    public string Name { get; set; }
    public int Age { get; set; }
}

حال تعدادی صفت های DataAnnotation ،به طور خاص DisplayName و ErrorMessage اضافه می کنیم.

1
2
3
4
5
6
7
8
9
10
public class Demo
{
    [DisplayName("Name")]
    [Required(ErrorMessage="Name is Required")]
    public string Name { get; set; }
    [DisplayName("Age")]
    [Required(ErrorMessage = "Age is Required")]
    public int Age { get; set; }
}

سپس یک کنترولر ساده می سازیم که در آن یک متد Create ساده برای ذخیره داده های مدل خواهیم داشت.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class HomeController : Controller
{
    private static List<Demo> list = new List<Demo>();
    public ActionResult Index()
    {
        return View(list);
    }
    [HttpGet]
    public ActionResult Create()
    {  
        return View();
    }
    [HttpPost]
    public ActionResult Create(Demo model)
    {
        if (ModelState.IsValid)
        {
            list.Add(model);
            return RedirectToAction("Index");
        }
        return View();
    }
}
و در آخر View Page  برای آن:

هم اکنون اگر ما برنامه را اجرا کنیم ،خواهیم دید که View ،دمو مدل را در یک memory collection اضافه می کند.

حالا اجازه بدهید تا ببینیم چه چیزی برای اجرای globalization و localization  نیاز داریم.

اجازه دهید تا شروع به شناسایی همه چیزهایی کنیم که با فرهنگ کاربر تغییر می کند.

حال ما یک کلاس لایبرری ساده که شامل ری سورس فایل ها است را می سازیم.

حال همه ی hard coded string  ها را داخل ریسورس فایل ها در کلاس لایبرری قرار می دهیم.

اگر ما بخواهیم این ریسور س ها را برای چند زبان داشته باشیم ،ما باید ریسورس های جداگانه مربوط به هر ورژن داشته باشیم

برای داشتن ریسورس ها در hindi-Indian ،ما نیاز به ریسورس فایل Resource.hi-in.resx  داریم.

"hi" ،زبان را و "in"،محل را مشخص می کند.

حال ما چه تغییراتی را باید در برنامه مان انجام دهیم تا از این ریسورس فایل ها به جای آن مقدارهای هارد کدی استفاده کند.برای این کار ما یک رفرنس به کلاس لایبرری اضافه می کنیم و از ریسورس فایل ها برای string  ها استفاده می کنیم.

1
2
3
4
5
6
7
8
9
10
public class Demo
{
    [DisplayName(MyResources.Resources.Name)]
    [Required(ErrorMessage=MyResources.Resources.NameRequiredError)]
    public string Name { get; set; }
    [DisplayName(MyResources.Resources.Age)]
    [Required(ErrorMessage = MyResources.Resources.AgeRequiredError)]
    public int Age { get; set; }
}

همچنین hard coded string  ها را در view  تغییر می دهیم.

برای تست کردن تغییرات باید زبان پیش فرض Browser  را به Hindi-Indian  تغییر دهیم.

بنابراین برنامه زبان پیش فرض Browser را چک می کند و برطبق آن زبان و فرهنگ لود می شود.

حال زبان پیش فرض را در IE تغییر می دهیم.

هم اکنون برنامه را اجرا می کنیم و نتیجه را مشاهده می کنیم.

حال ما یک برنامه ای داریم که قابلبت نمایش در دو زبان انگلیسی و هندی را دارد.

ادامه مطلب

آموزش سئو از زبان گوگل

آموزش سئو از زبان گوگل

 

آموزش سئو از زبان گوگل <br/> سایت یا وبلاگ های زیادی در زمینه آموزش سئو و ارائه مقالات فعالیت میکنند که در بعضی موارد گفته های آنها یکدیگر را نقض کرده و موجب سردرگمی افراد میشود.

آموزش سئو از زبان گوگل

آموزش سئو در راهنمای گوگل

سایت یا وبلاگ های زیادی در زمینه آموزش سئو و ارائه مقالات فعالیت میکنند که در بعضی موارد گفته های آنها یکدیگر را نقض کرده و موجب سردرگمی افراد میشود. بهترین مرجع برای آموزش سئو و نکات تاثیرگذار بر رتبه بندی نتایج گوگل بخش راهنمای گوگل است. البته موارد ذکر شده در این بخش بصورت کلی بوده و توضیحات زیادی بهمراه ندارد، برای درک بهتر هریک از این بخش ها میتوانید مقالات تکمیلی وبسیما را مطالعه کنید.

مقاله پیش روآموزش سئو  براساس Webmaster Guidelines گوگل تهیه شده و راهنمای مناسبی برای بررسی سایت شما توسط روبات های گوگل و ایندکس بهتر آن خواهد بود.

راهنمای سئو طرح و محتوای سایت

  1. دسترسی صفحات داخلی سایت و لینک های متنی را به درستی طراحی کنید. هر صفحه در سایت باید حداقل از یک صفحه دیگر سایت دارای لینک ورودی باشد.
  2. نقشه سایت گرافیکی را در دسترس کاربران قرار دهید تا براحتی به بخش های داخلی سایت وارد شوند. اگر تعداد صفحات سایت شما بسیار زیاد است از نقشه چند صفحه ای و تودرتو استفاده کنید.
  3. تعداد لینک های خروجی هر صفحه را در حد معقولی نگه دارید و اجازه ندهید که خیلی زیاد شوند.
  4. محتوای مفید و اختصاصی ارائه دهید و موضوع مورد بحث را بخوبی شرح دهید.
  5. کلمات کلیدی که کاربران ممکن است در گوگل جستجو کرده و به سایت شما وارد شوند را تعیین کرده و مطمئن شوید که در متن شما بکار رفته اند.
  6. برای اطلاعات یا لینک های مهم بجای تصویر از متن استفاده کنید. زیرا روبات های گوگل قادر به تشخیص اطلاعات درون عکس ها نیستند. همچنین با استفاده از تگ ALT توضیحات مختصری برای هر تصویر قرار دهید.
  7. دقت کنید که تگ Title و ALT در صفحات با دقت تعریف شده و مرتبط با متن و موضوع باشند.
  8. لینک های خراب را پیدا کرده و کد HTML خود را تصحیح کنید.
  9. اگر از آدرس دهی دینامیک برای صفحات استفاده میکنید (استفاده از ؟ در آدرس) بدانید که توانایی موتورهای جستجو در ایندکس و بررسی صفحات با آدرس دینامیک به مراتب کمتر است.

راهنمای نکات تکنیکی و کاربردی سایت

  1. از یک مرورگر متنی مانند Lynx برای بررسی سایت و نحوه نمایش آن استفاده کنید، زیرا بیشتر موتورهای جستجو و روبات ها امکان تشخیص بخش هایی از سایت مانند کدهای جاوا، فریم، فلش و غیره را ندارند و ممکن است تصویر متفاوتی از سایت شما داشته باشند.
  2. به روبات های گوگل اجازه دهید تا بدون ردگیری در سایت شما فعالیت کنند. تکنیک هایی که برای شناسایی کاربران سایت و مسیر بازدید آنها بکار میروند نباید بر روی عملکرد روبات ها تاثیرگذار باشند زیرا ممکن است موجب اختلال در ایندکس صحیح صفحات شما شوند.
  3. سرور شما باید if-modified-Since را در هدر HTTP ساپورت کند. این امکان به گوگل نشان میدهد که آیا سایت و محتوای شما از آخرین بازدید روبات ها تغییری داشته است یا خیر. این کار در مصرف بهینه پهنای باند شما نیز موثر خواهد بود.
  4. استفاده از فایل robots.txt به روبات های گوگل اطلاع میدهد که چه بخش هایی از سایت را باید بررسی کنند و چه بخش هایی نیاز به بررسی و ایندکس ندارند. با استفاده از ابزار robots.txt analysis tool در وبمستر گوگل میتوانید از صحت عملکرد آن مطمئن شوید.
  5. مطمئن شوید که تبلیغات سایت بر رتبه بندی شما در نتایج گوگل تاثیر نداشته باشند. با استفاده از فایل robots.txt اجازه ایندکس و بررسی آنها را ندهید.
  6. اگر از سیستم های مدیریت محتوا مانند جوملا و وردپرس استفاده میکنید، مطمئن شوید که اجازه دسترسی گوگل به صفحات و لینک های سایت شما را میدهند.
  7. صفحات تولید شده براساس جستجوی داخلی سایت را با استفاده از فایل robots.txt از دید موتورهای جستجو پنهان کنید زیرا ارزشی برای کاربران شما نخواهند داشت و نیازی به ایندکس آنها توسط گوگل نیست.
  8. نحوه نمایش سایت در مرورگرهای مختلف را بررسی کنید تا در همگی آنها بدرستی نمایش داده شود.
  9. عملکرد سایت و سرعت لود شدن صفحات را بهینه کنید. هدف گوگل معرفی بهترین نتایج به کاربران و رضایت آنها از صفحاتی است که به آن وارد میشوند. سرعت بالای سایت موجب رضایت بیشتر کاربران و بهبود کیفیت عمومی اینترنت بخصوص برای کاربرانی با سرعت اینترنت پایین خواهد شد.

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

ادامه مطلب

پیاده سازی فرم لاگین و رجیستر دریک ویو بدون استفاده از Ajax در MVC

پیاده سازی فرم لاگین و رجیستر دریک ویو بدون استفاده از Ajax در MVC

 

در این مقاله به شرح پیاده سازی فرم ورود و ثبت نام دریک ویو در MVC خواهیم پرداخت

پیاده سازی فرم لاگین و رجیستر دریک ویو بدون استفاده از Ajax در MVC

نکته مهم این است که هر فرم مستقل از دیگری رفتار کند ومثلا اگر یکی از فرم‌ها ناقص پر شد و دکمه‌ی ارسال آن فشرده شد، پس از Post-back،فقط و فقط اجرای همین فرم Validate شود و فرم دوم بدون تغییر باقی بماند

در ابتدا باو ویو مدل های فرم های خود را بسازیم روی پوشه Model کلیک راست کرده و یک کلاس به نام MyLoginViewModel بسازید داخل این کلاس فیلد هایی که برای ورود کارب نیاز است همراه با صفت ها برای اعتبار سنجی وارد میکنیم:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class MyLoginViewModel
{
    [Display(Name = "آدرس ایمیل")]
    [Required(ErrorMessage = "لطفا {0} را وارد کنید")]
    [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از {1} باشد")]
    [EmailAddress(ErrorMessage = "ایمیل وارد شده معتبر نیست")]
    public string Email { get; set; }
    [Display(Name = "کلمه عبور")]
    [Required(ErrorMessage = "لطفا {0} را وارد کنید")]
    [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از {1} باشد")]
    [DataType(DataType.Password)]
    public string Password { get; set; }
    [Display(Name = " به یاد داشته باش")]
    public bool RememberMe { get; set; }
}

سپس نوبت به ساخت مدل برای فرم ثبت نام میرسد همانند بالا یک کلاس به نام RegisterViewModel    بسازید و فیلد لازم برای ثبت نام و صفت های آنهارا وارد کنید:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class RegisterViewModel
 {
     [Display(Name = "کلمه عبور")]
     [Required(ErrorMessage = "لطفا {0} را وارد کنید")]
     [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از {1} باشد")]
     [DataType(DataType.Password)]
     public string UserPassword { get; set; }
     [Display(Name = "تکرار کلمه عبور")]
     [Required(ErrorMessage = "لطفا {0} را وارد کنید")]
     [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از {1} باشد")]
     [DataType(DataType.Password)]
     [Compare("UserPassword", ErrorMessage = "کلمه عبور وارد شده یکسان نیستند")]
     public string RepeatPassword { get; set; }
     [Display(Name = "آدرس پست الکترونیکی")]
     [Required(ErrorMessage = "لطفا {0} را وارد کنید")]
     [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از 150 کاراکتر باشد")]
     [EmailAddress(ErrorMessage = "ایمیل وارد شده معتبر نیست")]
     public string UserEmail { get; set; }
     [Display(Name = "نام")]
     [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از 150 باشد")]
     [Required]
     public string FirstName { get; set; }
     [Display(Name = "نام خانوادگی")]
     [MaxLength(150, ErrorMessage = "{0} نمی تواند بیشتر از 150 باشد")]
     [Required]
     public string LastName { get; set; }
 }

پس از ساخت ویو مدل ها نوبت به ساخت پارشیال ویو از روی این مدل ها می باشد دقت کنید که ویو ها باید به صورت پارشیال ساخته شوند:

1
2
3
4
5
6
7
8
public ActionResult Login()
{
    return PartialView();
}
 public ActionResult Register()
{
    return PartialView();
}

حالا در کنترلر خود یک اکشن متد به نام index بنویسید و ویو آنرا بسازید:

1
2
3
4
public ActionResult Index()
{
    return View();
}

و در ویو خود html زیر را بنویسید:

1
2
3
4
5
6
7
8
9
10
11
12
<section>
    <div class="container">
        <div class="row">
            <div class="col-sm-6 col-md-6">
                @Html.Action("Login","Account")
            </div>
            <div class="col-sm-6 col-md-6">
                @Html.Action("Register", "Account")
            </div>
        </div>
    </div>
</section>

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

پارشیال ویو مربوط به فرم ورود:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
@model LoginAndRegister.Models.MyLoginViewModel
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <h4>MyLoginViewModel</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.RememberMe, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <div class="checkbox">
                    @Html.EditorFor(model => model.RememberMe)
                    @Html.ValidationMessageFor(model => model.RememberMe, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

و پارشیال ویو مربوط به فرم ثبت نام :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
@model LoginAndRegister.Models.RegisterViewModel
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    
    <div class="form-horizontal">
        <h4>RegisterViewModel</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.UserPassword, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.UserPassword, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.UserPassword, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.RepeatPassword, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.RepeatPassword, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.RepeatPassword, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.UserEmail, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.UserEmail, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.UserEmail, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.LastName, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.LastName, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.LastName, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

نکته مهم:

هیچ نوع ورودی برای Html.BeginForm     در نظرنگیرید اگر اکشن متدی را برای صدا زدن در این بخش به کار ببرید هنگام Postback     به مشکل برخورد خواهید کرد؛ چون آدرس آن اکشن متد به شکل صریح در آدرس مرورگر فراخوانی میشود و پارشال ما پس از Post-back     به تنهایی و بدون Layout نمایش داده خواهد شد. اسم بردن از اکشن متد وقتی کارساز است که آن اکشن متد قرار باشد یک Redirect     انجام دهد .

نکته دیگر، که مهم ترین نکته در این مثال می باشد این است که اگر  اکشن متد مربوط به Post-back     مشخص نشود، بطور اتوماتیک تمامی اکشن متدهایی که ویژگی    [HttpPost]     دارند اجرا خواهند شد. این یعنی هر دو اکشن متد   Login و Register     اجرا می‌شوند و بنابر آنچه در اکشن متدها نوشته‌ایم هر دوModelState

بررسی میشوند باید برای جدا سازی این مورد  خاصیت name     مربوط به دکمه‌ها را به شکل یک ورودی برای اکشن متدها بفرستیم و بر اساس وضعیت آن تنها state     مدل مورد نظر خودمان را بررسی کنیم پس در ویوها تغییر زیر را انجام دهید:

برای پارشیال ویو login:

1
<button type="submit" class="btn btn-primary" value="ورود" name="submitValue">ورود</button>

و برای پارشیال ویو ثبت نام:

1
<button type="submit" class="btn btn-success" value="ساخت حساب کاربری" name="submitValue">ساخت حساب کاربری</button>

در این روش سعی کنید از ViewModel   استفاده کنید و سعی کنید ویو مدل‌ها پراپرتی‌های با نام یکسان نداشته باشند.

نوبت به حالت پست می رسد همانطور که گفته شد باید خاصیت name مربوط به دکمه ها را به شکل پارامتر ورودی بگیریم پس حالت پست کنترلرها را به شکل زیر مینویسیم:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[HttpPost]
      [AllowAnonymous]
      [ValidateAntiForgeryToken]
      public ActionResult Login(MyLoginViewModel login, string submitValue)
      {
          if (submitValue == "ورود")
          {
              if (ModelState.IsValid)
              {
                  //Do Something                  
              }
          }   else
              {
                       ModelState.Clear();
              }      
           return PartialView("Login", login);
      }
      [HttpPost]
      [AllowAnonymous]
      [ValidateAntiForgeryToken]
      public ActionResult Register(RegisterViewModel register, string submitValue)
      {
          if (submitValue == "ساخت حساب کاربری")
          {
              if (ModelState.IsValid)
              {
              //Do Something
              }
          }
          else
          {
              ModelState.Clear();
          }
          return PartialView("Register", register);
      }

این روش نوعی مدیریت میان اکشن متدهای دارای ویژگی HttpPost     است و همانطور که گفتیم به علت اینکه پس از Post-Back     نیاز به ساختار به هم نخورده‌ی صفحه‌ی قبلی داریم، نمیتوانستیم به شکل صریح، اکشن متد برای Html.BeginForm     تعریف کنیم تا این دردسر‌ها را نداشته باشیم.

ادامه مطلب

سورس کد دریافت پیام تاییدیه به صورت خودکار در اندروید

سورس کد دریافت پیام تاییدیه به صورت خودکار در اندروید

آموزش دریافت خودکار sms در اندروید

آموزش دریافت خودکار sms در اندروید ، تا به حال در اپلیکیشن های مختلفی شاهد زمانی بودید که باید در اپ ثبت نام کنید و این عمل ثبت نام قطعا با روشی از احراز هویت همراه ست.

در ادامه یکی از محبوب ترین روش ها که کار را برای کاربر بسیار راحت میکند را با هم مرور میکنیم.

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

سورس کد دریافت پیام تاییدیه به صورت خودکار در اندروید

آموزش دریافت خودکار sms در اندروید ، این روش ممکن است ارسال ایمیل , ارسال sms و یا تماس با شما باشد که در اکثر مواقع یک کد برای شما ارسال میشود

که باید آنرا به اپ بدهید تا بتواند هویت شما را تایید کند.

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

که البته میتوان این روش را بسیار ساده تر برای کاربر ارائه داد

بدین صورت که  دیگر نیاز نباشد پس از دریافت پیام به صندوق دریافتی پیام های خود رفته و کد را کپی کرده و به اپ بدهد

بلکه خود اپ پس از دریافت پیام , ارسال کننده پیام را چک کند و درصورت مطابقت , متن پیام را بردارد و وارد کند

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

اما این روش مستلزم دسترسی اپلیکیشن به پیام ها یا sms های کاربر است که در نسخه های پیشین اندروید ۶ این مجوز ها تنها در manifest قرار میگرفت

اما در نسخه های بعدی اندروید ۶ این مجوز ها به صورت runtime از کاربر گرفته میشود چون جزو dangerous permission هستند.

در ادامه ما سورس کد ارسال یک پیام فیک و دریافت متن پیام به صورت خودکار توسط اپ را آموزش خواهیم داد.

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

ابتدا یک پروژه ساده ایجاد کنید.

ما در این پروژه نیاز به هیچگونه UI نداریم چون تنها هدف خواندن خودکار متن پیام دریافتی است.

ما نیز تنها یک TextView در فایل xml  خود قرار دادیم

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.tejariapp.messagereceive.MainActivity">
<TextView
android:id="@+id/code"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/monaco"
android:text="Code"
android:textColor="?attr/colorAccent"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
در این پروژه ما تنها سه بخش داریم
  • کلاسی که درقالب broadcast receiver زمانی که smsی دریافت شد اجرا میشود
  • اینترفیسی که رابطی بین broadcast receiver و اکتیویتی اصلی ماست و پیغام را از برودکست به اکتیویتی منتقل میکند.
  • و یک اکتیویتی اصلی که تمامی رخداد ها ازسمت برودکست را به ما نمایش دهد.

اینترفیس را به صورت زیر با عنوان Sms Listener  ایجادمیکنیم

01
02
03
04
05
06
07
08
09
10
11
package com.tejariapp.messagereceive;
/**
 *
 * Created by MDN on 09/12/2017.
 *
 */
public interface SmsListener {
    void onMessageReceived(String messageText);
}

سپس کلاس SmsReceiver را به صورت زیر ایجاد میکنیم

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.tejariapp.messagereceive;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
/**
* Created by Marjan on 09/12/2017.
* Own WebSite is Tejariapp.com
*/
public class SmsReceiver extends BroadcastReceiver {
private static SmsListener mListener;
@Override
public void onReceive(Context context, Intent intent) {
Bundle data = intent.getExtras();
Object[] pdus = (Object[]) data.get("pdus");
for(int i=0;i<pdus.length;i++){
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
String sender = smsMessage.getDisplayOriginatingAddress();
//You must check here if the sender is
// your provider and not another one with same text.
String messageBody = smsMessage.getMessageBody();
//Pass on the text to our listener.
mListener.onMessageReceived(messageBody);
}
}
public static void bindListener(SmsListener listener) {
mListener = listener;
}
}

پارامتر intent دریافتی در واقع شامل شی PDU یا  (Protocol Data Unit)

که یک پروتکل برای انتقال پیام های SMS در مخابرات است و  ما آرایه ای از این پیام ها را دریافت می کنیم

که به وسیله سیستم به گیرنده ما ارسال می شود.

حال با استفاده از متد createFromPdu() یک شی SmsMessage ایجاد میکنیم

تا بتوانیم از طریق این شی به ارسال کننده و متن پیام درسترسی پیدا کنیم.

همانطور که در  کامنت هم گفته شده پس از دریافت ارسال کننده پیام با استفاده از متد

smsMessage.getDisplayOriginatingAddress()

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

اما در این پروژه ما محدودیتی برای پیام ها درنظر نگرفته ایم و هرپیامی که دریافت شود متن آنرا به اکتیویتی

با استفاده از متد onMessageReceive(messageBody) ارسال خواهیم کرد.

 

**اما نکته مهم این است که این کلاس را به عنوان service به manifest اضافه کنیم

 

1
2
3
4
5
<receiver android:name="com.tejariapp.messagereceive.SmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>

**همچنین مجوز های دسترسی به sms هارا نیز در manifest قرار میدهیم

1
2
3
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS" />

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

و البته مجوز runtime  هم برای دریافت و ارسال sms ایجاد کرده ایم

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.tejariapp.messagereceive;
import android.Manifest;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.util.Log;
import android.widget.TextView;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
    private static final int PERMISSION_REQUEST_CODE = 1;
    TextView mCodeView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mCodeView=findViewById(R.id.code);
        SmsReceiver.bindListener(new SmsListener() {
            @Override
            public void onMessageReceived(String messageText) {
                Log.e("Text",messageText);
                mCodeView.setText(messageText);
            }
        });
        requestPermission();
        sendFakeSms();
    }
    //send fake sms to emulator
    private void sendFakeSms(){
        Random rand = new Random();
        int  n = rand.nextInt(50) + 1;
        SmsManager sms= SmsManager.getDefault();
        sms.sendTextMessage("5554",null,
                String.valueOf(n),null,null);
        Log.e("MESSAGE BODY",String.valueOf(n));
    }
    //runtime permission
    private void requestPermission(){
            ActivityCompat.requestPermissions(MainActivity.this,new String[]{
                    Manifest.permission.SEND_SMS},PERMISSION_REQUEST_CODE);
    }
    private boolean checkPermission(){
        int result = ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.ACCESS_FINE_LOCATION);
        if (result == PackageManager.PERMISSION_GRANTED){
            return true;
        else {
            return false;
        }
    }
}

حال میتوان برنامه را روی شبیه ساز جرا کرد و خوا هیم دید هنگام اجرا یک sms که حاوی یک عدد تصادفی است به شبیه ساز ارسال

و همچنین مقدار در textView نیز قرار میگیرد.

ادامه مطلب

سورس کد فرم ثبت نام در سایت با Asp.net MVC 

سورس کد فرم ثبت نام در سایت با Asp.net MVC

سورس کد فرم ثبت نام در سایت با Asp.net MVC

سورس کد فرم ثبت نام در سایت با Asp.net MVC ، زبان طراحی وب ASP.NET MVC یکی از زبان های مطرح طراحی سایت در بین برنامه نویسان تحت وب است. به چند دلیل که یکی از مهم ترین آنها امنیت بالای این معماری است. در ادامه آموزش به علاوه سورس کد رجیستر کردن در بانک را به شما آموزش خواهیم داد.

سورس کد ثبت نام در سایت با Asp.net MVC

کدنویسی تحت وب زبان Asp.net به دلایل بسیاری بین برنامه نویسان محبوب شده ازجمله امنیت بالای این زبان!

در این بخش میخواهیم کدنویسی قسمت ثبت نام در سایت را با استفاده از این زبان و معماری MVC انجام دهیم. مشخصا اطلاعات ثبت نام کاربر باید درون بانکی قرار گیرد تا در ادامه پروژه در بخش های دیگر از جمله لاگین , بتوان از این اطلاعات استفاده کرد حال این بانک میتواند هرکدام از انواع بانک های معروف ازجمله SQL Server , Access و.. باشد که ما از پایگاه داده SQL Server استفاه میکنیم.

پس ابتدا در SQL Server یک دیتابیس با نام TestDatabase و درونش یک جدول با نام Tbl_Users ایجاد میکنیم و فیلد های زیر را برایش در نظر میگیریم(برای دریافت آموزشات کامل SQL Server به پست مربوطه مراجعه کنید)

asp-data-base

حال برنامه  Visual Studio را باز کرده  و پروژه ای جدید از نوع Asp.net ایجاد میکنیم

asp-mvc

سپس نوع پروِژه را انتخاب میکنیم که از نوع Empty و با خاصیت MVC

asp-mvc

بانک خود را با کلیک راست کردن برروی فولدر Model و انتخاب گزینه Add و سپس ADO.NET Entity Data Model به برنامه اضافه میکنیم

asp-mvc

سپس نام Model خود را انتخاب کرده و مرحله به مرحله پیش میرویم در مرحله اول نوع مدل را انتخاب میکنیم

asp-mvc

در مرحله بعد کانکشن خود را با بانک برقرار میکنیم

asp-mvc

در مرحله بعد نیز گزینه Entity Framwork 6.x را انتخاب کرده و در مرحله اخر نیز جدول یا جداول مورد نظر را انتخاب میکنیم

asp-mvc

حال خواهید دید جدول یا جداول انتخاب شده در پنجره مدل به شما نمایش داده میشود.

سپس با اعمال کردن ویژگی MetadataType به کلاس جدول اضافه شده به صورت زیر

1
[MetadataType(typeof(UserMetadata))]

یک کلاس با فیلدهای مدل ایجاد کرده و ویژگی های مورد نیازمثل Key , DisplayName و.. را به آن اضافه خواهیم کرد.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//This Attribute is for Define Primary Key
        [Key]
        public int ID { getset; }
        //this Attribute is for Define Lable for property
        [Display(Name ="نام")]
        //by this Attribute you should fill the field
        [Required(ErrorMessage ="لطفا مقدار {۰} را پر کنید")]
        public string Name { getset; }
        [Display(Name ="نام خانوادگی")]
        [Required(ErrorMessage ="لطفا مقدار {۰} را پر کنید")]
        public string Family { getset; }
        [Display(Name ="رمز عبور")]
        //by this Attribute you define type of entry property value
        [DataType(DataType.Password)]
        [Required(ErrorMessage ="لطفا مقدار {۰} را پر کنید")]
        //define minimume lenght of property value
        [MinLength(5,ErrorMessage ="رمز عبور نمیتواند کمتر از ۵ کاراکتر باشد")]
        public string Password { getset; }
        [Display(Name ="ایمیل")]
        //check email type for property value
        [EmailAddress]
        [Required(ErrorMessage ="لطفا مقدار {۰} را پر کنید")]
        public string Email { getset; }
        [Display(Name ="موبایل")]
        //check for mobile number property value
        [RegularExpression("09[0-9]{9}",ErrorMessage ="شماره موبایل معتبر نیست")]
        [Required(ErrorMessage ="لطفا مقدار {۰} را پر کنید")]
        public string Mobile { getset; }

حال زمان ایجاد یک کنترلر است. درون کنترلر ActionResult مربوط به Register را قرار میدهیم. متد Register  اول برا ارسال مقادیر مدل به متد دوم برای ذخیره سازی دربانک میباشد و متد دوم زمانی اجرا میشود که دکمه ثبت زده شود.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
TestDatabaseEntities db = new TestDatabaseEntities();
        public ActionResult Register()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Register(Tbl_Users o, HttpPostedFileBase Image)
        {
            if (!ModelState.IsValid)
                return View();
            //check Email Adress in database
            if (!db.Tbl_Users.Any(x => x.Email.ToLower().Trim() == o.Email))
            {
                //set user enter value to table field
                Tbl_Users user = new Tbl_Users()
                {
                    Name = o.Name.Trim(),
                    Family = o.Family.Trim(),
                    Email = o.Email.ToLower().Trim(),
                    Password = o.Password,
                    Mobile = o.Mobile
                };
                //add object to database
                db.Tbl_Users.Add(user);
                ViewBag.Add = true;
                //save changes in database
                db.SaveChanges();
            }
            else
            {
                //set the error text for Email object
                ModelState.AddModelError("Email""ایمیل وارد شده موجود است");
                return View();
            }
            return View();
        }

دستورات درون این متد بدین شرح است :

ابتدا مدل خود را چک میکنیم که خطایی نداشته و معتبر باشد با دستور ModelState.IsValid سپس ایمیل وارد شده را چک میکنیم که قبلا در بانک ثبت شده یا خیر که درصورت نبود ایمیل در بانک اقدام به ذخیره سازی اطلاعات کاربر میکنیم.

سپس ViewBag تعریف میکنیم تا در View برنامه بتوانیم از آن برای اطلاعات  رسانی به کاربر استفاده کنیم و در انتها نیز رکورد را Add و Save میکنیم

حال view ثبت نام را ایجاد میکنیم براساس کلاس ایجاد شده و Model تعبیه شده در برنامه

asp-mvc

خواهید دید اطلاعات ویو به صورت خودکار ایجاد میشوند به این دلیل که در مرحله ایجاد Template ویو را از نوع Create قرار دادیم پس تنها کافی است از ViewBag که ایجاد کردیم جهت اطلاع رسانی به کاربر در ویو استفاده کنیم

01
02
03
04
05
06
07
08
09
10
11
@{
    if (ViewBag.Add == true)
    {
        <div class="alert alert-success">ثبت نام با موفقیت انجام شد</div>
    }
}

حال برنامه را با Ctrl+F5 اجرا میکنیم و پس از وارد کردن اطلاعات و کلیک کردن دکمه Create نتیجه را به صورت زیر خواهید دید

asp-mvc

ادامه مطلب