My Programming Notes

Here are Notes.... come from debugging

My Programming Notes

Here are Notes.... come from debugging

سه شنبه, ۱۴ بهمن ۱۳۹۳، ۱۱:۵۶ ب.ظ

چگونه یک COPY از یک رکورد یک جدول تهیه کنیم؟

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

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

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

در مرجله بعد این داده ها را در جدول جدیدتون Insert کنید.

به کد زیر دقت کنید :


insert into NewTable(field1, field2, id_backup)
    select field1, field2, uniqueId from PreTable where uniqueId = @Id;


برای اینکه بتوانید همون داده ها را با تعییراتی وارد همون جدول خودش کنید و تغییراتی روی داده ها اعمال کنید مثل تغییر ID و یا هر چیز جدید می تونید از روش زیر استفاده کنید :


declare @newguid uniqueidentifier
select * Into TempTable from MyTable where id=@ID
set @newguid = NEWID(),Title='newtitle' 
update TempTableset ID = @newguid
insert into MyTable select * from TempTable drop table TempTable


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

موفق باشید.

جهت مطالعه بیشتر مراجعه شود به :

 How to Clone an SQL Record


 ** با تشکر از راهنمایی های همکار گرامی ام جناب آقای مهندس خانلری

۰ نظر موافقین ۱ مخالفین ۰ ۱۴ بهمن ۹۳ ، ۲۳:۵۶
سارا زکی زاده
سه شنبه, ۷ بهمن ۱۳۹۳، ۱۱:۴۷ ب.ظ

چند لینک جدید که خوندمشون!

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

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

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

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


اصول بیانیه چابک





۰ نظر موافقین ۲ مخالفین ۰ ۰۷ بهمن ۹۳ ، ۲۳:۴۷
سارا زکی زاده
چهارشنبه, ۲ مهر ۱۳۹۳، ۰۷:۰۹ ب.ظ

ًُُSQL Injection یا تزریق SQL

سر کلاس بودیم و استاد داشتند از عامل ارتباط بین لایه های مختلف نرم افزار – Data Access Layer – می گفتند.

در یک مثال ساده یک فرم لاگین (Log In) درست کردیم . در پایگاه داده هم چند یوزر با اطلاعات کامل ازشون داشتیم.

در تست اولیه با یک دید کاملا مثبت به همه چیز و همه کس یک  Username و Password معتبر را وارد کردیم و عملیات لاگین انجام شد.

در دفعه دوم یک  Username و Password غیر معتبر وارد کردیم و پیغام متناسب با آن نمایش داده شد.

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

یکی از حالت های بدی که ممکن است در وارد کردن اطلاعات چنین فرم اتفاق بیفتد یک روش هک است به نام SQL Injection  که در لغت به معنی تزریق کد SQL است.

 

 SQL Injection   یعنی :

هک برنامه از طریق وارد کردن دستورات مخرب T- SQL و وارد کردن آسیب جدی به ساختار برنامه.

        

 

۱ نظر موافقین ۴ مخالفین ۰ ۰۲ مهر ۹۳ ، ۱۹:۰۹
سارا زکی زاده

-  ارسال مستقیم ایمیل :

 * کتابخانه های Javamail_ android  رو به برنامه خود اضافه کنید .

برای رسیدن به هدفتون این سه jar رو دانلود کنید و به برناتون اضافه کنید.

*از Gmail SMTP استفاده کنید.

هر ایمیل نیاز به یک مقصد دارد.  درست است که ما یک ایمیل آدرس رو به عنوان مقصد در نظر می گیریم ولی برای ارسال آن باید ایمیل رو به یک SMTP server بفرستیم. چون ما نمی دونیم که کاربر ها در کدام شبکه هستند وقتی که برنامه ما را اجرا می کنند و همچنین پورت های gmail معمولا باز هستند و در اختیار برنامه نویسان قرار می گیرد.

متد زیر نشان می دهد که چگونه با استفاده از یک نمونه از شی javax.mail.Session  از Gmail SMTP Server استقاده کنیم:

private Session createSessionObject() {
    Properties properties = new Properties();
    properties.put("mail.smtp.auth""true");
    properties.put("mail.smtp.starttls.enable""true");
    properties.put("mail.smtp.host""smtp.gmail.com");
    properties.put("mail.smtp.port""587");
    return Session.getInstance(properties, new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);}});}

 توجه : برای username  و password  می توانید هم به صورت هارد کد وارد کنید و هم ...!

* پیغام خود رو تهیه کنید:

private Message createMessage(String email,String subject,String messageBody,Session session) throws MessagingException, UnsupportedEncodingException {
    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress("sara.zakizadeh@gmail.com",
"Sara Zakizadeh"));
    message.addRecipient(Message.RecipientType.TO,
new InternetAddress(email, email));
    message.setSubject(subject);
    message.setText(messageBody);
    return message;}

 *برای ارسال مستقیم ایمیل از AsyncTask استفاده کنید.

در اندروید، انصال به شبکه و اینترنت نباید در main thread اتفاق بیفتد. در واقع وقتی شما تلاش می کنید که این ارتباط را در main thread انجام  دهید شما با خطا زیر مواجه می شوید :

E/AndroidRuntime(673): java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example/com.example.ExampleActivity}:

android.os.NetworkOnMainThreadException

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

برای این کار من یک کلاس داخلی رو تعریف کردم:

private class SendMailTask extends AsyncTask<Message, Void, Void> {
    private ProgressDialog progressDialog;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog =ProgressDialog.show(MainActivity.this,"Please wait",
"Sending mail"truefalse);
    }
 @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        progressDialog.dismiss();}
 @Override
    protected Void doInBackground(Message... messages) {
        try {
            Transport.send(messages[0]);
        catch (MessagingException e) {
            e.printStackTrace();
        }
        return null;}}
0
این کار نه تنها ایمیل شما را در thread دیگری ارسال می کند بلکه شما می توانید در صورت تمایل یک بازخوردی از ارسال ایمیل هم به کاربر نشان دهید با استفاده از progress bar.

 * همه را یکجا سر هم کنید!

وقتی کدهای ذکر شده در بالا را به Activity  مورد نظر اضافه کردید می توانید با متد زیر ایمیلتون رو ارسال کنید.

