اعتبار سنجی ورودی در Phoenix


#21

بازم خیلی ممنون و تشکر بابت وقتی که گذاشتی عزیز ، واقعیتش این برنامه ای که مینویسم قراره خارج از شهر کار کنه و از سرعت نت گرفته تا ماشینی که قراره روش کار کنه بقدری ضعیف هستند که دست آدم رو خیلی جاها میبندن ! کوچکترین خطا و مقدار اشتباهی در ورودی ها هم باعث میشه تمام محاسبات اشتباه از آب دربیان و برنامه از کار بیافته که متاسفانه let it crash هم جواب نمیده و تو همون زمان کوتاه ممکنه چندتا داده از دست بره و در محاسبات تاثیر بزاره ، برای همین شدیدا احتیاج دارم تمام پارامترها به نحو احسنت بررسی بشن و تمام احتمالات در نظر گرفته بشه تا احتمال خطا نزدیک به صفر بشه !
بازم خیلی ممنون از راهنمایی


#22

چرا از الیکسیر برای محاسبات استفاده میکنی؟ چون ارلنگ اصلآ در این جور کار خوب نیست
دوما اگه جلوگیری از خطا خیلی مهمه از یک زبان با تایپ ستاتیک استفاده کن


#23

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

نوع وتایپ داده ها چنان مهم نیست و دقت دستگاهها بقدری زیاده که میشه براحتی بگم احتمال خطا نزدیک به صفر هست اما چیزی که کار رو بیش از اندازه پیچیده میکنه حالت های مختلفی هستند که سنسورها بوجود میارن ، در بعضی از دستگاهها 14 تا سنسور وصل میشه و بعضی از سنسورها بنا بر موقعیت های مختلف 18 نوع عدد میفرستند که هر کدوم یه معنا و مفهومی داره و باید بررسی بشن و سریعا پیغام و دستور مناسب به سرور یا خود دستگاهها فرستاده بشه که اینها رو کانکارنسی الکسیر برام خیلی خوب حل کرد و فکر کردن به اینکه اینها رو بخوام با جاوا یا c++ بنویسم وحشتناکه ، از طرفی اگر همین کار رو با یه زبان استاتیک تایپ انجام میدادم باید دردسر تبدیل و cast و … تک تک این 18 موقعیت مختلف رو به جون میخریدم که اونم الکسیر حل کرد ، اما الان تنها دردسری که برام داره اعتبارسنجی هست که اون رو هنوز نتونستم یک راه حل خوب پیدا کنم ، برنامه هم کلا نباید از کار بیافته چرا که در اون صورت تا موقع اجرا شدن ممکنه چندتا داده از دست بره و اون وقت باید دوتا جریان موازی ایجاد کنم که یکی داده هایی رو که وقتی برنامه crash شده بود بررسی کنه و بفرسته و … و اون یکی جریانم داده هایی که از موقع کار کردن جریان دارن ذخیره میشن ، یک مدت هم تحقیق و بررسی میکنم اگر نتونم راه حلی برای کنترل این موقعیت های مختلف پیدا کنم مجبورم یه ماشین دیگه اضافه کنم که به عنوان پایگاه داده استفاده بشه و برنامه که شروع به کار کرد مستقیم بره سراغ اونها یا هم که جاهای حساس رو با c بنویسم تو الکسیر استفاده کنم ، جلوگیری از خطا خیلی مهمه اما در مورد تایپ نیست ممکنه سنسور دوتا داده بفرسته که اولی باید ذخیره بشه دومی باید در دستگاه اعمال بشه که چیزهای اینطوری کار رو سخت تر میکنن و دستگاه از کار بیافته برنامه هم از کار می افته و هنوز نتونستم زیاد روی rs232 مانور بدم و احتمالا مجبور بشم این قسمت رو با C بنویسم که این برنامه لعنتی اگر دستگاه از کار افتاد انقدر بهش نچسبه :sob::sob::sob::sob:
این کار باور کنید من رو پیر کرد، از طرفی خیلی خیلی پشیونم که قبولش کردم از طرفی باعث شد چیزهایی رو بدونم که صد سال سیاه نمیشد خودم یاد بگیرم ، تو سرگذشت کاری من یکی این کار و یکی شما و توماج عزیز و این وبسایت سهم خیلی خیلی خیلی بزرگی داشتین وگرنه مثل گذشته تو انجمن ها بر سر سریع بودن php یا asp بحث میکردم


#24

به نظرم همون تابع های کنترلر خیلی بهتره خطای خوبی هم می ده برای وب سرویس


#25

@toomaj همین الان وبسایت رو باز کرده بودم منتظر جوابت بودم :blush: :blush:


#26

فکر میکنم اگر با go یا rust این کارو پیش ببری زودتر به نتیجه برسی.
گزینه هایی مثل هسکل هم وجود داره اما اگر من بودم از rust استفاده میکردم.
در rust میتونی از diesel استفاده کنی.


#27

Static تایپ معنیش این نیست که حتما باید تایپ ها رو تعریف یا کست کنی، crystal هم استتیکه


#28

اصلا میتونی از crystal هم استفاده کنی، فکر نمیکنم به مشکل بخوری، یعنی این پروژه از amber بزرگتره؟


#29

در این مورد کلی تحقیق کردم و با توجه به کانکارنسی الکسیر بهترین گزینه موجود برای من هست ، Rustحداقل یک ماه زمان میخواد تا من به مهارتی برسم که بتونم همچین پروژه ای رو شروع کنم تازه اونم اگر خوب دستم بیافته و باهمه پیچ و خمش آشنا بشم


#30

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


#31

بخدا این کار رو هم خیلی خیلی دوست دارم بکنم مخصوصا که خروجی یه فایل باینری با حجم خیلی کم میده و c-binding بیش از اندازه در کریستال راحته اما مواردی هستند که مجبورم میکنن در مورد کریستال فعلا فقط به برنامه دوسه تا دستگاه ساده و … بسنده کنم و زیاد خیال پردازی نکنم باهاش


#32

باز هم بر میگردیم سر بحث اول، برای اعتبار سنجی از Ecto یا CargoSense استفاده کنی بهتره، چون این کار رو درست انجام میدن و مشکلات زیادی از روی دوشت برداشته میشه، بنظر من استفاده از روشی غیر از این بی مورده


#33

چه مواردی؟


#34

اگر اشتباه نکنم رم ماشینی که برنامه روشه نهایتش 30 یا چهل مگابایته و الان بحث من با شما سر اون چند خورده ای مگابایت مونده هست ، از طرفی با تعداد بالایی پورت در ارتباطه و … کلی چیز دیگه که همین الان پدرشم درمیاد کار میکنه ، حافظه دستگاه هم که بماند فعلا نهایت کاری که تونستیم بکنیم استفاده از چیزی شبیه پایگاه داده هست که تا فوقش میتونم 20 و خورده ای مگابایت داده داخلش ذخیره کنم ، با این موقعیت من چجوری به این چیز دیگه اضافه کنم ؟ کوچترین تغییری در برنامه یعنی تغییر در ماشین ها و به هیچ وجه قبول نمیکنن کلی هزینه بکنن و تک تک ایستگاه ها رو بروز رسانی کنند


#35

پس بنظر نمیاد الیکسر در کل گزینه شما باشه، باید از یک زبان با قابلیت سیستمی استفاده کنی، مثل rust, lua, go و غیره


#36

یکی از مواردش اینه که هنوز برای ویندوز هیچی نکردن و یا باید لینوکس استفاده کرد یا ویندوز ده که که این کار شدنی نیست البته نه برای خودم بلکه برای بقیه و جایی که کار میکنم ، مورد دوم اینه که هنوز در پروداکشن نیست و زبون جووونیه ، فردا پس فردا مشکلی داشته باشم چیزی به نام گوگل در مورد این زبان جواب نمیده و کلی وقتم میره تا بتونم ایرادها رو رفع کنم ، کتابخونه براش کمه و هرجا به مشکل برخوردم باید یه زمان دیگه اضافه کنم دوباره کتابخونه بنویسم و … زیاد فکر کردم این زبان فعلا مناسب نیست و نهایتش بخاطر علاقه کد یه دستگاه ساده رو باهاش میزنم


#37

یعنی اون سیستم با ۳۰ مگ رم تحت ویندوزه؟ بنظر من کلا این پروژه رو بزار کنار


#38

