Tuesday, March 31, 2026

the truth make doesn't want you to know.

 we all know GNU make utility, the beautiful build system that helps us build complex projects and saves time, and always it tracks dependencies!

and perhaps the latter is the most important one, it saves a lot of compilation time by not compiling the up-to-date targets, but how make actually tracks the dependencies of a specific target?

it's simpler than what you think, it's just timestamp comparison!


say we have a target main.out that relies on 1 dependency, main.c, what happens when you type make is this:

make reads Makefile, it finds you have a target called "main.out" (we'll assume it's the default target for now), it finds that this target relies on main.c files, and it goes and search for main.out, if it's not found, this means it should be made now, but if it's found, it compares the timestamp!
if the timestamp of main.out is earlier than that for main.c, this means main.c was changed and main.out wasn't updated correspondingly, so this triggers a new build.

if they were equal, this means main.out is up to date and doesn't need new building!

but.. what about the third case?
what if main.out was actually updated AFTER main.c, meaning that the timestamp of main.c is now less than that for main.out!

this came to my mind and I had nothing but to try it out!


so, I made this simple main.c file:

along with this simple Makefile:

then we'll run make, obviously make will make main.out for us so happily, and now the timestamp of main.out is similar to main.c, if we ran make again, it'll do nothing because there is nothing to do!


ok, let's make a simple change to main.c:



now we have just one new line, but when we save this file the timestamp will be updated and will become bigger than the timestamp of main.out, if we ran make again, it'll happily make the target, main.out, again, which is what we need!


now let's make another new change to main.c:



but before we rush and run make again, let's run this simple command: touch main.out
touch will update the timestamp of main.out, what does this mean?
now main.out's timestamp is a bit bigger than that for main.c!

