Scrubbing your HDD/SSD data to mitigate bitrot (without 3rd party software)

Note: Excuse me if this post appears mirrored. I could not fix it, but you can try pressing Ctrl+Shift+X or Ctrl+Alt+X and hope that your browser switches the page’s reading-direction.

Bitrot is a real threat, regardless of what storage media is being used. And while some file systems (e.g. ReFS, ZFS) implement automatic measures to protect against bitrot, they might not be readily available, or implementing them could mean too much technical knowledge or work than one can afford.

Besides, self-healing or resilient file systems aren’t practical for certain types of storage media, such as USB drives (containing flash banks or HDDs).

For the unprotected file systems, one can only cross their fingers and hope that the data will keep its integrity. However, there are applications out there that do a raw data read to help the drive detect and correct any potential or partial read errors before they become permanent. The work principle is pretty simple, the program just asks for the contents of the file. The drive contains the error-correction mechanisms in case some data block has correctable errors.

I personally prefer to do this kind of check on my portable drives without using any exotic tools. On Windows (while the performance is not great this is a quick and easy way), I just open a command prompt with administrator privileges, and issue the following instructions (for scrubbing drive D:), which cause the system to read all files in the current directory and its sub-directories recursively, sending the output from this read operation to the NUL special device, effectively not outputting anything to the screen other than the file name:

CD \
FOR /r %i IN (*) DO TYPE "%i" > NUL
Drive read activity

On Linux I use the dd command to read the whole drive or partition.
Assuming the partition is /dev/sdb2 (you can use lsblk to list all block devices and their partitions), this is the command:

dd if=/dev/sdb2 of=/dev/null status=progress bs=16K conv=noerror

There must be a better way on Linux to check only the files, not the whole partition, but I really didn’t get to need to do it that much, so I’m leaving it here.

الفرق بين البلاغ و التعميم

كنت في منشور سابق (قبل عدة سنوات) قد تحدّثت عن الفرق بين القانون و القرار والمرسوم التشريعي، إلخ. ولم يكن واضحاً بشكل جيّد ما المقصود بالتعميم والبلاغ.

مؤخراً أصدر مجلس الوزراء في سورية قراراً وضّح فيه ضوابط ومعايير البلاغات والتعاميم.
هذا القرار ذو الرقم 16/م.و. بتاريخ 2021-02-28 شرح الفرق كالتالي:

أولاً- التعاريف:

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

ثانياً- الضوابط و المعايير:

أ- يراعى عند إعداد و صياغة و تنظيم البلاغ ما يلي:

1- يتم استعمال أسلوب البلاغ و اللجوء إليه عندما يكشف التعامل مع موضوع معين عن وجود خلل أو قصور أو غموض ما في معرض تطبيق نص قانوني أو تنظيمي أو مشكلة تحتاج إلى توضيح و أسلوب معالجة.
2- يجب أن يحتوي البلاغ على ما يلي:

  • بيان تعليمات و إرشادات مقرونة بالتنبيه و الحض على التنفيذ.
  • الإشارة إلى صفة الإلزام في التنفيذ و المساءلة التي تترتب على عدم التقيد.
  • تحديد سبب الإصدار و السند القانوني اللازم.
  • التذكير بالأثر القانوني المترتب على عدم التنفيذ.
  • تحديد المؤيد و المساءلة.

ب- يراعى عند إعداد و صياغة و تنظيم التعميم ما يلي:

1- يتم استخدام أسلوب التعميم عند اقتصار الموضوع على التذكير أو إيصال معلومة معينة إلى المعنيين بتطبيقها.
2- يجب أن يحتوي التعميم على ما يلي:

  • إرشادات معينة أو إيصال معلومة الغاية منها مصلحة العمل و تسييره.
  • عدم الإشارة فيه إلى أي طابع إلزامي أو أية مساءلة تأديبية نتيجة عدم التقيد.
  • إدراج سرد للمعلومات و الأسباب الداعية للصدور.

ج- لا يجوز تنظيم موضوع معين ببلاغ أو تعميم متى استوجب القانون تنظيمه و إصداره بقرار.


An article appeared recently on explaining how an attack called “Typosquatting” works. This is not a new concept, but the implementation is interesting.

The way this works is that an attacker crafts a malware, then this malware itself (or a code that downloads and activates it) is then implanted in an innocent-looking code library.
The trick is to make a copy of a commonly used component or code library, name this copy with a name similar to original name but with a slight variation in the spelling which can result from a common typo. The malware is included in the fake copy explicitly or in a obfuscated manner to make it harder to get detected.

