Open Self-Hosting
Self-hosted. Open-source. Privacy-first. Your server. Your data. Your keys. OpenSelfHosting.com
Mostrar más📈 Análisis del canal de Telegram Open Self-Hosting
El canal Open Self-Hosting (@openselfhosting) en el segmento lingüístico de Árabe es un actor destacado. Actualmente la comunidad reúne a 11 653 suscriptores, ocupando la posición 10 656 en la categoría Tecnologías y Aplicaciones y el puesto 6 637 en la región Arabia Saudí.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 11 653 suscriptores.
Según los últimos datos del 31 octubre, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -299, y en las últimas 24 horas de -17, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 7.71%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 1.50% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 0 visualizaciones. En el primer día suele acumular 175 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 0.
- Intereses temáticos: El contenido se centra en temas clave como ذَات, قَنَاة, إِنتِرنِت, بُرمُجَة, تَجمِيعَة.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Self-hosted. Open-source. Privacy-first.
Your server. Your data. Your keys.
OpenSelfHosting.com”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 01 noviembre, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
def my_decorator(func):
def wrapper():
print("قبل تنفيذ الدالة ...")
func()
print("بعد تنفيذ الدالة ...")
return wrapper
@my_decorator
def say_hello():
print("مرحباً بالجميع!")
say_hello()
هنا:
1. تُعرَّف الدالة my_decorator التي تستقبل الدالة func كوسيط.
2. تُنشأ داخلها دالة أخرى اسمها wrapper تُنفذ أي كود إضافي قبل وبعد استدعاء func().
3. عندما نضع @my_decorator فوق الدالة say_hello، فهذا يعني أننا نطبّق التغليف نفسه على الدالة say_hello.
⌯ استخدامات الديكوريتر الشائعة :
ـ = = = = = = = = = = = = = = = = = = = =
• تسجيل النشاط Logging: مثلاً تسجيل وقت تنفيذ الدالة أو القيم المعادة.
• التأكد من الصلاحيات Checking Permissions: مثل أن يُنفذ كود معيّن فقط إن كان المستخدم لديه الصلاحيات المناسبة.
• قياس الأداء Performance Measurement: حساب المدة الزمنية التي تستغرقها الدالة في التنفيذ.
• التخزين المؤقت Caching: لتسريع استدعاء الدوال ذات الحسابات الثقيلة بتخزين نتائجها وإعادة استخدام النتيجة المخبأة عند الاستدعاء مرة أخرى.
⌯ ديكوريتر الدوال والدوال ذات الوسائط ( Arguments ) :
ـ = = = = = = = = = = = = = = = = = = = =
• يمكن استخدام الديكوريتر مع دوال تأخذ وسائط، بحيث يتم تمرير تلك الوسائط للـ wrapper.
مثال:
def decorator_with_args(func):
def wrapper(*args, **kwargs):
print("تم استدعاء الدالة بالوسائط التالية:", args, kwargs)
return func(*args, **kwargs)
return wrapper
@decorator_with_args
def add(a, b):
return a + b
result = add(3, 5)
print("النتيجة:", result)
في هذا المثال:
1. نستخدم *args و **kwargs داخل wrapper حتى نلتقط أي عدد من الوسائط.
2. نطبع الوسائط قبل أن ننفذ الدالة الأصلية.
3. نعيد الناتج النهائي للدالة add.
⌯ ديكوريتر الكلاسات ( Class Decorators ) :
ـ = = = = = = = = = = = = = = = = = = = =
• يمكن أيضاً تطبيق ديكوريتر على الكلاسات بوضع @decorator_name فوق تعريف الكلاس.
• يتم تمرير الكلاس نفسه إلى الديكوريتر كوسيط، ثم يُعاد كلاس جديد أو نفس الكلاس مع تعديل أو إضافة بعض الخصائص عليه.
مثال بسيط :
def class_decorator(cls):
class NewClass(cls):
def new_method(self):
print("هذه دالة جديدة تمت إضافتها عن طريق الديكوريتر")
return NewClass
@class_decorator
class MyClass:
def original_method(self):
print("هذه الدالة الأصلية من MyClass")
obj = MyClass()
obj.original_method()
obj.new_method()
هنا:
1. يستقبل الديكوريتر class_decorator الكلاس MyClass.
2. ننشئ كلاس جديد اسمه NewClass يرث من MyClass ويحتوي على دالة إضافية.
3. نعيد هذا الكلاس الجديد بدلًا من الأصلي، فيكون بالإمكان استدعاء الدالة الجديدة.
4. كما لايقتصر استخدامه على الكلاسات فقط بل على الدوال أيضاً على سبيل المثال
def check(clc):
def comp(a, b):
if a > 0 and b > 0:
print("pass")
clc(a, b)
else:
print("error")
return comp
@check
def calculator(a, b):
print(a + b)
calculator(0, 5)
في هذا المثال قمنا بتعريف (chack) يقوم بفحص الاعداد اذا كانت اكبر من 0 ومن ثم قمنا باستخدامها في داله (calculator).