یعنی الان من چون از اکتو نمیتونم استفاده کنم پس الکسیر برای پروژه من مناسب نیست ؟ :disappointed_relieved::disappointed_relieved::disappointed_relieved: من فقط خواستم یک کد نمونه بزنید نگاه کنم ببینم کارم چقدر خوبه ! دلسردم نکنید بخدا همین کار رو با جاوا یا سی یا حتی گو میکردم اشک منو در می آوردن ، برای مثال یه دستگاه آلمانی که داریم 11 تا دستگاه مثل خودش بهش وصل میشن ، هر دستگاه دوتا کانال داره که به هر کانال یه سنسور وصل میشه ،این سنسورها بنا بر تنظیمات کاربر میتونن از یک ثانیه به یک ثانیه تا … داده ذخیره بکنن ولی اکثرا روی 4 و هفت ثانیه تنظیم میشن ، ممکنه بعضی از سنسورها از دو ثانیه دوثانیه بفرستن بعضی های دیگه از 7 هفت ثانیه به ثانیه و …
یعنی 24 تا جریان هست با زمان بندی مختلف ( بعضی وقت ها تمام 24 کانال هم روی 4 ثانیه ست میشه) ، داده های همه سنسور ها هم متفاوته تازه خودشون نمیتونن با دستگاه ارتباط داشته باشن و کد متناسب رو میفرستن باید با توجه به پروتوکل تنظیمات مختلف رو اعمال کنی ، قبلا این برنامه رو با جاوا نوشته بودم و موی سر منو سفید کرد اما تو الکسیر کارم خیلی راحتتر شده ، فقط تعداد موقعیت ها خیلی خیلی بالا میشه که اونو هنو نمیدونم چیکار کنم ، فرضا 24 تا سنسور ، هر سنسور یک عدد میفرسته و هر عدد ممکنه یکی از اعداد داخل لیست باشه یا چیز دیگه و … که اینها واقعا منو سر درگم کردن وگرنه مشکل خاصی نداشتم تا بحال و به اسونی حل کردم ، از شما هم کمک خواستم تا بدونم در چنین مواردی اگر اکتو و… نباشه چجوری اعتبار سنجی میکنید که اونم میگید بدون اکتو الکسیر یا phoenix بدردی نمیخوره :disappointed_relieved:


#39

:rofl::rofl::rofl::rofl::rofl::rofl::rofl::rofl::rofl::rofl::rofl::rofl::rofl: بخدا مردم از خنده ، فقط قسمت بد ماجرا اینه که فعلا تنها نیروی کار در مورد این چیزا منم و میترسن برم برای همین هرکاری بکنم اول باید تو ویندوز بکنم ببینن یاد بگیرن سورس رو کامپایل کنن تو دستگاه اجرا کنن بعد … ، بعد این ماشین های صنعتی که میگیرن که متاسفانه کمپانی سازنده اینها فقط برای ویندوز برنامه داده بیرون :zipper_mouth_face: و بعد از نصب برنامه دستگاه یه درایوری باز میشه برنامه رو ی میکنی اجرا میشه و هرچی که داخلش کپی بشه نمیشه دوباره بیرونش آورد و من در اون حد مغز متفکر و نابغه نیستم بتونم نسخه لینوکسی اون رو بنویسم تا بشه از لینوکس هم با دستگاه ارتباط برقرار کرد ، تازه تو خود همین ویندوزی هم همیشه دستم روی Ctrl+Alt+Del هست و از هر دوسه بار یکبار دستگاه هنگ میکنه و باید خاموش روشنش بکنم :joy::joy: بخدا یه داستانی هست برا خودش که اشک منو درآورده ، نمیدونم از رزبریپای از آردینو از چی استفاده کردن ولی واقعا دستگاه مزخرفیه ، قبلا مودم tc65i بود که با کلی جلسه و بحث و… قانع شدن ارتقا بدن وگرنه اون یک مگابایت رمش بود از اینم مزخرف تر بود و الان اگر حرف از ارتقا بزنم منو میکشن :disappointed_relieved:


#40

خیر, BeamVM برای 30 مگ رم مناسب نیست, البته حداقل رم برای بیم 16 اما زیر 64 توصیه نمیشه.
لازم نیست اصلا از Phoenix استفاده کنی.

http://erlang.org/faq/implementations.html