An well-intentioned developer writing code that uses that library writes an include statement that mistakenly references the malware-infused library, and that’s it. The bad library should function just like the original one, with some added (undesired) functionalities.

I could imaging this happening in a different way, given the current broad and expansive use of open source components, and the complexity of dependencies.
E.g. In the context of an open source project, the maintainers rely on other open source projects, and they trust the maintainers of those projects to provide well-maintained code. The 2nd level maintainers also depend on other projects, and the chain goes on. Many, if not all, of these open source projects rely on communal support and code enhancements. Eventually someone somewhere will go rouge and intentionally push an update that references IibraryO instead of library0, which the project maintainers might overlook because the two words look similar, but this action will have an effect which cascades over tens of dependent projects causing them all to become vulnerable on the next compilation.

I think the solution to this problem is to implement a black-listing system maintained by the same open-source communities; this system would include a way to submit suspicious projects, and a scoring mechanism to indicate the reputation of a specific component.

إنتهاء دعم التحديثات لبعض إصدارات مجموعة حمورابي

بدءاً من تاريخ 2019-07-17 سوف تظهر رسالة تنبيهية عند مستمثري حمورابي للإصدارات من 7.40 إلى 7.50 تفيد بأن الإصدار الذي يستخدمونه من البرنامج قد لا يدعم التحديثات التي سيتم إصدارها مستقبلاً.

لماذا، وماذا يعني هذا؟

بدءاً من الإصدار 7.49 (بتاريخ 2018-06-09) من مجموعة حمورابي تم نقل معالج التحديث الحي إلى قسم مستقل من المجموعة ضمن خطة تمكينه لتحديث مختلف عناصر المجموعة بدلاً من الاقتصار على المكتبة القانونية فقط.

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

بعد مدّة عثرنا على مشاكل برمجية في معالج التحديث الحي، وهذه المشاكل أدّت إلى عدم قدرتنا على إجراء تحديث لمعالج التحديث عن بعد (أي أن معالج التحديث عاجز عن تحديث نفسه بنفسه). لذلك فقد قمنا بإصلاح هذه المشاكل في الإصدار التالي رقم 7.50 بتاريخ 2018-09-01، ثم تمت إضافة ميزات جديدة لا يمكن توفيرها عن بعد في الإصدار 7.60 بتاريخ 2019-01-11.

بما أن إصدار تحديثات للبرامج يتطلب قدرة معالج التحديث الحي عند المستثمر على استيعاب صيغة هذه التحديثات، وبما أن معالج التحديث الحي عاجز عن تطوير نفسه في ذلك الإصدار، لذلك تطلّب الأمر تنبيه المستثمرين لهذا القصور (الذي يؤدي إلى عدم استيراد بعض التحديثات).

الإصدارات الأقدم:

بالنسبة للمستثمرين العاملين على الإصدارات السابقة لـ 7.49 فإنهم أيضاً عرضة لتوقفهم عن استلام التحديثات لأن معالج التحديث الحي لديهم غير قادر على تضمين التطويرات البرمجية والتصميمية للمكتبة القانونية، وهذا يؤدي إلى تعذّر تضمين التحديثات الجديدة التي تعتمد على تصميم أحدث للبرنامج.

تحديث: بدءاً من تاريخ 2020-03-31 تم إنهاء الدعم لمعالج التحديث الحي المرفق مع الإصدارات 7.48 وما قبل من مجموعة حمورابي القانونية.

ما الحل؟

لذلك نحن نشجّع المستثمرين الكرام على تطوير إصدار حمورابي الذي لديهم إلى أحدث إصدار بتنزيل البرنامج عبر هذه الوصلة:

ولكن نرجو الانتباه إلى حاجتكم لأن يكون لديكم اشتراك بالتحديثات ساري بتاريخ إصدار البرنامج. للتحقق من تاريخ سريان اشتراككم يمكنكم فتح قسم المكتبة القانونية فتظهر بيانات الاشتراك في نافذة الترحيب، أو الاستفسار من خدمة مستثمري حمورابي عبر الهاتف.

ماذا قد يحصل إن لم تقوموا بالتطوير؟

إذا لم تقوموا بتطوير إصدار مجموعة حمورابي الذي تعملون عليه قد يتوقف معالج التحديث الحي عن تحديث البرنامج بدون إظهار أي مؤشر يدل على ذلك. وهذا يعني ثبات البرنامج على حالة قديمة رغم اشتراككم بالتحديثات والتطويرات.

هل تحتاجون لمساعدة أو مزيد من المعلومات؟

إذا كان لديكم أي استفسار أو كنتم بحاجة لمزيد من المعلومات حول هذا الموضوع، لا تترددوا بالتواصل معنا عبر بيانات الاتصال المذكورة على الصفحة التالية:

How to fix: Unexpected duplicate entries found in events4.nsf


Some times after you upgrade the Domino server, you might occasionally see this error message in the console:

Diagnostics on view ($Messages) of database events4.nsf was aborted: Unexpected duplicate entries found.

Which basically indicates that there are some Event Messages sharing the same Event ID.

This can happen because some Event Messages might have been updated in the events4 template shipped with the new version, and when these updated messages are copied to the old database, the old message may get left over for one reason or another. In one case I found that the Event ID had different capitalization in the duplicate documents.

Regardless of the reason, you want to clean the duplicates up. The first thing to try is to let the Event task take care of it by issuing the command:

tell event clean ($Messages)

If the error message you’re receiving is about an issue in a different view, you can change the view name in this command. Basically the syntax is:

tell event clean <view name>

If this does not solve your issue, you can write a simple Agent that scans the affected view directly. To do so:

  1. Open the events4.nsf database in the Domino Designer.
  2. Create a new Agent (Lotus Script). Name it: Detect $Messages duplicates
  3. Use the following code, which checks for duplicates in the ($Messages) view.
  4. Change the Agent Trigger to “Actions Menu”, and the Target to “None”. Then save it.
  5. Run the Agent from the Notes Client.

Here’s the code:

Sub Initialize
 Dim s As New NotesSession
 Dim db As NotesDatabase
 Dim v As NotesView
 Dim doc As NotesDocument

 Set db = s.CurrentDatabase
 Set v = db.GetView("($Messages)")
 Call v.Refresh()
 v.AutoUpdate = False

 Set doc = v.GetFirstDocument()

 Dim dc As NotesDocumentCollection
 Dim ID As String

 Do Until doc Is Nothing
   ID = doc.GetItemValue("Value")(0)
   Set dc = v.GetAllDocumentsByKey(ID, True)
   If dc.Count > 1 Then
     Print "Message with ID: " & ID & " is duplicated."
     MsgBox "Message with ID: " & ID & " is duplicated. No more processing will be done. Additioanl duplicates may exist."
     Exit sub
   End If

   Set doc = v.GetNextDocument(doc)

 MsgBox "No duplicates found."
 Print "No duplicates found."
End Sub

When run, this Agent will show a message box with the Event ID of the first duplicate Event Message it encounters.

To resolve the duplication, in the Notes Client, while the events4 database is open, open the View menu, hold down Ctrl+Shift, and click Go To…

Select the ($Messages) view from the list to open this view, and then search for the Event ID.

It’s up to you to decide how to resolve the duplication. Basically you can just review the documents, then decide to keep one of them and delete the other. If you are not sure, check the creation & modification times of the documents. You can also check the same ID in the template events4.ntf.. In this case, you might as well just delete all of the Event Messages and copy them from the Template. However, I have not tested whether this could cause any undesired side effects, so you may want to test with it after taking a backup.

إطلاق خدمة التطويرات والتحديثات لمجموعة حمورابي

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

ابتداءً من تاريخ 2016-07-12، ورغبة من المؤسسة في تحسين نوعية التحديثات والتطويرات على حد سواء، وبما لا يخالف البند المذكور من اتفاقية الاستثمار، تم تعديل بدل التحديث، بحيث لم تعد التحديثات والتطويرات تقدم مجاناً، وعلى المستثمر أن يدفع بدل اشتراك عن فترة معينة (مثلاً سنة أو نصف سنة) وهذا البدل هو مقابل التحديثات والتطويرات الصادرة خلال تلك الفترة سواء تم الحصول عليها على سيدي، أو عن طريق الانترنت بالتحديث المباشر أو تحميل الإصدارات الجديدة من موقع يسران على الانترنت.

والتزاماً من المؤسسة في تقديم خدمات نوعية بأسعار مناسبة، فقد تم تحديد بدل مناسب للاشتراك بخدمة التحديث، بحيث لا تشكل عبئاً على المستثمرين، وبذات الوقت تتيح للمؤسسة العمل على تحقيق الغرض من الاشتراكات وهو تحسين نوعية خدماتها.