private void sendMail(String email, String subject, String messageBody) {
    Session session = createSessionObject();
 
    try {
        Message message = createMessage(email,subject,messageBody,session);
        new SendMailTask().execute(message);
    catch (AddressException e) {
        e.printStackTrace();
    catch (MessagingException e) {
        e.printStackTrace();
    catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

}

نمونه کد در Git Hub

۰ نظر موافقین ۳ مخالفین ۰ ۲۳ تیر ۹۳ ، ۱۶:۲۹
سارا زکی زاده

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

روش اول:

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

1
2
3
4
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
            "mailto","abc@gmail.com"null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
startActivity(Intent.createChooser(emailIntent, "Send email..."));

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

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

برای موارد ذکر شده باید روش دیگری را به کار برد ؛

روش دوم در پست بعدی تشریح می شود.

۰ نظر موافقین ۳ مخالفین ۰ ۲۳ تیر ۹۳ ، ۰۱:۰۶
سارا زکی زاده
شنبه, ۶ ارديبهشت ۱۳۹۳، ۰۵:۰۴ ب.ظ

کشیدن گراف در اندروید... می شود .... نمی شود؟؟

معمولا توی برنامه هایی که کار تحلیل صورت می گیره همیشه نیاز به یک نمودار و یا گراف که بتونه به صورت گرافیک مطالب رو نشون بده حس می شه. چون فهم مطلب در این شرایط خیلی راحت تره!
ولی هر چند فهمش راحت تره برای مخاطب اما بیچاره برنامه نویس! :(  نه این که کار سختی باشه نه... یه مقداری دوشواری داره.
مثلا اگه بخواین به صورت Real Time  نمودار کشیده بشه یه ذره کار سخت تر میش ه.
یکی از کتابخانه هایی که میشه باهاش توی اندروید نمودار و چارت کشید  AChartEngin.
می تونید از اینجا دانلود کنید . و با کلیک راست بر روی پروژه و انتخاب Properties وارد پروژه کنید.

۰ نظر موافقین ۵ مخالفین ۰ ۰۶ ارديبهشت ۹۳ ، ۱۷:۰۴
سارا زکی زاده
سه شنبه, ۲۷ اسفند ۱۳۹۲، ۱۰:۵۰ ب.ظ

بقچه من از سال 92 به 93!

سال 92  داره آخرین روزاشو پشت سر می زاره.این سال خیلی زودتر از اونی که انتظارشو داشتم تموم شد.

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

                                                 

۳ نظر موافقین ۵ مخالفین ۰ ۲۷ اسفند ۹۲ ، ۲۲:۵۰
سارا زکی زاده
دوشنبه, ۲۸ بهمن ۱۳۹۲، ۰۸:۰۰ ب.ظ

دوره حیات Activity در اندروید

Activity ها یکی از مهمترین عناصر و شناخته ترین عناصر در برنامه نویسی اندروید است.
اولین گزینه ای هم که در برخورد با محیط های برنامه نویسی اندروید با آن مواجه می شوید Activity است.
شاید خیلی چیز ساده ای باشه ولی همین موضوع میتونه وظعیت شغلی شما رو در یک مصاحبه کاری عوض کنه.دیدم که میگم ... :D
۰ نظر موافقین ۳ مخالفین ۰ ۲۸ بهمن ۹۲ ، ۲۰:۰۰
سارا زکی زاده

حتما شده که به هر دلیلی صدای خودتون و یا صدای محیطی که توش هستید رو ضبط کنید .

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

در این پست می خوام توضیح بدم که چه جوری این کار رو انجام بدیم:

برای این کار از کلاس Media Recorder  استفاده می شه.

حتما باید نوع وسیله ای که قرار است باهاش صدا ضبط بشه .با چه فرمتی و کجا و...


به کد زیر دقت کنید:


private MediaRecorder mRecorder = null;
    public void startRecording() {
        if (mRecorder == null) {
            mRecorder = new MediaRecorder();
            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            mRecorder.setOutputFile(getFilename());
            try {
                mRecorder.prepare();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            mRecorder.start();  
        }
    }


جهت متوقف کردن ضبط صدا :


        public void () {

        if (mRecorder != null) {
            mRecorder.stop();
            timer.cancel();
            mRecorder.release();
            mRecorder = null;
    }
    }
جهت ذخیره فایل:

     @SuppressLint("SdCardPath")
    private String getFilename() {
         file = new File("/sdcard", "MyFile");

        if (!file.exists()) {
            file.mkdirs();
        }

        return (file.getAbsolutePath() + "/" + System.currentTimeMillis() + ".mp3");
    }
:اگر خواستید فایل ذخیره شده را حذف کنید می توانید مثل کد زیر عمل کنید
File file = new File(selectedFilePath);
boolean deleted = file.delete();

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

*** این کلاس Media Recorder می تواند جهت ذخیره فیلم هم استفاده شود.

این کد رو بنویسید ،صداتون رو ضبط کنید و لذت ببرید.


              Media Recording State




۱ نظر موافقین ۶ مخالفین ۰ ۰۸ بهمن ۹۲ ، ۲۳:۲۹
سارا زکی زاده
يكشنبه, ۶ بهمن ۱۳۹۲، ۱۱:۳۹ ب.ظ

بزرگترین اشتباهات در کار و در دوران تحصیل

به نظرم خوبه از تجربه دیگران استفاده کنیم . شاید این تجربیان زندگی ما رو تغییر بده.
به دو لینک زیر سر بزنید:




منتظر نظرات هستم.
۳ نظر موافقین ۷ مخالفین ۰ ۰۶ بهمن ۹۲ ، ۲۳:۳۹
سارا زکی زاده