تعلّمت اليوم
ملاحظات قصيرة وعملية من فريق OOZOU: دروس سريعة من العمل اليومي في الهندسة والتصميم.
تشغيل Claude Code باستقلالية تامة باستخدام اسم مستعار YOLO
يتيح الخيار --dangerously-skip-permissions لـ Claude Code تشغيل الأوامر وتعديل الملفات دون طلبات تأكيد. لكن كتابته في كل مرة تصبح مملة بسرعة.
تشغيل أمر على بطاقة Nvidia GPU المخصصة في GNU/Linux (مثل ollama)
للتأكد من أن أمرًا ما (CLI) يستخدم بطاقة NVIDIA GPU في GNU/Linux، يمكنكم استخدام متغيري البيئة __NV_PRIME_RENDER_OFFLOAD=1 و __GLX_VENDOR_LIBRARY_NAME=nvidia قبل الأمر.
استخدام سياسات Pundit لإدارة المعاملات المسموح بها افتراضيًا ولكل إجراء
لإدارة المعاملات المسموح بها، يمكنكم إضافة permitted_attributes وpermitted_attributes_for_#{action} في السياسات، على سبيل المثال:
استخدام `requestSubmit` لإرسال النماذج مع Turbo
يستمع Turbo إلى أحداث submit على النموذج. لذلك استخدموا دائمًا requestSubmit لإرسال النموذج عبر JS.
تجاهل الـ gems المجمّعة في Rubocop وESLint ضمن GitHub Actions
غالبًا ما تثبّت مشاريع Rails الـ gems في مجلد vendor ضمن GitHub Actions، كي نتمكن من تخزينها مؤقتًا للتشغيلات المتتالية.
أضيفوا ظلًا بأسلوب macOS إلى لقطات الشاشة "الجزئية" أو الصور ذات الحواف البسيطة
افتراضيًا، وسواء أحببتم ذلك أم لا، تضيف اختصارات macOS لالتقاط شاشة التطبيق كاملة (⇧- ⌘- 5) ظلًا خفيفًا حول الصورة المحفوظة. وقد يجعلها ذلك أجمل بصريًا عند…
إنشاء شاشة أحادية اللون باستخدام طبقات تراكب مغطاة بتأثير تعبئة Hue
إنشاء شاشة أحادية اللون باستخدام طبقات تراكب مغطاة بتأثير تعبئة Hue
اضغطوا مع الاستمرار على ⌥option أثناء النقر والسحب على حقل الإدخال لتعديل الحجم
اضغطوا مع الاستمرار على ⌥option أثناء النقر والسحب على حقل الإدخال لتعديل الحجم
git check-ignore
يتيح لكم هذا الأمر التحقق مما إذا كان ملف أو مسار معيّن متجاهَلًا، ومع الخيار -v يعرض لكم أيضًا نمط الاستبعاد المطابق (التوثيق).
السماح بلصق كتل Ruby متعددة الأسطر في Pry عند استخدام النقطة في بداية السطر
أصبحنا نستخدم أسلوب النقطة في بداية السطر كثيرًا الآن، مثلًا
Rails 6 وRuby 3 وBootstrap 5 وHotwire
هذا امتداد لمقالة مدونة Bootrails مع إضافة Hotwire إليها: أحدث الأدوات الرائعة (حتى وقت كتابة هذا TIL):
تحويل النص إلى Title Case في Figma
يمكنكم ضبط خاصية مربع النص لتحويل كل النص إلى Title Case تلقائيًا (إلى جانب أنماط حالة الأحرف الشائعة الأخرى)
تقليل حجم Slug على Heroku
أولًا، ثبّتوا إضافة Heroku Repo:
تشغيل أوامر خاصة (incognito) في Bash وZsh
يكفي أن تضعوا مسافة قبل الأمر كي لا يُحفظ في ~/.bash_history. مثال: qrencode -o out.png "Some secret text"
تحويل SVG إلى PNG
على macOS، ثبّتوا inkscape (باستخدام brew) واستخدموه على النحو التالي:
سلوك CMD+Click في Figma
الضغط مع الاستمرار على ⌘CMD والنقر بالزر الأيسر في وضع المصمم (Designer mode) يحدد أعمق طبقة داخل الإطار أو المجموعة، بينما يحدد الإجراء نفسه في وضع الفحص أو المطوّر الكائن أو الإطار أو المجموعة الخارجية…
ترويسة Cache-Control في Rails
لضبط ترويسات cache-control للأصول الثابتة واستخدام CDN على Heroku:
ترقية قاعدة بيانات Postgres باستخدام Homebrew
لترقية Postgres يمكنكم تشغيل
إصلاح الإدخال في rails console على Heroku
إذا اضطررتم إلى لصق عدد كبير من الأسطر في rails console على Heroku (أو في أي مكان آخر)، فقد تواجهون مشكلة تداخل الأسطر بعضها في بعض.
Heredoc بدون استيفاء
أحيانًا تحتاجون إلى استخدام Heredoc في Ruby بدون استيفاء ('#{....}'). يمكنكم تحقيق ذلك بإحاطة الكلمة المفتاحية بعلامتي اقتباس مفردتين:
معرّف فريد لعناصر DOM في Rails
يوفّر Rails كثيرًا من الـ view helpers الرائعة، ومنها dom_id:
إضافة أنواع جديدة إلى واجهة attributes API في Rails 5
تتيح لنا واجهة attributes API في Rails 5 بناء كائنات النماذج (form objects) بسهولة كبيرة.
أضيفوا فواصل إلى شريط Dock في macOS لتجميع التطبيقات
افتحوا الطرفية (أو ما يعادلها) والصقوا الأمر التالي المكوّن من سطر واحد:
النسخ عبر Amazon AWS S3 CLI مع تعيين الصلاحيات
افتحوا الطرفية (أو ما يعادلها) والصقوا ما يلي:
تنظيف Docker بلا رحمة
إذا ظهر لكم خطأ No Space left في Docker، فإليكم الحل الجذري:
إرفاق ملف بـ ActiveStorage من دون HTTP
إذا أردتم إرفاق ملف أنشأتموه على القرص أو نزّلتموه من رابط أرسله المستخدم، يمكنكم فعل ذلك على النحو التالي.
إنشاء جداول التجزئة الوسيطة تلقائيًا في Ruby
ستُنشأ جميع جداول التجزئة في المستويات الوسيطة تلقائيًا وكأنها بالسحر
نسخ ملف احتياطيًا بالاسم نفسه مع لاحقة
ملاحظة: يمكنكم في الواقع استخدام !#:1 في أي أمر، لأنه يمثّل آخر وسيط مُرِّر إلى الأمر.
الأسماء المستعارة في Bash وسحرها
لديّ ملف منفصل في مجلد المستخدم باسم ~/.aliases، أخزّن فيه جميع الأسماء المستعارة (aliases) الخاصة بـ bash. أستخدم الأسماء المستعارة كثيرًا وأضيف أسماء جديدة باستمرار، لذا أنشأت دالة bash لإضافة أسماء مستعارة جديدة…
حساب الجناس التصحيفي (Anagrams) في Elixir
على سبيل المثال:
تغيير إصدار Ruby لأمر واحد فقط باستخدام rbenv
يمكنكم تبديل إصدار Ruby مؤقتًا باستخدام rbenv local
تغيير أسماء النظام في macOS
من الطرفية (أو ما يعادلها)، انسخوا والصقوا:
جعل الانتقال إلى التعريف في VS Code يعمل بـ Cmd+Click
افتحوا ملف إعدادات المستخدم بصيغة JSON واستخدموا هذا الخيار:
التحقق من توفر منتجات IKEA
إذا كنتم تنتظرون عودة منتج من IKEA إلى المخزون، فإليكم حلًا عمليًا لمتابعة التحديثات تلقائيًا. يشرح هذا الدليل كيفية استخدام سكربت shell للتحقق من توفر المنتج في مخزون IKEA وتلقي…
التحقق من وجود أمر باستخدام سكربت shell
التحقق من وجود أمر باستخدام سكربت shell
التحكم في علامات تبويب Chrome
أحيانًا أريد العودة إلى آخر صفحة شاهدتها مع إبقاء الصفحة الحالية مفتوحة. يمكنكم تحقيق ذلك بسهولة كبيرة باستخدام الاختصارات
تنظيف الحزم القديمة في brew
استخدموا brew cleanup لاستعادة بعض المساحة!
إنشاء Hash من Enumerable (Rails 6.0)
دالة جديدة تتيح لكم إنشاء Hash من Enumerable:
إنشاء ترحيلات قابلة للتكرار بأمان (Idempotent Migrations)
عندما تكتبون ترحيلات تحذف بيانات أو هياكل، استخدموا if_exists: true عند حذف جدول، وتحققوا من وجود الجدول عند إضافة عمود أو حذفه…
أنشئوا أوامر git خاصة بكم (الأسماء المستعارة)
هل رغبتم يومًا في اختصار أحد أوامر git؟ يمكنكم بالطبع استخدام الأسماء المستعارة في shell، لكن عليكم دائمًا إضافة سياق كي لا تنسوا ما يرمز إليه كل اسم مستعار، أما البديل فهو تعريف أوامركم الخاصة…
حذف الفروع المدمجة مسبقًا في Git
يمكنكم استثناء مزيد من الفروع من الحذف عبر egrep -v 'master|develop|foo|bar'
حذف فروع git المدمجة
أمر git عملي لحذف جميع الفروع المحلية التي سبق دمجها.
التعيين بالتفكيك (Destructuring) في JS
أمثلة بسيطة javascript const [a, b, ...c] = [10, 20, 100,200] // a= 10, b=20, c=[100,200] const { first, second } = { first: 1, second: 2 } // first = 1, second = 2
مقارنة ملف محلي بنسخته البعيدة في Git
يكفي تشغيل الأمر التالي لعرض الفروقات بين الملف المحلي ونسخته البعيدة
العثور على فرع انطلاقًا من commit
c198bb715 Make default expired description logic pretty `
دفع commit سابق قسرًا إلى المستودع
إذا دفعتم بعض الكود وأردتم دفع commit سابق قسرًا، فيمكنكم ذلك باستخدام git push origin +commit_sha^:branch_name
الحصول على اسم فرع git الحالي
الحصول على اسم فرع git الحالي
الحصول على كلمة مرور شبكة Wi-Fi التي تتصلون بها
password: "!forHackers" `
تصفّح سجل Git لملف معيّن (واجهة رسومية)
تصفّح سجل Git لملف معيّن (واجهة رسومية)
كيف تنشئون عنصر HTML مع خصائصه في سطر واحد في JavaScript
عند العمل على مشروع JavaScript، من الشائع إنشاء عناصر HTML ديناميكيًا. وعادةً ما تُستخدم عدة أسطر من الكود لإنشاء العنصر وتعيين خصائصه المتعددة…
كيف تكتشفون الكائنات المتضخمة (God Objects) في مشروعكم (Rails)
من المجلد الجذر لمشروعكم، انتقلوا بالأمر cd إلى app/models (من سطر الأوامر طبعًا)، ثم شغّلوا wc -lw * | sort -u
كيف تخرجون من Vim
1. ثبّتوا أحدث إصدار من Vim 2. افتحوا ملفًا في Vim 3. اضغطوا ⌘-Q وأغلقوا الطرفية 4. أعيدوا فتح الطرفية
كيف تخرجون فعلًا!! من vim
في الطرفية
كيف تحفظون ملفًا باستخدام sudo في VIM
كيف تحفظون ملفًا باستخدام sudo في VIM
نماذج HTML ترسل البيانات إلى action مختلف
أعرف منذ زمن طويل أنه يمكن إرسال قيم عبر أزرار الإرسال، بحيث تعرفون أي زر استُخدم لإرسال النموذج، مثلًا.
إذا أردتم تجاوز ترتيب سبق تعيينه
إذا أردتم تجاوز ترتيب سبق تعيينه (حتى لو كان عبر default_scope)، فاستخدموا reorder() بدلًا من ذلك.
تحسين أداء Bundler
ارفعوا أداء bundler بتشغيل مهامه بالتوازي عبر jobs:
إيقاف خادم Rails العالق
أردت إيقاف rails الذي يعمل على منفذ محدد. (يشغّل حاسوبي المحمول عدة خوادم rails.)
إنهاء جلسة SSH لا تستجيب
قد تتوقف جلسة SSH عن الاستجابة أحيانًا، ويحدث هذا كثيرًا عندما أضع حاسوبي المحمول في وضع السكون. وبدلًا من إغلاق علامة التبويب، يمكنكم استخدام أحرف الهروب في SSH (SSH Escape Characters) لإنهاء الجلسة
تقييد عدد السجلات في ارتباطات has_many
تقييد عدد السجلات في ارتباطات has_many
عرض بنية المجلد مع استثناء مجلد أو أكثر
هل أردتم يومًا عرض بنية المجلد الحالي مع استثناء مجلد أو اثنين؟
عرض أسماء النماذج في تطبيقكم
ملاحظة: يقلّل RUBYOPT=-W0 المخرجات الزائدة عند تشغيل أوامر rails، لأنه يكتم التحذيرات.
إنشاء طلب سحب (PR) من سطر الأوامر باستخدام hub
ثبّتوا hub أولًا باستخدام brew: brew install hub ثم استخدموا أمرًا بسيطًا كما في المثال أدناه: hub pull-request -m "best pr ever" -b oozou:develop -h feature/awesome-improvements
اختصارات Slack الأكثر استخدامًا لديّ
⌘-K (أو T) لفتح أداة التبديل بين القنوات (أتنقل بين القنوات بهذا الاختصار وحده، وقد ضبطت Slack لإخفاء جميع القنوات التي لا تحتوي على رسائل جديدة)
علاقة اختيارية + RSpec مع shoulda-matchers
User 1 - 0..1 Laptop
دوال Postgres والاستعلامات غير القابلة للفهرسة (Non-sargable)
قد يؤدي استخدام دوال postgres داخل عبارة where إلى جعل الاستعلام non-sargable، أي غير قادر على الاستفادة من الفهارس.
استخدام UPDATE مع Join في PostgreSQL
يوضح هذا الاستعلام كيفية استخدام صيغة UPDATE مع join في PostgreSQL لتحديث البيانات في جدول بناءً على قيم في جدول آخر. على سبيل المثال:
نقل الأسطر إلى الأعلى والأسفل بسرعة في أي وضع من أوضاع Vim
أنقل الأسطر كثيرًا في vim، لذا أنشأت تعيينات (mappings) لتسهيل ذلك. تستخدم هذه التعيينات ⌘-j للنقل إلى الأسفل و⌘-k للنقل إلى الأعلى، وتعمل في أوضاع normal وinsert وvisual. vim nnoremap <D-j> :m…
إزالة bundler المضمّن مع ruby 2.6
يؤدي إنشاء تطبيق rails 6 باستخدام ruby 2.6+ مع تثبيت bundler v2 إلى إنشاء binstubs غير قابلة للاستخدام. إذا ظهر لكم هذا الخطأ You must use Bundler 2 or greater with this lockfile. فيمكنكم إزالة…
إزالة commit غير مرغوب فيه من فرعكم
إزالة commit غير مرغوب فيه من فرعكم
إعادة تسمية الملفات في VIM
إليكم دالة مفيدة أستخدمها لإعادة تسمية الملفات في VIM (تعمل أيضًا في MacVIM وNeovim)
إعادة ضبط تسلسل جدول Postgres بعد عملية DELETE
عند حذف السجلات الأحدث من جدول ما، يمكنكم إعادة ضبط عدّاد التسلسل الخاص به إذا كان تتابع قيم حقل الزيادة التلقائية مهمًا لكم. لنأخذ العمليات التالية على الجدول users:
استعادة ملف محذوف في Git
استعادة ملف محذوف في Git
تشغيل rubocop على الفرع الحالي
تشغيل rubocop على الفرع الحالي
تشغيل rubocop قبل الـ commit
تُعدّ Git hooks أداة قوية جدًا لأتمتة المهام وفرض معايير كتابة الكود في مستودع Git. ومن أشهر استخداماتها تشغيل الاختبارات الآلية وأدوات تحليل الكود قبل…
تشغيل الأمر نفسه على مُدخل أو مُدخلات مختلفة
إليكم طريقة لتشغيل الأمر نفسه مرارًا على مُدخل واحد أو عدة مُدخلات مختلفة.
استخدام scope مع or في Rails
scope :human, -> { user.or(author) } scope :terminator, -> { admin.or(robot) } `
عرض الملفات المحذوفة في الـ commits السابقة [git]
عرض الملفات المحذوفة في الـ commits السابقة [git]
إرسال الرسائل إلى Slack باستخدام cURL
يتيح لكم Slack إرسال الرسائل عبر خدمة Webhooks
استنساخ سطحي لمستودع قديم
إذا لم تكونوا بحاجة إلى سجل git الكامل للمستودع الذي ستعملون عليه، يمكنكم تحديد عمق الاستنساخ (clone depth) فلا تجلبون سوى آخر x من الـ commits.
عرض TODO والملاحظات الأخرى في تطبيق Rails
هل تعلمون أنه يمكنكم عرض جميع ملاحظات TODO وOPTIMIZE وFIXME في تطبيق Rails باستخدام rails notes؟
بنية Flux بسيطة باستخدام Vue.js
في التطبيقات الصغيرة التي لا تحتاج إلا إلى نمط بسيط لإدارة الحالة، أستخدم دائمًا مكوّنًا واحدًا يحتفظ بحالة التطبيق، وهو الـ container. ويعمل هذا المكوّن كمصدر وحيد للحقيقة يرجع إليه التطبيق…
إخفاء تحذيرات rspec
$ RUBYOPT=W0 bundle exec rspec spec/ ...
وسم سجلات Rails بمعلومات مفيدة
تعرّفت للتو على السجلات الموسومة (tagged logging) في Rails. هل تعلمون أنه يمكنكم وسم السجل باستخدام
استخدام الأحرف الكبيرة في اختصارات VIM
ملاحظة: @joe، هذا هو الحل المطلوب :D
استخدام FFmpeg وApple Script لضغط مقاطع الفيديو
ابنوا تطبيقًا يمكنكم سحب مقاطع الفيديو وإفلاتها عليه لضغطها بشكل كبير:
استخدام `host` للحصول على مزيد من المعلومات عن النطاقات
ربما تستخدمون dig لمعرفة سجلات A وCNAME وMX وغيرها لنطاق ما من خوادم DNS. لكن إذا أردتم نظرة عامة سريعة فقط، فاستخدموا host:
استخدام minItems وmaxItems في مخططات JSON للمجموعات
لجعل مخططات JSON الخاصة بالمجموعات أكثر موثوقية، استخدموا minItems وmaxItems حتى تثقوا بواجهة API الخاصة بكم.
استخدام Neovim كأداة difftool في git
ما عليكم سوى لصق ما يلي في ملف ~/.gitconfig
استخدام ميزة الأسماء المستعارة (aliases) في Git
يتيح لكم Git إنشاء أسماء مستعارة داخليًا عبر ملف الإعدادات. ويُفترض أن يكون ملف الإعدادات العام في ~/.gitconfig
متابعة حالة CI على Github
عندما تكون أداة hub من Github مثبّتة لديكم، يمكنكم معرفة حالة CI للـ branch الحالي على النحو التالي:
يمكنكم استخدام FactoryBot مع نماذج لا تعتمد على ActiveRecord
يمكنكم استخدام الدالة initialize_with في FactoryBot لتهيئة الكائن بالطريقة التي تريدونها، مما يتيح لكم إنشاء factories لأي من كائناتكم كما تشاؤون
دالة Zsh لعرض شجرة الملفات
عند التنقل بين المجلدات في سطر الأوامر، يفيد غالبًا رؤية بنية المجلدات والمجلدات الفرعية بتنسيق "شجرة". ورغم وجود أدوات كثيرة لذلك، مثل…