ومن الجدير ذكره أن بدل الاشتراك مطلوب فقط للتحديثات التالية لتاريخ 2016-07-12، وبالتالي يمكن لأي مستثمر لا يرغب بتحديث برنامجه بعد التاريخ المذكور أن يتابع العمل على إصدار حمورابي الموجود لديه بما يحتويه من بيانات ومزايا، علماً بأن أحدث إصدار من حمورابي بتاريخ 2016-07-12 هو الإصدار رقم 7.37.
وهكذا، لا تزال المؤسسة ملتزمة بتقديم خدمات التسجيل والدعم الفني (عبر الهاتف أو الإيميل) مجاناً وذلك لكافة إصدارات حمورابي السابقة للتاريخ المذكور، ويمكن للمستثمرين متابعة عملهم على الإصدارات الموجودة لديهم دون الحاجة لدفع أي مبالغ. أما الإصدارات (التحديثات والتطويرات) التالية لهذا التاريخ فيتطلب الحصول عليها الاشتراك بخدمة التحديث والتطوير وهي خدمة غير مجانية.

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

لمستثمر حمورابي من سنة 2010 ولم يحدّث البرنامج منذ عام 2014، يعتبر اشتراك التحديثات والتطويرات الخاص به منتهياً، ولكن يمكنه الحصول على الإصدار 7.37 مجاناً باعتباره آخر إصدار يمنح مجاناً للمستثمرين، كما يمكنه الحصول على مفتاح التسجيل وتشغيله دون دفع بدل اشتراك، ولكن بحالة رغبته بالحصول على التحديثات والتطويرات التي صدرت بعد 2016-07-12، فالأمر يتطلب شراء اشتراك (لمدة سنة أو نصف سنة وفقاً لرغبته).

بالنسبة لطرق دفع بدل الاشتراك الجديد، فيمكن أن يتم ذلك عن طريق حوالة لمؤسسة النبراس للبرمجيات (وكيل برنامج حمورابي) في حمص، أو بالتواصل مع مندوب برنامج حمورابي والدفع له بموجب إيصال، أو الإيداع بالمصرف العقاري.
لتفاصيل أكثر عن طرق الدفع نرجو منكم التواصل مع مؤسسة النبراس للبرمجيات في سورية عبر الموقع:
أو التواصل مع يسران عبر الموقع:

يبدأ اشتراك التحديثات الخاص بكم بتاريخ استلام رسم الاشتراك، ولو لم يتم تفعيله أو استخدامه من قبلكم.

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

تؤكد المؤسسة التزامها بتقديم أفضل الخدمات للمستثمرين بأسعار معقولة وبمحافظتها على جودة منتجاتها وخدماتها، لتكون دائما عند ثقة المستثمرين وحسن ظنهم.

مع أطيب الأمنيات

Coding Sins: Empty HTTP Header with MS WB

It’s a sin to try to send an HTTP header with an empty value using the Microsoft Web Browser Control. Just keep this in mind, and promise never to do it.

Including a no-value header causes the control to fail to load the URL and to not fully respect the ‘Cancel=True’ returned in its NavigateError event.

E.g.: If your headers look like this, they will certainly break the browser:


سبب أساسي للاختراق و الإصابة الإلكترونية

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

How to go over Documents in a Notes View in a random order

Today I had the need to process documents in a certain view in a random order.

I have read previously about different algorithms that would iterate a collection (or array) randomly. Luckily, in Notes this can be achieved very easily using a View.

  1. Create a new View. Let’s name it “RandomDocs”.
  2. Set the selection formula to contain your documents of interest.
  3. Set the index to get built manually and expire immediately. This will force Notes/Domino to rebuild the View’s index every time it is accessed by your script, but not in the nightly index update.
  4. Add a column, sorted ascendingly or descendingly, and use the following formula:
  5. Save and close the View.
  6. Use a script like this to iterate over the documents randomly:
Sub Initialize
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim v As NotesView
    Dim doc As NotesDocument
    Set db = s.CurrentDatabase
    Set v = db.GetView("RandomDocs")
    v.AutoUpdate = False
    Call v.Refresh()
    Set doc = v.GetFirstDocument
    Do Until doc Is Nothing
        'We've got a random document in hand.
        Print doc.GetItemValue("Subject")(0)
        Set doc = v.GetNextDocument(doc)
End Sub

That’s it!

Remember that every time the script runs the View’s index is getting rebuilt. This is not a very friendly operation for Domino/Notes, especially when the database contains thousands of documents, even if only a few are being filtered into the view, so you might want to wisely consider when and how often this code runs.


نشر موقع SlabNews مقالة كتبها “معتز منصور” يلفت فيها النظر إلى بعض النقط الهامة التي قد تكون قد ساهمت في النزاع الحاصل في سورية

الأفكار المطروحة قديمة وقد سمعت بها منذ بدايات عام 2012، ولكنها مدعومة بأخبار آخر التطورات بهذا المجال. لذلك من الجيد أن يعاود المرء تحديث معلوماته.

المقالة على الرابط التالي: