اذهب إلى المحتوى

Wael Aljamal

الأعضاء
  • المساهمات

    6975
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    218

كل منشورات العضو Wael Aljamal

  1. عليك فهم السلسلة النصية كترميز من المعلومات، كل محرف فيها يمثل معلومة، لاختصار طول السلسلة يمكن أن تقوم بإعادة ترميز للمحارف فقط، وهي عملية ضغط النص. لا يمكن احتواء نفس المعلومات ضمن سلسلة نصية أخرى أقصر بدون عمل ضغط و فك ضغط لمنع خسارة المعلومات. وفي حال قمت بترميز نص طوله 15 كنص طوله 4 سيحدث تصادم collision أي نفس النص القصير سوف يرمز لنصين أو أكثر من الطويل الأبجدية لديك فيها حرف وهو B مثلاً ، فلا يمكن توسيعها لعدم وجود محارف غير أرقام وحروف أي base 64. محاولة أخرى، جرب عمل القصر ل 36 محرف SELECT cast(column as char(36)) as char36
  2. الأمر يتكون من جزأين، إضافة timestamp طابع زمني لكل منتج في قاعدة البيانات، يمثل تاريخ الإضافة و الذي سوف نحسب منه الوقت تتم هذه إما من قاعدة البيانات أو من خلال PHP تضيف الوقت الفعلي للسيفر عند إضافة منشور حساب الفرق بين الوقت الحالي ووقت إضافة المنتج ومن ثم تحويله لنص سهل القراءة يمكن عمله في BackEnd قبل إعادة بيانات المنتج (مستحسن) أو حسابه في التطبيق ( هنا ربما المنطقة الزمنية لساعة هاتف مستخدم التطبيق ستعطي وقت غير متوافق مع الخادم وبالتالي خطأ في الحساب) يمكنك استخدام مكتبة carbon فهي مكتبة قوية تدعم تعدد اللغات وسوف نستخدم دالة diffForHumans التي تعيد الوقت المنقضي بتنسيق قابل للقراءة البشرية بسهولة <?php $date = Carbon::now()->locale('ar'); echo $date->diffForHumans(); يمكنك مراجعة التوثيق لمزيد من المعلومات كما يمكن حساب الفرق بين توقيتين، ثم عمل منطق بسيط لحساب الأشهر - الساعات .. <?php // دالة تستقبل الفرق بين وقتين function format_interval(DateInterval $interval) { // بناء الوقت كنص $result = ""; // كل متغير له قيمة نضيفه مع واحدته الزمنية if ($interval->y) { $result .= $interval->format("%y years "); } if ($interval->m) { $result .= $interval->format("%m months "); } if ($interval->d) { $result .= $interval->format("%d days "); } if ($interval->h) { $result .= $interval->format("%h hours "); } if ($interval->i) { $result .= $interval->format("%i minutes "); } if ($interval->s) { $result .= $interval->format("%s seconds "); } return $result; } // حساب تاريخين $first_date = new DateTime("2012-11-30 17:03:30"); $second_date = new DateTime("2012-12-21 00:00:00"); // حساب الفرق بين التاريخين $difference = $first_date->diff($second_date); // طباعة الوقت المنقضي echo format_interval($difference); الاستخدام، تجلب وقت إضافة المنتج لقاعدة البيانات أو الحقل الذي يمثل القيمة الزمنية التي تريدها ولنفترض أن اسمه هو created_at. تطرح الوقت الفعلي من created_at ثم تمرره للدالة formate_interval مثال مع كاربون: $carbondate = Carbon::parse($post->created_at); $past = $carbondate->diffForHumans(); echo($past); مقالة:
  3. كيف تتعرف على اللغة و تبدل بين التنسيقات؟ حاول ضبط الإتجاه بالشكل التالي: success: function(data) { $('.shown').html(data); $('.shown').attr("dir", "rtl"); }
  4. في حال لم يتوفر ترجمة API للغة مهينة، يمكن التواصل مع جهة رسمية لتزودك بالأسماء أو تقوم بالبحث بنفسك أو تستعين بمهارات برمجية و تجربك حلول بنفسك.. حاولت مساعدتك، قمت بعمل برنامج web scraping بلغة بايثون، يعتمد على ويكيبيديا، يجلب قائمة المدن السعودية، ثم يفتح الصفحة الخاصة لكل مدينة ويجلب الاسم العربي لها، بعض المدن تحتاج لتعديل مكتوب جانبها غير متوفر.. 17 من 128 يمكنك إكمالهم المدن: { "Abha": "أَبْهَا", "Asir": "عَسِيرٌ", "Ad-Dilam": "غير متوفر", "Al-Abwa": "ٱلْأَبْوَاء", "Al Artaweeiyah": "الأرطاوية", "Al Bukayriyah": "غير متوفر", "Badr (city)": "بَـدْر", "Baljurashi": "بَـلْـجُـرَشِي", "Bisha": "بيشة", "Bareq": "بارق", "Buraydah": "بريدة", "Al Qasim": "منطقة القصيم", "Al Bahah": "ٱلْبَاحَة", "Al Bahah Province": "ٱلْبَاحَة", "Ha'il Province": "مِنْطَقَة حَائِل", "Dammam": "الدمّام", "Persian Gulf": "اَلْخَلِيْجُ ٱلْعَرَبِيُّ", "Eastern Province, Saudi Arabia": "المنطقة الشرقية", "Dhahran": "الظهران", "Dhurma": "ضرما", "Dahaban": "ذهبان", "Diriyah": "الدرعية", "First Saudi State": "الدولة السعودية الأولى", "Duba, Saudi Arabia": "ضبا", "Dumat Al-Jandal": "دُومَة ٱلْجَنْدَل", "Dawadmi": "الدوادمي", "Farasan (city)": "فرسان", "Gerrha": "جرهاء", "Ghawiyah": "غير متوفر", "Jizan": "جازان", "Al-Gwei'iyyah": "القويعية", "Hautat Sudair": "حوطة سدير", "Sudair": "سدير", "Hajrah": "الحجرة", "Haql": "مَدِيْنَة حَقْل", "Al-Hareeq": "الحريق", "Harmah": "حَرْمَة", "Ha'il": "حَائِل", "Hotat Bani Tamim": "حوطة بني تميم", "Hofuf": "ٱلْهُفُوف", "Huraymila": "غير متوفر", "Hafr Al-Batin": "حفر الباطن", "Jabal Umm al Ru'us": "جبل أم الرؤوس", "Jalajil": "غير متوفر", "Jeddah": "جِدَّة", "Red Sea": "البحر الأحمر", "Jizan Province": "جيزان", "Jazan Economic City": "مدينة جيزان الاقتصادية", "Jubail": "الجبيل", "Khafji": "رأس الخفجي", "Saudi Arabia": "ٱلْمَمْلَكَة ٱلْعَرَبِيَّة ٱلسُّعُوْدِيَّة", "Kuwait": "دولة الكويت", "Khaybar": "خَيْبَر", "King Abdullah Economic City": "مدينة الملك عبدالله الإقتصادية", "Khamis Mushait": "خميس مشيط", "Al-Saih": "الخرج", "Knowledge Economic City, Medina": "غير متوفر", "Khobar": "ٱلْخُبَر", "Al-Khutt": "غير متوفر", "Layla (town)": "لیلى", "Lihyan": "مملكة لحيان", "Al Lith": "الليث", "Al Majma'ah": "المجمعة", "Mastoorah": "غير متوفر", "Al-Mubarraz": "غير متوفر", "Medina": "مدينة النبي", "Islam": "الإسلام", "Al Madinah": "مدينة النبي", "Mecca": "العاصمة المقدسة", "Makkah Province": "مِنْطَقَة مَكَّة", "Muzahmiyya": "المزاحمية", "Najran": "نجران", "Najran Province": "نجران", "Al-Namas": "النماص", "Umluj": "أملج", "Al-Omran": "ٱلْحَسَا", "Al-Oyoon": "ٱلْحَسَا", "Qadeimah": "غير متوفر", "Qatif": "ٱلْقَطِيف", "Qaisumah": "القيصومة", "Al Qunfudhah": "القنفذة", "Qurayyat, Saudi Arabia": "القريات", "Al Jawf Province": "منطقة الجوف", "Rabigh": "رَابِغ", "Rafha": "رفحاء", "Ar Rass": "الرس", "Ras Tanura": "رأس تنورة", "Ranyah": "رنية", "Riyadh": "الرياض", "Ar Riyad Province": "منطقة الرياض", "Second Saudi State": "الدولة السعودية الثانية", "Rumailah, Saudi Arabia": "غير متوفر", "Al-Ahsa Governorate": "ٱلْحَسَا", "Sarat Abidah": "غير متوفر", "Saihat": "سيهات", "Safwa city": "صفوى", "Sakakah": "سَكَاكَا", "Sharurah": "شرورة", "Shaqraa": "شقراء", "Shaybah": "غير متوفر", "As Sulayyil": "السليل", "Taif": "الطائف", "Tabuk, Saudi Arabia": "تَبُوْك", "Tabuk Province": "مِنْطَقَة تَبُوْك", "Tanomah": "تنومة", "Tarout": "جزيرة تاروت", "Tayma": "تيماء", "Thadiq": "ثادق", "Thuwal": "ثُوَل", "Ath Thuqbah": "الثقبة", "Turaif": "طريف", "Tabarjal": "غير متوفر", "Udhailiyah": "غير متوفر", "Al-'Ula": "ٱلْعُلَا", "Um Al-Sahek": "غير متوفر", "Unaizah": "عنيزة", "Al-Qassim Province": "منطقة القصيم", "Uqair": "غير متوفر", "Uyayna": "العيينة", "Uyun AlJiwa": "محافظة عيون الجواء", "Wadi Al-Dawasir": "وادي الدواسر", "Najd": "نَجْدٌ", "Al Wajh": "الوجه", "Yanbu": "ينبع", "Al Madinah Province": "ٱلْمَدِيْنَة ٱلْمُنَوَّرَة", "Az Zaimah": "الزيمة", "Zulfi": "محافظة الزلفي", "Riyadh Province": "منطقة الرياض" } شيفرة بايثون: # import required modules from bs4 import BeautifulSoup import requests import json # get URL page = requests.get( "https://en.wikipedia.org/wiki/List_of_cities_and_towns_in_Saudi_Arabia") # scrape webpage soup = BeautifulSoup(page.content, 'html.parser') # create object cities_links = soup.table.find_all('a') # قاموس بأسماء المدن و ترجمتها dictionary = {} for city_link in cities_links: city_name = city_link.get('title') city_page = requests.get( 'https://en.wikipedia.org' + city_link.get('href')) city_soup = BeautifulSoup(city_page.content, 'html.parser') try: city_arabic_name = city_soup.find('span', {'lang': 'ar'}).text dictionary[city_name] = city_arabic_name except: dictionary[city_name] = 'غير متوفر' #print('...') with open("List_of_cities_and_towns_in_Saudi_Arabia_En_Ar.json", "w", encoding='utf-8') as outfile: json.dump(dictionary, outfile, ensure_ascii=False).encode('utf-8') index.py List_of_cities_and_towns_in_Saudi_Arabia_En_Ar.json
  5. هل يمكنك مشاركة ما تعيده SELECT CAST('101-01-21-4192B' as varbinary(max)) FOR XML PATH(''), BINARY BASE64
  6. المصممون لايكتبون أكواد HTML، بل يستعينون ببرامج التصميم Photoshop - Figma وغيرها لأن هذه البرامج قوية في عمل الرسوميات و تعديل الصور والتلاعب بالنصوص، هي اختصاصية لعمل تصاميم جميلة بطريقة سهلة ويقومون بتصدير الموقع على شكل ملف psd مثلاً. أنت كمطور واجهات أمامية مهمتك تحويل تصميم أو مخطط عام لموقع إلى شيفرات برمجية، لن تحتاج لمصمم دوماً، أغلب المواقع لها تصميم بسيط يمكنك تقليد أي تصميم موجود أو يوفر لك صاحب المشروع شرح لكيف ستبدو واجهة مشروعه، يمكن أن يرسم لك الهيكلية العامة للتصميم بيده على أقل تقدير، و تتفقون على الألوان و كيفية توزعها في الواجهة. المهم أن تتفق مع صاحب المشروع على متطلبات التصميم، وإن رأيت أن التصميم معقد يمكن أن يتم الإتفاق بجلب مصمم (أغلبها في المشاريع الكبيرة و حسب ميزانية صاحب العمل) يمكنك الإستفادة من تصاميم المواقع في الدورة التي تدرسها فإن معظم الأمور الأساسية متشابهة يتم التعديل عليها وإضافة ميزات حسب المشروع. لاحظ أن جميع مواقع الويب، مهما كان احترافياً و معقداً و جميلاً . غيرها من الصفات هو 100% مكتوب بلغتي HTML - CSS وفي حال الحاجة للتفاعلية و التحريك نستخدم جافاسكربت. الموضوع يحتاج منك للتدريب و البحث عن أمثلة لمواقع تصميمها جميل و الاستفادة من الأكواد و فهم كيف تم تنفيذ فكرة ما، ويمكن أن تبحث عن طريقة تصميم شيء ما بلغات الويب على يوتيوب إن أعجبك شيء. دورة واجهات المستخدم فيها أمثلة عن كيفية قراءة القيم من ملف فوتوشوب عن طريق البرنامج نفسه و كيفية جلب المسافات و الألوان و الخطوط وغيرها، مما يسرع في عمل مطور الواجهات الأمامية، يمكنك عمل التصاميم كما تريد، ولكن مع إشراف صاحب العمل ليكون موافقاً على النتيجة.
  7. يمكن إعادة ترميز النص لنمط آخر، مثل Base64 وهو يحوي أحرف و أرقام .. باستعمال الطريقة التالية --String to Base64 SELECT CAST('string' as varbinary(max)) FOR XML PATH(''), BINARY BASE64 ^^^^^^ النص --Base64 to String SELECT CAST( CAST( 'c3RyaW5n' as XML ).value('.','varbinary(max)') AS varchar(max) ) ^^^^^^^^ ناتج الجزء الأول المشفر أو الشيفرة التالية: declare @source varbinary(max), @encoded varchar(max), @decoded varbinary(max) -- مدخلات و مخرجات set @source = convert(varbinary(max), 'Hello From Hsoub') -- نص نريد تشفيره set @encoded = cast('' as xml).value('xs:base64Binary(sql:variable("@source"))', 'varchar(max)') -- نص مشفر set @decoded = cast('' as xml).value('xs:base64Binary(sql:variable("@encoded"))', 'varbinary(max)') -- فط التشفير -- استعلام يعمل على جدوللترميز و فك الترميز select convert(varchar(max), @source) as source_varchar, @source as source_binary, @encoded as encoded, @decoded as decoded_binary, convert(varchar(max), @decoded) as decoded_varchar في حال أردت ضغط النص: تقدم SQL server دالتين لضغط و فك ضغط النصوص وهما بالشكل العام التالي COMPRESS ( expression ) DECOMPRESS ( expression ) مثال للتنفيذ: SELECT COMPRESS ('WELCOME To Hsoub') AS Compressed_Value سوف تنتج التعليم السابقة نص مشفر مضغوط. لفك الضغط، نستعمل الدالة المعاكسة مع تمرير ناتج الدالة الأولى لها SELECT DECOMPRESS (0x1F8B0800000000......) AS Decompressed_Value // ^^^^^^^^^^^^^^^^^^^^^ Compressed_Value WELCOME To Hsoub سوف يتم إعادة النص الأول وهو WELCOME To Hsoub كناتج فك الضغط. يمكنك تجريب هذه الدالة تستخدم خوارزمية GZIP لضغط السلاسل النصية. إن مفهوم ضغط النصوص أمر يتعلق بخوارزمية الضغط و تكرار المحارف ضمن النص نفسه حيث كلما زاد تكرار الحروف يزداد معدل الضغط و ينقص حجم النص المضغوط الناتج يمكن ألا يكون النص المضغوط دوماً أصغر من النص الأصلي
  8. عليك ذكر أي تفاصيل تساع على اختيار الحل الأمثل للمشكلة، ماذا سوف يفيدك النص المختصر؟ وضعه على باركود فقط؟ لأي هدف؟ تصويره من هاتف و جلب بيانات ما أو ماذا
  9. هل الغرض هو الحماية و تشفير معرف المنتجات؟
  10. طيب ما لغة البرمجة التي تعمل BackEnd أرجو ذكر تفاصيل أكثر
  11. أين تريد استخدام هذا المنطق ولأي لغة برمجة؟
  12. هل يمكنك تحديد الهدف من الخوارزمية؟ وهل تقصد أنك تريد ضغط النص و جعل منه نص أصغر و بإمكان النص الصغير الدلالة على النص الكبير؟
  13. من الأفضل التحقق من أن الحقول التي أرسلها التطبيق أو HTML FORM تحوي بيانات وغير فارغة، نستعمل الدالة isset للتحقق من وجود بيانات ضمن الحقل., وأن القيمة نفسها غير فارغة نعمل trim لحذف الفراغات التي من الممكن أن يرسلها المستخدم أو تمر عن طريق الخطأ <?php $id = $_GET['id']; $IDCat = $_GET['IDCat']; if ( isset($id) && trim($id)!= "" && isset($IDCat) && trim($IDCat)!= "" ) { // code } else { // error بيانات ناقصة } ملاحظة: يمكن استعمال الدالة empty ولكنها تعتبر 0 مثلاً قيمة فارغة و أحيانا نريد تمرير 0 أو False لذلك نتوخى الحذر و نتأكد لكل قيمة حسب نوعها أيضاً empty, تعتبر كل شيء من التالي فارغ empty: "" (an empty string) 0 (0 as an integer) 0.0 (0 as a float) "0" (0 as a string) NULL FALSE array() (an empty array) var $var; (a variable declared, but without a value in a class) في حال عدم تمريرك لأي من القيم السابقة يمكن عمل التالي: <?php $id = $_GET['id']; $IDCat = $_GET['IDCat']; if ( !empty($id) && !empty($IDCat) ) { // code } else { // error بيانات ناقصة } مع العلم استخدام IF في مثالك يتحقق من قيمة واحدة وهو كاف
  14. مرحبا أحمد، يمكن استخدام الجملة الشرطية IF حيث نقوم بإسناد قيمة لخانة الحالية في حال تحقق شرط ما وإلا نضع قيمة فارغة مثال للشرط: =IF(H6>=I6,H6-I6,"") التنفيذ و الملف: المصنف1.xlsx
  15. حاول نقل التعليمة ini_set('memory_limit', '-1'); لأول جزء من أول ملف يتم تنفيذه في برنامجك. يمكن للمشكلة أن تكون بسبب استيراد الملفات في أعلى هذا الملف ومنها من يحجز ذاكرة بشكل كبير مثل مصفوفة طولية أو ماشابه..
  16. من الصورة لم يتعرف على الأمر، يتوجب عرض الملفات المضافة بعد نهاية الأمر. للتأكد من الملفات المضافة للمستودع المحلي اكتب الأمر git ls-files أو git ls-tree --full-tree -r --name-only HEAD ولم يتعرف على هذه حاول إضافة الملفات بالاامر git add --all * ثم commint -m حرف صغير للتجريب
  17. تمام، إذاً يمكنك عمل watermark على الصور من التطبيق أو الخادم، ضمن التطبيق يمكن الاعتماد على حزم برمجية لتعديل الصور مثل stamp_image void generate() { StampImage.create( context: context, image: imageFile, // الصورة children: [ Positioned( bottom: 0, right: 0, child: _watermarkItem(), // العلاقمة المائية ), Positioned( top: 0, left: 0, child: _logoFlutter(), // لوغو تطبيقك مثلاً ) ], onSuccess: (file) => resultStamp(file), // تصدير الملف ); } أو مكتبة image_watermark يوجد أمثلة في التوثيق، مثلاً إن كنت تريد إضافة نص كالتالي: var watermarkedImg = await image_watermark.addTextWatermarkCentered( imgBytes, // صورة 'watermarkText', // نص ); وطريقة إضافة صورة watermarkedImgBytes = await image_watermark.addImageWatermark( imgBytes, //image bytes صورة أصلية imgBytes2,//watermark img bytes صورة مائية أو لوغو imgHeight: 200, //watermark img height imgWidth: 200, //watermark img width dstY: 400, dstX: 400);
  18. قد يكون السبب أنك لم تعمل git add . ثم git commit git commit -m "نص توضيحي"
  19. أرجو مشاركة صورة للخطأ الذي يظهر ومزيد من التفاصيل يمكنك الاطلاع على المقالة التالية و اتباع خطوات التنصيب وطرح سؤال مع تفاصيل الخطأ إن ظهر مشكلة مشابهة يمكنك الاستفادة منها:
  20. أرجو مشاركة كيف تظهر النتيجة و كيف تريدها أن تظهر مع طباعة المتغير $d1 لأنه حسب تشكليه يمكن تحويل النص لمصفوفة يمكن أن تستخدم الدالة explode إن كانت السللسة عبارة عن أرقام بينها فاصلة مثلاً DELIMITER هو المرحف الفاصل بين القيم explode("DELIMITER", STRING); $d1 = explode(",", $d1); أو json_decode إن كانت على شكل عنصر JSON أو مصفوفة جافاسكربت $d1 = json_decode($d1);
  21. هل الصور يتم رفعها على سيرفر؟ أي يوجد معالجة backend لها؟
  22. أرجو مشاركة الحل ليستفيد من يقرأ هذا السؤال. هل قمت بتغيير نمط ترميز قاعدة البيانات لتصبح داعمة لترميز utf8 ؟ أو ضمن Excel من تبويب Data نختار utf8
  23. سبب المشكلة هو تحديد طول افتراضي لحقل الإيميل بشكل كبير، فهذا يؤثر على عمل الفهرسة و اختبار تكرار السلاسل النصية للبريد الإلكتروني عند إضافة بريد جديد خاصة مع إضافة القيد unique لمنع التكرار (البحث ضمن القاعدة يأخذ وقتاً ونريد تقليله قدر الإمكان) وهذا يعمل فهرسة لقاعدة البيانات و زيادة الحجم غير محبذة و يسبب بطئ في عملية المعالجة.. حيث أن الفهارس يفترض أن تزيد سرعة المعالجة وليس تقليلها. يمكن لأي تعديل في المشروع أن يظهر أخطاء جديد لأن الكثير من الأمور مرتبطة ببعضها، لا مشكلة بذلك يمكن حل المشكلة في تعديل الملف بزيادة الطول المسموح للنوع String /app/Providers/AppServiceProvider.php نضيف التضمين التالي: use Illuminate\Support\Facades\Schema; وضمن دالة boot: public function boot() { Schema::defaultStringLength(191); } ثم يمكنك إعادة عمل التهجير و بذر البيانات. كما يوجد حلول أخرى يمكنك البحث عن رسالة الخطأ وتجريبها. من هذه الحلول تغيير ترميز البيانات ل utf8 config/database.php نعدل 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', to 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', أو تعديل محرك قواعد البيانات: config/database.php تبديل 'engine' => null', مع 'engine' => 'InnoDB ROW_FORMAT=DYNAMIC', ثم للحلين السابقين تنفيذ الأمر php artisan config:cache لسبب تعديل ملف ضمن الإعدادات config. والتوثيق الرسمي يشرح نفس الحل من: laravel migrations creating-indexes
  24. في لغة جافاسكربت عند عمل render ل object أي تحويله لسلة نصية سيتم طباعة العبارة [object Object] الحل هو استخلاص القيمة من كائن الحدث v بالشكل <textarea value={value} onChange={(v)=>setValue(v.target.value)}> // ^^^^^^^^^^^^^ </textarea> في حال أردت زيادة تعقيد دالة إسناد القيمة و عمل تعديلات على القيمة و فلترتها مثلاً، يمكنك فصل دالة المعالجة إلى handler منفصل، وتصبح الشيفرة أكثر قابلية للقراءة const handleChange = (event) => { setValue(event.target.value); }; /* */ <textarea value={value} onChange={handleChange}> // ^^^^^^^^^^^^^ </textarea>
  25. يمكنك إسناد طول المصفوفة المرغوبة فقط، بدون المصفوفة نفسها لقائمة اعتمادية useEffect أي list of dependencies حيث سيقتصر استدعاء الدالة على تغير طول المصفوفة useEffect(() => { // أي تعديل على طولة المصفوفة console.log(usersArr) }, [usersArr.length]) // ^^^^^^^^^^^^^^^
×
×
  • أضف...