despite make SHOULD build the target again, if you run make it'll do nothing and tell you:
make: `main' is up to date.


what does this mean?
make doesn't have a hidden git inside it to track the versions of a file, and it doesn't actually need, the idea behind it is as simple as our main.c... a timestamp comparison!
imagine that this simple idea gave us to build so complex project in way less time, imagine each time you try to build your project, the compiler compiles the exact same utility file that no one has changed since intel pentium processors, imagine this in the scale of a game engine or linux kernel for example!
all this would take way a lot time, and just with an idea a freshman can write the code for, we solved all these problems!

sometimes, it's not about a fantastic solution as much as it's about using the tools you already have!

Monday, March 30, 2026

بداية الطريق في نظام البطريق

 فيه حملة منتشرة ف العالم كله دلوقتي ضد مايكروسوفت وويندوز، الحملة بتشجع الناس أنها تسيب نظام ويندوز وتحول للينكس، النهاردة حابب أتكلم عن الحملة دي بالذات لأن للأسف مجتمعنا العربي متأخر جداً ف مواضيع مهمة  ف عالم السوفتوير زي الخصوصية وللأسف مفيش شرح كويس بيفهم الناس ليه الحملات دي بتحصل وايه هدفها وليه المبرمجين بالذات كارهين مايكروسوفت بالشكل ده؟
البوست ده هيكون طويل جداً، ممكن متقدرش تقرأه ف مرة واحدة، بس أنا متأكد أنه هيكون ممتع إن شاء الله!

تعريف نظام التشغيل


أول حاجة، يعني ايه "نظام تشغيل" أصلاً؟
ايه هو ال"تطبيق" ده وايه وظيفته؟
الموضوع بسيط... أنت دلوقتي عندك جهاز، مش فارق الجهاز ده كمبيوتر، تليفون، بلاي ستيشن أو حتى غسالة فوق أوتوماتيك
الجهاز ده فيه هاردوير (معالج، رام، هارد ديسك، سماعة، شاشة، ميكروفون، كيبورد، ماوس، إلخ..)
مش لازم يكون فيه كل أنواع الهارد وير، بس أكيد أن فيه شوية منهم!
علشان البوست يبقى بسيط هنتكلم عن التليفونات ف أول جزء
التليفون عليه تطبيقات كتير، فيسبوك، واتس اب، انستجرام، تيك توك إلخ...
كل التطبيقات دي بتشتغل على نفس الهاردوير، نفس الشاشة والسماعة والكيبورد وكل حاجة!
طيب تخيل أن كل تطبيق من دول كان مضطر يكتب بنفسه ازاي هيتواصل مع الهاردير؟
يعني تخيل شركة فيسبوك وهي بتعمل فيسبوك جابت شوية مهندسين وقالت لهم انتو مسؤولين عن الجزء اللي هيعرض البوستات على الشاشة، والبوستات دي هتتعرض بلغات مختلفة وخطوط مختلفة، وانتو هتعملوا لنا تطبيق ياخد الكلام المكتوب ف البوست، ويحوله لأشكال مرسومة على الشاشة، وكمان البوست ممكن يكون فيه صورة أو فيديوهات، عايزينكم برضو تعملوا لنا تطبيق بيرسم الصور والفيديوهات (الفيديوهات هي صور كتيرة بتتعرض ورا بعض) على الشاشة
هتقولي وايه المشكلة؟
فيه مشكلة، أن تيك توك برضو فيه ميزات شبه كده، هو فيه كلام مكتوب، صور، فيديوهات، زراير، إلخ..
انستجرام برضو
واتس اب، تليجرام جوجل
كلهم فيهم ميزات شبه بعض جداً، ف الأول والآخر كله كلام بيترسم ع الشاشة سواء كان عنوان مقال على جوجل أو محتوى بوست فيسبوك مش هتفرق!
طيب تخيل كان كل تطبيق من دول جاب مهندسين مخصوص يعملوا تطبيقات "تتواصل" مع الهاردوير علشان تعمل وظيفة معينة!
تكرار ملهوش فايدة، ليه منكتبش نفس الكود أو التطبيق ده مرة واحدة، وكل التطبيقات تستخدمه؟
كده مش هنضطر نجيب نفس المهندسين يكتبوا نفس الكلام مليون مرة!

أهو ده بقى جوهر أنظمة التشغيل!
نظام التشغيل هو ببساطة "تطبيق" مختلف شوية عن باقي التطبيقات، أنت مش بتستخدمه، لكن من غيره معظم الأجهزة الإلكترونية مش هتشتغل!
التطبيق ده وظيفته هي أنه يتواصل مع الهاردوير!


مثال عن وظيفة نظام التشغيل

لما تدوس على قائمة أصدقاءك ففيسبوك، واللي هي متخزنة ف قواعد بيانات عملاقة عند شركة فيسبوك، تطبيق فيسبوك اللي على تليفونك بيبعت طلب لقواعد البيانات دي، ويقولهم أن حضرتك محتاج قائمة أصدقاءك، وبين مليارات المستخدمين ومليارات قوائم الأصدقاء اللي متخزنين عند فيسبوك، فيه نظام مسؤول عن أنه ينفذ طلبك، ف بيروح يدور ف قواعد البيانات عن قائمة أصدقاءك أنت بالذات، ويبعتها لتطبيق فيسبوك اللي على تليفونك، تطبيق فيسبوك بقى بيخزنها ف ال"رام" بتاعت جهاز حضرتك، ويعرضها ع الشاشة
الموضوع بسيط بالنسبة لك... بس خلف الكواليس معظم الهارد وير اللي ع التليفون بيشتغل علشان ينفذ المهمة البسيطة دي:
كارت النت: ده المسؤول عن أنه يتواصل مع النت، وهو اللي بيبعت الطلب لقواعد بيانات فيسبوك ويستلم الرد:
المعالج: عقل أي جهاز إلكتروني، وهو المسؤول عن أنه يتحكم ف باقي أجزاء الهاردير (هو بينفذ اللي بيطلبه نظام التشغيل)
الرام: دي المكان اللي بيخزن قائمة أصدقاءك بشكل مؤقت، لحد ما التطبيق يعرضها لك، ف أنت تشوفها وتسيب الصفحة، ف يحذفها من الرام لأنه خلاص مبقاش محتاجها!
الشاشة: دي اللي بتعرض قائمة أصدقاءك وأنت بتشوفها بنفسك، وبرضو دي اللي فيها زرار قائمة الأصدقاء اللي حضرتك ضغطت عليه!


تخيل كل تطبيق فيه قائمة أصدقاء كان محتاج يتواصل مع كل قطع الهاردوير دي؟
وطبعاً فيه أكتر من نوع معالج، وأكتر من نوع رام، وأكتر من نوع كارت نت وأكتر من شاشة، وكل واحد بتتواصل معاه بطريقة مختلفة!

طيب.. كده فهمنا ايه هو نظام التشغيل؟
ايه بقى ويندوز ولينكس والأسماء الغريبة دي؟
دي أنظمة تشغيل، لكنها بتشتغل على كمبيوتر أو لاب توب مش على تليفون


ويندوز ولينكس، شبابيك وبطريق


ويندوز نظام تشغيل 
closed source:  مغلق المصدر
ومملوك لشركة مايكروسوفت
لينكس نظام تشغيل
open source: مفتوح المصدر
وهو "يعتبر" مملوك لليناس تورفالدز

الفكرة بقى أن زي ما قلت، ويندوز مغلق المصدر، يعني محدش فينا يقدر يشوف الكود بتاعه، ومايكروسوفت شركة متخلفة جداً، وبتحط مميزات ملهاش أي ستين لازمة على كيف مرات مدير الشركة!
يعني مثلاً، تعرف تطبيق الملاحظات اللي على تليفونك؟
اللي بتكتب فيه طلبات البيت... فيه واحد زيه على ويندوز اسمه 
notepad
تطبيق كان برئ وبسيط، بتفتحه، تكتب ملاحظاتك والسلام عليكم
مايكروسوفت صحيت ف يوم قررت تضيف فيه ذكاء اصطناعي!
ليه؟ هو كده! وأنت تفهم أكتر مننا يعني؟

طب يبني ده تطبيق ملاحظات هتضيف فيه ذكاء اصطناعي يعمل ايه؟ يصحح الأخطاء الإملائية ف طلبات البيت؟
غير كده، مايكروسوفت والشركات الكبيرة عموماً بيتاجروا ببيانات المستخدمين، هما بياخدوا بياناتك ويبيعوا لشركات الإعلانات اللي بتكسب من وراك، دايرة مفرغة أنت الوحيد اللي خسران فيها
ولو متعرفش ف فيه قضايا كبير مرفوعة على مايكروسوفت وجوجل وميتا (الشركة بتاعت فيسبوك وانستجرام وواتس اب) بخصوص الموضوع ده.. وهما مشغلين فرق محامين كبيرة مخصوص علشان الموضوع ده!
وويندوز مش برة اللعبة، ويندوز كنظام تشغيل ليه وصول لكل حاجة بتحصل، يعني مثلاً مايكروسوفت بياخد سكرين شوت للشاشة كلها كل فترة وأنت شغال والله أعلم بتروح فين بعد كده

أما لينكس، فهو نظام تشغيل مفتوح المصدر، مفتوح المصدر يعني أنت تقدر تقرأ الكود بتاعه بنفسك وتتأكد أنه مفهوش أي حاجة بتتجسس عليك، وكمان لينكس أأمن
هتقولي ازاي أأمن وأي حد يقدر يقرأ الكود بتاعه؟
مش كده ممكن أي هاكر يقرأ الكود ويلاقي ثغرة فيه ويعرف يهكره؟
هقولك اه فعلاً، بس برضو زي ما أي هاكر يقدر يقرأ الكود بتاعه، أي مهندس خبير سايبر سيكيوريتي يقدر يقرأ الكود بتاعه ويكتشف ثغرات فيه ويصلحها، وبكده يبقى أأمن!
أما ويندوز، ف لو هاكر اكتشف ثغرة فيه هيستغلها، بس مفيش ولا مهندس سايبر سيكيوريتي يقدر يفحص النظام إلا لو كان شغال مع مايكروسوفت من الأول، وعلشان كده اكتشاف الثغرات وتصليحها ف ويندوز أبطأ من لينكس
لأن لينكس فيه متطوعين بالآلاف ف مجالات مختلفة بيطوروا فيه، وغير المتطوعين بما أن لينكس يعتبر أكبر مشروع مفتوح المصدر في التاريخ وأكتر مشروع تقريباً أثر على عالم التكنولوجيا، الشركات الكبيرة نفسها زي جوجل وانتل بقت بتوظف ناس وتدفع لهم رواتب مقابل أنهم يطوروا من لينكس، لأن العالم كله بقى يعتمد عليه دلوقتي!
أقولك معلومة؟ نظام أندرويد اللي ف معظم تليفونات العالم دلوقتي مبني على لينكس!
معظم سيرفرات العالم شغالة على لينكس
لينكس هو أكثر نظام تشغيل مستخدم عالمياً على الإطلاق
وده مش بس علشان الأمان، كمان علشان البساطة والسرعة... لينكس ماشي بمبدأ مهم جداً وهو أنه مش هيفترض عنك كمستخدم أي حاجة
مايكروسوفت لما صممت ويندوز كان هدفها نظام تشغيل عام ينفع يشتغل مع أي مستخدم
ينفع يشتغل مع الجيمرز اللي عايزين يلعبوا ويصوروا فيديوهات، مع الموظفين اللي ف البوسطة، مع المبرمجين ذات نفسهم، مع كل فئات المستخدمين
ف لو بصيت على التطبيقات اللي نازلة عندك على ويندوز هتلاقي تطبيقات كتير أنت متعرفش عنها حاجة ولا هتستخدمها!
أما لينكس مش بينزل معاه غير أدوات بسيطة كفاية علشان تقدر تستخدم النظام، لا أكتر ولا أقل
ف النظام مش هيفترض أنك جيمر، ولا أنك جرافيك ديزاينر، ولا أنك يوتيوبر ولا أي حاجة!
هل ده معناه أنك متقدرش تستخدم لينكس لو كنت أي واحد من دول؟ لا أبداً
بالعكس هتلاقي تطبيقات كتييير ممكنش متلاقيش زيها ف ويندوز، بس لو عايزها هتحملها بنفسك ومش هتلاقيها جاهزة
ده أفضل لأنك كده عارف كل تطبيق على جهازك بيعمل ايه وبيشتغل ازاي، فيه ناس بتقضي شهور كاملة بتثبت لينكس، وتقعد تهندس وتصمم فيه بحيث يشتغل بأفضل طريقة ممكنة بالنسبة لهم
طيب هل الناس بتستخدم لينكس نفسه؟
لا.. بيستخدموا حاجة اسمها
linux distro
أو توزيعة لينكس
زي ما قلت لينكس نظام بسيييط وبدائي جداً، لو حملته لوحده كده مش هتقدر تشغله أصلاً، ف فيه ناس بقى بيضيفوا شوية تطبيقات ومميزات على النواة الأساسية ويعملوا توزيعة معينة
فيه توزيعة مثلاً اسمها mint
دي مشهورة بأنها شبه ويندوز ومناسبة للي لسة مبتدئين ف عالم لينكس
فيه توزيعة تانية اسمها arch

دي مشهورة بأنها صعبة ومحتاجة حد فاهم وعنده صبر علشان تشتغل
فيه توزيعة اسمها ubuntu
دي مشهورة ف عالم السيرفرات وشركات كتير بتثبتها على سيرفراتها
وآلاف وآلاف التوزيعات كلهم بيشتركوا ف حاجتين:
1- مبنيين على نواة لينكس
2- منشورين تحت نفس الرخصة
ايه هي الرخصة دي؟
هي رخصة GPL-v2
هي رخصة بتضمن لك الحق الكامل في استخدام، تعديل، نشر المشروع اللي منشور تحت الرخصة دي بشرط أنك لو نشرت المشروع بعد ما عدلت عليه تنشره تحت نفس الرخصة
كده ليناس تورفالدز مش بس ضمن أن نظام لينكس يبقى مفتوح المصدر، لكن أي نظام تشغيل مبني عليه كمان هيبقى مفتوح المصدر ومنشور تحت نفس الرخصة!
حتى أندرويد زي ما قلت مفتوح المصدر لأنه مبني على لينكس!
(ومفتوح المصدر مش معناها أنه مجاني، ممكن مشروع يكون مفتوح المصدر وبفلوس عادي بس ده موضوع تاني)

أنت لما تستخدم لينكس مش هتحمل نواة لينكس نفسها، أنت هتحمل توزيعة مبنية على لينكس حسب احتياجاتك كمستخدم... موضوع أنك تختار توزيعة ده محتاج وقت وتجربة كتيير جداً ولكنه ممتع، كل توزيعة ليها مميزاتها وعيوبها وبتكون مناسبة لمستخدمين ومش مناسبة لمستخدمين تانيين
وزي ما قلت الناس بتقعد شهور كاملة بس بتظبط النظام بحيث يكون مناسب لاحتياجاتهم وأدواتهم
مثلاُ الشخص الوحيد العربي الأستاذ أحمد الحسيني صاحب قناة أنا حر عمل سلسلة اسمها نظام لينكس حمل توزيعة اسمها فويد لينكس وبدأ يحمل أدواته ويبني نظام كامل مناسب لاستخدامه هو، ممكن تشوفوها من هنا
ولكن عند الأجانب بتشوفوا حاجات مجنونة بيعملوها بأدوات بسيطة
مثلاً بعطيكم مثال، ده شكل بسيط عملته بويندوز اللي هو أصلاً صعب تخصصه وتغير فيه إعدادات أخد مني 3 أيام بحث وتثبيت أدوات وتجارب:



أنا مجبر أستخدم نظام ويندوز علشان منصات 3 ثانوي لأنها مش بتدعم لينكس، ف فكرت أني أغير إعدادات النظام وأبني نظام مخصص لاحتياجاتي، ووصلت لنتيجية هي بسيطة بالنسبة للي أقدر أعملها ف لينكس لكنها كويسة بالنسبة لويندوز
في لينكس ببساطة مفيش حدود للي تقدر تعملها غير حدود معرفتك وخبرتك في عالم البرمجة وأنظمة التشغيل، وكل ما تتعلم حاجة جديدة بيزيد شغفك في أنك تتعلم وتخصص نظامك أكتر

بدأت البوست علشان أتكلم عن الحملة، لكن أكيد انتو تهتوا ونسيتوا الحملة أصلاً، الحملة بتشجع الناس تمسح ويندوز وتبدله بلينكس، طبعاً زي ما قلت بما أن لينكس نظام بسيط شوية ف تثبيته والتعامل معاه صعب ومحتاج معرفة ولو بسيطة بالبرمجة، وهيكون صعب لو مش مبرمج أنك تستخدمه، بس لو أنت عندك شغف أنك تتعلم ف أنا برشحه ليك وبشدة، وبالذات أن التوزيعات الحديثة زي مينت بقت بتعمل نص الشغل بدالك

لو عندك أي سؤال بخصوص لينكس فأنا موجود، اكتبه ف التعليفات وأنا هجاوب إن شاء الله!

ملحوظة: نظام البطريق مقصود بيها نظام لينكس، لأن اللوجو بتاعه هو بطريق مشهور جداً ممكن تبحث عنه

an idea for overclocked brains like me

 I have a CLI tool idea that'll be so powerful for people who always get so cool ideas that they want to test, but unfortunately it always comes in the wrong time or place (i.e. when you're in the bathroom or bed), we may call it "teda", TEst iDeA... basically it's a CLI tool to do much of the routine work required to test your ideas, for example let's say you got an idea of memory allocator in C that you really want to apply, you run something like:
teda "allocator" ~/tests/ -l=c

and it'll go to ~/tests/ dir, make a new dir called "allocator" (the project name) and it'll assume the language is C, we can support a lot of languages and each one has its own dir structure, for example C will tell the tool to make this dir structure:
allocator

|

|---src/

|
|---include/

|---README.md

|---.teda

|---CMakeLists.txt


and you have a dir structure ready to start coding directly!

now what about .teda file?
this is for teda tool itself to help you in the project itself not only in preparing it for you.. we can define a specific format this file will follow and teda will parse it, for example the first segment of the file can be build instructions, like:
mkdir -p build

cd build

etc..

and wherever you're in your machine, you can just type:
teda build allocator

and it'll go to ~/tests/ folder, search for a folder called "allocator", if it's not found it'll show us a beautiful message and exit, if it's found it'll go to that folder, search for .teda file, if it's not found it'll show us a beautiful message and exit, if it's found it'll execute the commands in the first part of the file, and now you have your project built and ready to run!
further more?
we can say the second segment is for building and running the project!
so it can simply be:
__BUILD__

./allocator

__BUILD__ is a reserved word and it tells teda to run another segment before this segment, in this case it's the first segment of the file, the build segment!


we can have punch of other segments, each with a corresponding command and you have total freedom about what gets executed there:
teda run, test, clean, docs (building the docs for the project) and more and more!


this idea is insanely powerful for me because I get A LOT of ideas every single minute!
I can show the structure of my tests folder:




and I have other tests I regularly remove when I feel they're not useful or practical!
and there is a good thing about this tool is that it's language agnostic, it can support as many languages as we want, and that it has no limits to what features we can add to make it easier to test an idea!

Sunday, March 29, 2026

windows lied on me and I caught it, here is how you catch it too!

there is a mis-understood information about windows I believed was right, but today I discovered it's not so accurate!
it's about the case sensitivity of windows filesystem, most people (and the 10-minutes ago me) think windows is case insensitive about files, meaning file.txt and File.txt are the same for windows, but this isn't actually in the kernel level!
it's in Win32 API level, in NT level, they're totally different!
but Win32 API can set a flag in any directory called "setCaseSensitiveInfo" that can be set to 1 or 0, when set to 1, windows will treat this directory and all its contents (including its subdirectories) as case sensitive directories and files!

the default in most cases is to be set to 0, because this is the standard in windows.. and it's better to not change this because some applications rely on the fact that windows filesystem is case insensitive, changing this may prevent such applications from accessing the files they need.. but for the sake of curiosity I wanted to test this..


so I made a new directory: D:\tmp\test

and I ran a utility called fsutil, it's a utility to manage your filesystem and I told it to set the "setCaseSensitiveInfo" flag to 1 (enable):
sudo fsutil.exe file setCaseSensitiveInfo D:\tmp\test enable

for those who don't know, windows now have sudo command, which is similar to linux sudo.. you can enable it from settings and configure it as you want!

then I went to test directory:
cd D:\tmp\test

and ran these 2 commands:
touch file.txt

touch File.txt

then I ran l (an alias for ls -lah), here is the result:

as you can see in test folder I have 2 different files that their names only differ in case!

to confirm this I wrote some text in both of the files:


and as you can see the cat command got different content (file.txt vs File.txt) to print each time!

but as I said above some applications may not work properly if you set this flag to directories they assume case insensitive!

another last info, drive letters such as C: and D: are just aliases to NT objects, if UNIX philosophy is tat "everything is file", then windows philosophy is that "everything is object", in the NT object namespace, you'll find every single object in your machine, such as objects that represent your drives.. if you're interested in exploring these objects you can try "WinObjEx64.exe" tool and thank me later :)


also I should note about something to not get misunderstood:
I started this series not to force windows to be linux, I have arch dual booted and can use WSL, but my goal is to understand windows and dive deep into its internals by discovering it piece by piece, the best way to do so for me is to experiment with it... this is just my goal from the serios :)
and because of this, it's not an organized series of articles, if you need such type of content you can check this repo, it's way better than my articles!
also this series has no clear end, I may simply end it if I felt bored from it and didn't like to complete it, and I don't have a specific point where I'll be satisfied with my system.. I'm just doing what I can for the sake of experiment

Friday, March 27, 2026

I couldn't come with a creative title for sorry!

today I wanna complete my journey trying to make a custom setup and workflow for my windows system.. the first post was "were we unfair with windows", you can search for it in the blog.


I made more advanced things the last 2 days, first of all, I installed glazewm tiling window manager which is really fast and feature-rich and lightweight, really recommend it but you'll need some time to get used to it if you have never worked with tiling window managers such as me!


I also downloaded gcc from scoop and pwsh (powershell core) from winget, I set pwsh as the default profile in windows terminal (via settings.json) and it's way better than cmd.exe, I feel it's a bit faster and cleaner, with auto-completion and UNIX commands I got from git bash, I feel like I'm using linux, further more with gcc and make I can compile projects meant for linux on windows if they just use standard C and gcc-specific features!


I also made some customizations in my pwsh profile, which is a script typically stored in Documents\PowerShell\Microsoft.PowerShell_script.ps1.. it's similar to .bashrc in bash shell!

if you use spotify web version and installed glazewm you'll probably face the problem of glazewm treating spotify overlay (the small overlay that appears when you leave spotify tab while some media is playing)  as a normal window and tiling it!
this is so ugly and takes much space, I fixed this by adding this rule to ignore that overlay in glazewm configs (typically found in C:\Users\<user_name>\.glzr\glazewm\config.yaml):

      - window_title: { regex: '[Pp]icture.in.[Pp]icture|^(.+?)\s?•\s?(.+)$' } <--- the second part of this rule after | symbol

        window_class: { regex: 'Chrome_WidgetWin_1|MozillaDialogClass' }


you'll find the first part of the rule along with other rules in window_rule: section, you just need to add "|^(.+?)\s?•\s?(.+)$" to window_title (it should be a regex rule not equals or anything else)!


I used "buttery taskbar 2" tool to hide the taskbar because I installed zebar tool which makes very beautiful status bars and integrates well with glazewm!

I made some other minor changes such as registry edits but I don't remember them all.. I also ran psexec -i -s cmd.exe to run the cmd shell as SYSTEM user and played around a bit with windows, deleted some files I felt unnecessary, etc.. but I don't recommend doing so as I was about to break my system!


after all these changes, my brother saw my system and thought I'm running on linux not windows!
without the windows icon in the top left, I'm sure no one would think it's windows at all:


in the next time, I think I'll focus on debloating the system and possibly the kernel if possible, I'll leave the GUI and beauty a bit and focus on performance, RAM and disk usage, removing all tools that doesn't suit me, etc..

an important note: glazewm will not be the fastest and I think this is because it works upon explorer.exe and dwm.exe, the shell and window manager of windows, so it's limited and restricted by what they provide, in linux-oriented TWMs such as dwm (by suckless), the TWM has more freedom since linux doesn't has a built-in WM, I'm thinking in how to solve it and I'll experiment a bit with cairo shell (a custom shell to replace explorer.exe) and I wish I reach something stable and efficient!

Wednesday, March 18, 2026

بداية البدايات

أنا معرفش دي المرة الكام اللي أحكي فيها قصتي مع البرمجة، بس كل مرة بحكيها بنفس الشغف والحماس لأني بحب القصة دي جداً وتعلمت منها كتير. مش ف البرمجة بس لكن ف الحياة عموماً


الموضوع كله يا سيدي بدأ بطفل صغير فحضانة خاله جا من السفر (الكويت) وكلمه عن اختراع عجيب، كلمه عن تليفون "لمس" زي ما كان بيقول وقتها، تليفون فيه شاشة زجاجية ولكن لما بتلمسها بتتحرك!

 ف الحياة عموماً
الطفل ده مكانش مقتنع، الحقيقة لا هو ولا والدته ولا حد من اخواته اقتنع أن ممكن حتة قزاز تستجيب لحركة ايدي!

ده كان ف 2 حضانة تقريباً، بعدها بسنة ف 1 ابتدائي والده جاب لوالدته تليفون "لمس" فعلاً، ودي كانت أول مرة يشوف حاجة أقرب للخيال منها للواقع، وكانت أول مرة يحس أنه عايز يتعلم الحاجة دي ازاي بتشتغل؟
وقتها مكانش عندهم راوتر ف البيت، بس بيت جده كان عندهم!
الطفل ده كان بيستنى أي مناسبة علشان يروح بيت جده ويفتح نت يعمل اللي عايزه، طبعاً كطفل أول حاجة جات ف باله هي أنه يلعب، ف بقى يحمل ألعاب مستحيل يقدر يفتحها كلها أصلاً بس أهو بيحملها وخلاص، وكمان بدأ يستكشف عالم تهكير الألعاب...

lucky patcher, king root, game guardian, cheat engine (for PC)

بدأ يهكر أي لعبة تجي ف باله، متعة تهكير الألعاب كانت أكبر من متعة أنه يلعب اللعبة اللي هكرها أصلاً.. فضل كام سنة ع الحال ده، بيحمل ألعاب، يهكرها، يلعبها لحد ما يزهق منها، ويعيد الكرة من الأول!
لحد ما جات لعبة اسمها lords mobile..

الفرق بين اللعبة دي وكل الألعاب اللي فاتت أنها كانت اونلاين، بس هو مكانش فاهم ده، حاول يهكرها هو وأخوه الأكبر منه، قعد شهور بيشوف أي فيديو ويحمل أي تطبيق يقابله علشان يهكر اللعبة دي، بس مقدرش!
والمشكلة أنه مكانش عارف السبب.. لحد ما شاف فيديو على اليوتيوب موجود لحد دلوقتي وده الرابط بتاعه.. الفيديو كان بيقول أن شبه مستحيل تهكر اللعبة دي لأنها "اونلاين" وأنت بتتصل ب "سيرفر" علشان تلعب.. دي كانت أول مرة ف حياته يسمع الكلمات دي، كمان صاحب الفيديو قال أن فيه ناس شغالة وظيفتها تحمي اللعبة من أنك تهكرها وهيحذفوا حسابك لو هكرتها، الكلام ده كان غريب بالنسبة له!
ازاي لعبة على جهازي أنا فيه ناس بعيدة بتحميها؟
هما كده بيتحكموا ف تليفوني؟
وازاي يحذفوا حسابي؟
حسابي على تليفوني هما ملهمش دعوة!
ده كله خلى عنده أسئلة كتير ملهاش إجابات، ولأن مكانش عنده راوتر ف مكانش عنده الوقت يلاقي إجابات مناسبة للأسئلة دي!
يكبر الطفل ده ويوصل ل6 ابتدائي، ف السنة دي والده قرر يجيب راوتر للبيت، وده كان ببساطة صندوق أبيض سحري بيفتح عالم فيه إجابات لكل الأسئلة اللي ف مخ الطفل ده!
مع الراوتر، والد الطفل قاله ف مرة هو واخوه "بدل ما انتو بتلعبوا طول اليوم ع التليفون، ليه متتعلموش حاجة تفيدكم اسمها البرمجة".. الطفل سمع الكلمة دي من هنا وفتح اليوتيوب وبدأ يسمع أي فيديو فيه كلمة "برمجة".. أول حاجة تعلمها كان لغة اسمها 
HTML (hypertext  markup language)

ودي كان بيعمل بيها مواقع، لكنه كان خايف من اللغة دي، كان حاسس أنها هتجيب له مصيبة!
لأن ف مرة وهو بيتعلم قرر يعمل موقع فيه

a tag

وده ببساطة رابط، بس لما تدوس ع الرابط ده، كان بيحمل ملف موجود على لاب توب الطفل.. ودي كانت مصيبة!
العالم كله هيحمل ملفات اللاب توب كلها ويشوف صوره وهو بلبوص!
ف كان خايف يعمل أي حاجة الناس تشوفها ع النت!
سابها وراح تعلم حاجات تانية، هو مكانش فاهم يعني ايه برمجة ف كان بيتعلم بعشوائية بحتة..
تعلم unity, unreal engine, C#, python, kotlin, CSS

فضل على العشوائية دي لحد ما كبر ووصل 2 ثانوي.. ف 2 ثانوي شاف اتنين ع اليوتيوب كان طريقة كلامهم مختلفة عن باقي الناس، باقي الناس كانت بتقول الكلام اللي يعجب الطفل ده ويخليه مرتاح.. الاتنين دول كانوا دايماً بيقولوا كلام صعب، كلام الطفل بيتمنى أنه غلط، لكنه كان دايماً بيطلع حقيقي!
كل مرة.. يقولوا حاجة، الطفل يحس بالرعب منها، ويحبط لفترة، ويرجع يلاقي أنها صح!
الاتنين دول واحد فيهم اسمه الدكتور محمد أبو هدهود، والتاني هو الباشمهندس محمد مشرف!
وللحكاية بقية..

Saturday, March 7, 2026

were we unfair with windows?

(this blog can be a bit rage baiting for linux users... I'm not responsible)

I have arch linux and windows 11 dual booted on my PC, most of my work is on arch but I study for the school in some platforms that doesn't work in linux, so I use windows for studying... I have gcc, make, cmake and other software development regular apps on my arch installation, I love that they are CLI based, I love the simplicity and minimalism of these tools and I HATE the bloated tools of windows, I hate telemetry and I hate that Bill Gates buys pizza using the money that he got by selling my data!

but once upon a time, I was really lazy to study, so I wanted to discover what microsoft provides in the realm of software development tools?
if there is no tools made by microsoft, I can download 3rd party tools. I had visual studio 2022 installed but I wondered what is the C/C++ compiler that actually compiles the code under the hood?
can I access it through command prompt?
I discovered that I can, more than that, I discovered that there is a COMPLETE ecosystem built for C/C++ development that's very mature and can overcome open-source tools!
I found cl.exe (C/C++ compiler), mt.exe (for managing app manifest), rc.exe (for managing app resources), NMAKE (GNU Make clone), MSBuild (a custom build system), dumpbin (for dumping executables and object files), WinDbg (windows debugger, thought it's not accessible through CLI), CMake and MANY MANY other tools!
it didn't take me one week to intuitively understand the basics of these tools and started working with them, integrating them is a piece of cake, and the results are really impressing!

why I'm saying that?
I don't mean microsoft is a good company or windows is a good OS, windows still a bloated spyware, and microsoft still relies on your data to fill up Bill Gates credit card!
but I'm saying that, at least you can change this by a bit simple work.. I really loved the vibes or windows-similar-to-linux experience!

- I even compiled neovim from source for the sake of doing so using CMake and it's working well up till now (but I think I needed lua installed or smt.. check the depdendencies)!
- I added the developer command prompt as a dedicated visual studio code terminal profile to integrate it in visual studio code, and it's working surprisingly well!
- CMake can make NMAKE files and visual studio solutions for you, it depends on whether you want to deal with visual studio or not!

- you can actually install clang compiler in windows via visual studio installer, while I didn't try it, I'm sure it'll be interesting!


a simple note that microsoft linker doesn't support linker script, this can be bad if you're working on a specific project that needs specific memory layout, but most of the use cases can be done through the command line arguments (microsoft uses /option instead of -option for most of the tools)

it's really an interesting and exciting experience, I suggest you to try it in a VM if you only have linux installed!

you'll have the advantage of fucking around with the OS freely!


a new UPDATE:
I don't know how I missed this, but since I have git bash installed on my machine, I already have most of the linux utilities I use in day to day work!
I have grep, tar, ls, less, which, wc, cat, du (disk usage), touch installed in C:\Program Files\Git\usr\bin... I just added this path to my PATH environment variable and I can use them ALL!
further more? that dir has bash.exe.. which means by simply typing "bash" in my windows terminal, I can use bash shell itself opened in the current dir and ready for work!
there are some conflicts that will happen, windows has find command and that dir contains a find.exe file.. the solution I made is that I added C:\Program Files\Git\usr\bin to the system PATH and I added it bove system32, by this, windows will first see the utilities from git before its own utilities. I don't know the side effects of this but it works pretty well for me!

on behalf of the user, by the name of laziness

 people tend to see engineering as a mysterious field only the chosen people can specialize in, today, as a software engineer, I'll spoi...