بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

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

مدیریت گفتگو
uncocoder 12 سال پیش
آخرین تغییر: 9 سال پیش

به یک جواب کامل و بدون نقص 4000 امتیاز اهدا میشه ( هدف امتیاز نیست بلکه افزایش دانش دوستان از جمله خود نویسنده کلاس است و امتیاز بهانه )

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

 

سوژه مسابقه

یک کلاس کامل برای ارتباط به وب سرویس با امکانات زیر:

  • ارسال درخواست با پارامترهای دلخواه به سرور ( راهنمایی: ارسال JSON مفید است ). 300 امتیاز
  • تعبیه یک onReceiveListener که پس از دریافت پاسخ فراخوانی شود. 200 امتیاز
  • سورس کد سمت سرور ( می تواند ساده و کار راه انداز باشد، اما باید باشد ) 200 امتیاز
  • ذخیره کردن پاسخ سرور ( Cache کردن پاسخ ) و بازیابی آن. 1300 امتیاز
  • Cache دارای زمان Expire باشد و اگر از لحظه ذخیره آن مدت قابل تنظیمی گذشته بود، معتبر نباشد و دوباره از اینترنت درخواست شود. 500 امتیاز
  • استفاده از Builder Design Pattern برای تعریف متدها ، تنظیمات و ... 1000 امتیاز
  • تمیز بودن کد بر اساس Sun Java Convention & Naming و اصولی بودن ساختار 500 امتیاز

 

شرایط و نحوه مسابقه

  • معیار امتیاز دهی نسبی است ( ممکن است از هر قابلیت کد نویسی شده، امتیاز کامل دریافت نشود ).
  • هیچ مدت زمانی برای این کار در نظر گرفته نشده و هر کس می تواند سورس خود را در هر زمانی ارسال کند.
  • چنانچه بیش از یک جواب از طرف هر کاربر ثبت شود، جوابهای آخر حذف خواهند شد ( تنها جواب اول معیار است )
  • قابلیت تصحیح جواب مطمئناً وجود دارد، پس جواب خود را تصحیح کنید بجای اینکه جواب جدید بگذارید.
  • نظرات دوستان شما در جواب شما می تواند به امتیاز شما کمک کند.
  • تعداد رأی های دوستان شما در امتیاز شما می تواند مفید باشد.
  • همه می توانند نسبت به جوابی که ارائه داده اند، امتیاز کسب کنند.
  • مسابقه همیشه یک برنده ندارد، بلکه بعضی از بعضی دیگر سبقت می گیرند. بنابراین همه نسبت به دانش و تلاش خود امتیاز کسب می کنند.
  • برندگان مسابقه در صفحه دیگری از سایت که در آینده ایجاد خواهد شد، معرفی می شوند پس بیشتر در دید قرار می گیرند.
  • چنانچه نیاز به راهنمایی یا سرنخ بود، مجاز است زیر جواب خودتان بپرسید، راهنمایی خواهم کرد. نمره منفی هم ندارد.
  • پاسخ ارائه شده می تواند توسط دوستان در پروژه های تجاری مورد استفاده قرار گیرد.
  • این سئوال ویژه است پس تنها کاربران ویژه پاسخ ها را خواهند دید.
  • مطمئناً سورس های بی کیفیت و سهل انگارانه، حتی از حداقل امتیاز برخوردار نیستند و چنانچه آپدیت نشوند، از لیست پاسخ ها حذف خواهند شد.

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

پیشنهاد، انتقاد و ... از این مسابقه را، فقط و فقط در قسمت نظر همین سئوال ( نه جواب ها ) و نه درج جواب جدید، ثبت کنید.

نظرات

konect 12 سال پیش
سلام این کارتون عالیه. ولی ما که هنوز به اون مرحله نرسیدیم. اما از این کار حمایت میکنیم.
نورحسینی 12 سال پیش
خیلی عالیه عالی!!!! ممنون این کار ها ضامن بقاست
sadeghbarout 12 سال پیش
استاد اگه اینجا جواب ها درج بشه که ممکنه بقیه کپی کنن یا یه قسمت کار خلاقانه ای باشه که طرف 2 ساعت روش فکر کرده تا بهش رسیده واینجا بذاره بقیه با 30 ثانیه بهش میرسن! جوابها براتون ایمیل بشه بهتر نیست؟
Spirit 12 سال پیش
ضمن حمایت از نظر جناب sadeghbarout ، استاد یعنی یه کلاس جاوا واقعا؟ برنامه اندروید نه؟
مجتبی یگانه 12 سال پیش
ساختار Listener رو پیدا نکردم ، یادمه استاد یه جایی توضیح میداد ، میگفت ببینید دقیقا مثل alertdialog و.. ، چیزی یه الان میخوام ساختار تعریف listener هست یا اینکه استاد دقیقا کجا توضیح دادن یادمه تو لیست ویو یه اشاره ای کردن ولی هرچی گشتم پیدا نکردم:|
sadeghbarout 12 سال پیش
استاد منظورتون از این عبارت چیه دقیقا؟"ذخیره کردن پاسخ سرور ( Cache کردن پاسخ ) و بازیابی آن." . یعنی اگه این مقادیرو یه بار قبلا فرستاده بود ، بدون فرستادن دوباره مقادیر به سرور ، جواب قبلی سرور رو برگردونه؟ میشه این قسمتو به صورت خلاقانه نوشت یا حتما باید از خاصیت cache خود کلاسهای اندروید استفاده کرد؟
مجتبی یگانه 12 سال پیش
صادق جان چیزی گه تو ذهن منه همون یه فیلد تایم هست ، که اگه از الان مثلا 10 ثانیه گذشته بود دوباره بگیر وگرنه جواب موجود در دیتابیس رو برگردون -- یادت میاد استاد بیلدر و listener رو کجا توضیح دادند ؟ :|
sadeghbarout 12 سال پیش
builder رو که یادم نیست توضیح داده باشن ولی listener رو که توی همون مبحث interface ها توضیح دادن بخش 3-8. اگه تو مباحث استاد builder رو پیدا کردی یه خبری هم به ما بده ;)
Smsbaz 12 سال پیش
ما که فعلا جا موندیم :(
uncocoder 12 سال پیش
در خصوص ایده موافق هستم، به ایمیل که نمیشه ارسال کرد چون خیلی برای من چک کردنش سخته. پس یک قانون جدید می ذاریم. هنوز دارم بهش فکر می کنم، شما فعلاً کد ها رو بنویسید، بزودی میگم چی کار کنیم.
uncocoder 12 سال پیش
در خصوص جاوا بودن، بله دقیقاً جاوا است. هیچ ربطی هم به اندروید ندارد. پس سعی کنید کلاسی مستقل از پکیج ها اندروید بنویسید. اما کلاسهایی که می تونن نتایج رو نشون میدن، می تونه اندرویدی هم باشه. اما کلاس اصلی مستقل از اندروید است.
uncocoder 12 سال پیش
شما می تونید نتیجه وب سرویس رو به همراه زمان دریافتش در فایلی ذخیره کنید و از روش دوباره بازیابی کنید. این میشه همون Cache
مجتبی یگانه 12 سال پیش
استاد هیچکدوم از نظرات این تاپیک تو پیامهای من نیومد ، هرچند من ، مشترگ هستم :|
مجتبی یگانه 12 سال پیش
MAH230 هیچ کس جانمونده ، اول این که محدودیت زمانی نداره ، دوم من هم هنوز شروع نکردم ، فقط یه نگاهی انداختم
Morteza 12 سال پیش
با تشکر از شما استاد گرامی......خیلی ایده جالبی هست.....فقط لطفا محدودیت زمانی نزارید چون واقعا بعضی ها وقت آزادشون کمه
مجتبی یگانه 12 سال پیش
در مورد دوم ذکر شده دیگه "هیچ مدت زمانی برای این کار در نظر گرفته نشده و هر کس می تواند سورس خود را در هر زمانی ارسال کند."
sadeghbarout 12 سال پیش
استاد حالا که دارید بهش فکر میکنید و میگید با ایمیل سخته ، یه صفحه توی سایت درست کنید که فقط هرکس بتونه جواب خودش رو ببینه و ویرایش کنه وفقط شما بتونید همه پاسخ ها رو ببینید. میدونم ممکنه براتون یکم وقت گیر باشه همچین چیزی به سایت اضافه کنید ولی ظاهرا این آخرین مسابقه تون نیست. پس فکر کنم ارزششو داره.
سامان پاپی 12 سال پیش
خیلی خیلی عالیه فقط موجب از بین رفتن تمام اعتماد به نفسم شد :(
Spirit 11 سال پیش
یادش بخیر اون موقع چِقَدَر خنگ بودم نتونستم این کلاس ساده رو بنویسم :| گذشت زمان چه ها که نمیکنه، امیدورام تو سایت جدید بازم از اینا داشته باشیم تا یک سال بعدش بیام یه همیچین کامنتی رو بنویسم D:
Hadi 11 سال پیش
دوستان جواب این مسابقه رو استاد تو کدوم آموزش گفته؟ میخوام ببینم json رو چطور فرستادن
کاشی زاده 11 سال پیش
آموزش ماژول وب سرویس رو مطالعه کنید ، جز قسمت های جدید در آموزش ها هست.
Dolphin Tech 9 سال پیش
یه سوال! الان با وجود کتابخانه ای مثل volley آیا نیازی به نوشتن همچین ماژولی هست ؟ آیا خیلی از کارهایی که استاد تو آموزش وب سرویس گفتن، رو این کتابخونه برا ما هندل نمیکنه ؟! (مثل onResponse و onErrorResponse و setRetryPolicy و ... )
uncocoder 9 سال پیش
تا زمانی که می شود کد خودمون رو بنویسیم و به بهترین نحو کار کنه، هیچ نیازی به نصب کتابخانه نیست. توجه داشته باشیم که در برنامه نویسی آماتور و غیر حرفه ای ( و ماژول بندی ) ، استفاده از کتابخانه اولین گزینه و نوشتن آن توسط برنامه نویس آخرین گزینه است. اما در برنامه نویسی حرفه ای و اصولی نوشتن کد توسط برنامه نویسی بهترین شیوه و استفاده از کتابخانه ها آخرین گزینه ( و راه ناچاری ) است. البته گاهاً مشاهده می شود برخی برنامه نویسان به ظاهر حرفه ای برعکس این موضوع را اعتقاد دارند.

پاسخ‌ها 5

مجتبی یگانه 12 سال پیش

دیدم دوستان با دیزاین پترن بیلدر مشکل دارن گفتم یکم راهنمایی شون کنم ، البته از یکم بیشتره ، تقریبا 1000 امتیاز :)) 

فقط یک کلاس جاواست ، به اندروید ربطی نداره ، 

new java project > 
create a new class in defaultpackage "WebService.java"

حالا سورس زیر رو past کنید تو کلاس و پکیح رو run as java application کنید و کنسول رو ببینید 

اساتید اگر درست پیدا نکردم اطلاع بدید :)

class Runner {

    public static void main(String args[]) {
        WebService myWebService = new WebService.Builder()
                .SetFirstName("Mojtaba")
                .SetLastName("Yeganeh")
                .build();
        System.out.print(myWebService.toString());
    }
}


public class WebService {

    private String FirstName;
    private String LastName;


    private WebService(Builder builder) {
        this.FirstName = builder.FirstName;
        this.LastName = builder.LastName;
    }


    @Override
    public String toString() {
        return FirstName + " " + LastName;
    }


    public static class Builder {

        private String FirstName;
        private String LastName;


        public Builder SetFirstName(String InputFirstName) {
            this.FirstName = InputFirstName;
            return this;
        }


        public Builder SetLastName(String InputLastName) {
            this.LastName = InputLastName;
            return this;
        }


        public WebService build() {
            return new WebService(this);
        }
    }

}

نظرات

sadeghbarout 12 سال پیش
من تو اینترنت گشتم و تقریبا همچین ساختاری نوشتم ولی نمیدونم چرا موقع usage یه خطای خاصی میداد( بدون اینکه compile) کنم) و هیچ راه fix ی هم ارائه نمیداد! حالا امشب باید دوباره تستش کنم. ولی کاش اینجا نمیذاشتی کد رو.فوقش راهنمایی متنی میکردی . بابا ناسلامتی مسابقه است . اگه من نتونم با سرچ و تست کردن به جواب برسم خوب حقمم نیست امتیازی بگیرم.
مجتبی یگانه 12 سال پیش
صادق جان من تک خور نیستم :| ، مفت چنگتون :) ، اگه شما میخواید خودت دنبالش بری ، لزومی نداره سورس من رو ببینی ، ولی خوب من گذاشتیم که بقیه هم انگیزه داشته باشن ، ولی موضوع اینه این سورس کامل نیست ، جای کار داره
sadeghbarout 12 سال پیش
والا منم تک خور نیستم ولی بحث یادگیری با بحث مسابقه 2 چیز جداست. اگه تک خور بودم اصلا توی این فروم فعالیتی نمیکردم و اگه چیزی رو بلد بودم به کسی نمیگفتم ولی میبینی که اگه چیزی بلد باشم از کسی دریغ نمیکنم. ولی مسابقه یعنی اینکه ببینیم کی چندمرده حلاجه؟ کی چقدر چیز یاد گرفته. وگرنه من مخلص بچه ها هم هستم.
مجتبی یگانه 12 سال پیش
"چنانچه نیاز به راهنمایی یا سرنخ بود، مجاز است زیر جواب خودتان بپرسید، راهنمایی خواهم کرد. نمره منفی هم ندارد." من بیشتر رو حساب این حرف استاد بود که این رو گذاشتم ، اینم مثل اینه که من که تاپیک بسازم و بگم نحوه ی کار دیزاین پترن بیلدر ، و از نظر خودم مشکلی نداره ، اگر استاد صلاح ندونستن پاکش میکنم :| ، گفتم هدف من انگیزه ی بیشتر برای ادامه ی کار بود ، چون از نظرات معلومه که خیلی ها میگن ما تو این سطح نیستیم ، بلد نیستم ، شروع نکردم ، بعدا و ... ! ، به هرحال ممنون که وقت میزارید ، من خودم خیلی چیزا از شما یاد گرفتم ، تشکر
sadeghbarout 12 سال پیش
از نظر من سرنخ یا راهنمایی همون توضیحات میشه نه کد گذاشتن ولی هرجور مایلی.ولش کنیم دیگه کشش ندیم. سرت سلامت ;) . منم از شما ممنونم که تو این فروم وقت گذاشتی و میذاری و مشخصا منم از شما خیلی چیزا یاد گرفتم و بخاطرش ممنونم :)
sadeghbarout 12 سال پیش

استاد من کلاسو نوشتم. ولي در قالب 3 فايل جاوا شده. 

کاملا با پکيج هاي java نوشته شده . با قابليت cache کردن و بازيابي آن و داراي زمان expire براي cache. داراي ساختار built pattern و قابليت ارسال namedValue ،JSON و String.

البته چون نميشه از پکيج  org.json استفاده کرد پس نميشه يه شي JSON ارسال کرد و تنها راه ، ارسال يه String ه که متنش يه JSON باشه . اگه اين مد نظرتون نيست لطفا  پکيجي از جاوا که توش شي JSON داره معرفي کنيد.

درضمن يه onRecieveListener هم نوشتم براش (البته ناقصه) ولي نميدونم همون چيزي هست که مد نظرتونه يا نه. لطفا در این باره راهنماییم کنید.

حالا براتون ايميلش کردم . اگه بعدا تصميم گرفتيد که بايد اينجا يا هرجاي ديگه بذارمش هم ، چشم. 

ممنون

نظرات

uncocoder 12 سال پیش

امتیاز مسابقه تخصیص داده شد.

بزودی آموزش کلاس وب سرویس بصورت ویدئویی تدوین می شود.

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

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

نظرات

Dadparvar 12 سال پیش
بسیار ایده جالب و موجب پیشرفتی هستش. اما برای امثال بنده که فعلا در سطح مبتدی هستند کمی سخت هست (امیدوارم با مشاهده ویدئوها به سطحی مطلوب جهت شرکت در مسابقات بعدی برسم.محرک خوبی برای ارتقا سطح دانش هست)
Astro 12 سال پیش
خسته نباشید استاد این آموزش که فرمودید در تدوین های سری جدید که براش تاپیک زده شده هست؟
uncocoder 12 سال پیش
بله، پاسخ مسابقه رو در سری جدید تدوین به شکل ویدئو ارائه می دم.
MeY3am 12 سال پیش
ممنون استاد عزیز
حجت  12 سال پیش

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

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

 لازم به ذکر است که یکسری اطلاعات رو برای ورود به برنامه از هاست دریافت میکنه.

 

نظرات

مجتبی یگانه 12 سال پیش
چون باید شرایط مسابقه برای همه یکسان باشه فکر نکنم !
ebham33 10 سال پیش

با سلام

من  ماژول وب سرویس توسط استاد رو دیدم یه نکته و مشکل اساسی از دید من که تو کدها بود عرض کنم اگه برداشتم اشتباهه اصلاحش کنید.

استاد در کلاس تست تاریخ انقاضی کش را بصورت ثانیه می دهد.(نه میلی ثانیه).

  .cacheExpireTime(30)

در کلاس وب سرویس هم به همان صورت ذخیره میکند.

  outputStream.writeLong(when);

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

cacheExpireTime*1000  میشود میلی ثانیه، now بصورت میلی ثانیه خوانده میشود . اما when بصورت ثانیه می باشد.

 long when = inputStream.readLong();
            long now = System.currentTimeMillis();
            if (now - when > cacheExpireTime * 1000) {
                new File(cacheDir + "/cache.dat").delete();
                return null;
            }

نظرات

ebham33 10 سال پیش
اگر تو منظور اشتباهی هست اصلاحش کنید چون بنظرم کد مربوط به تاریخ انقضای کش درست نیست.
کاشی زاده 10 سال پیش
cacheExpireTime مربوط به زمان باطل شدن کش هست که در کلاس مربوطه تبدیل به میلی ثانیه شده همونطور که اشاره کردید when زمان ایجاد کش هست که از ابتدا توسط جاوا با دستور System.currentTimemillies به میلی ثانیه گرفته شده و خطایی در کد استاد وجود ندارد ، اگر یکبار دیگر با دقت بیشتر ویدئو را مطالعه کنید متوجه مسئله خواهید شد .
ebham33 10 سال پیش
متشکرم درست است ویدیو را کامل مشاهده نکرده بودم بعد از تماشا به اشتباه خودم پی بردم بازم ممنونم

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .