-
المساهمات
4847 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
11
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
أجوبة بواسطة عبدالباسط ابراهيم
-
-
ربما تم تحديث المسارات ولكن بالنسبة
- للدروس الخاصة بال API فهي موجودة في هذا الرابط
- والدروس الخاصة بالتعامل مع خدمات التخزين السحابي AWS S3 فستجدها في المشروع تطبيق مشاركة الفيديوهات والجزء الخاص بال AWS S3 ستجده أيضاً في هذا الرابط
بالطبع يمكنك الدخول للروابط السابقة إذا كنت مشترك في دورة تطوير تطبيقات الويب باستخدام لغة PHP ويفضل الإلتزام أيضاً بترتيب الدروس حتى لا تفوت جزء مهم من الشرح
-
يمكنك أيضاً بما أنك تستخدم list بواسطة python
- إنشاء list فارغة وإضافة البيانات التي تريدها
-
ثم في الأخير تقوم بتحويلها ل numpy array
import numpy as np list = [] list.append([1,3,5]) list.append([2,4,6]) array2 = np.array(list) print(array2) #الناتج: #[[1 3 5] # [2 4 6]]
ولاحظ أنه في حالة كنت تستخدم for loop سيكون من الأفضل استخدام list ثم تحويلها لمصفوفة بدلاً من عمل append لمصفوفة numpy بداخل ال for loop إذا كنت تهتم للسرعة
- 1
-
يمكنك بالطبع عن طريق تغيير إعدادات الطباعة من خلال set_printoptions بواسطة المعامل suppress=True كما في التعليقات السابقة ولكن أحياناً تحتاج لتنفيذ هذه الإعدادت locally ويمكنك عمل ذلك من خلال context manager لذلك يكون الكود كالتالي
x = np.random.random(10) with np.printoptions(precision=3, suppress=True): print(x) # [ 0.073 0.461 0.689 0.754 0.624 0.901 0.049 0.582 0.557 0.348]
لاحظ أنه إذا قمت بالطباعة خارج هذا ال context manager سترجع إعدادات الطباعة كما كانت
print(x) # [ 0.07334334 0.46132615 0.68935231 0.75379645 0.62424021 0.90115836 # 0.04879837 0.58207504 0.55694118 0.34768638]
-
نعم يمكنك تنفيذ المطلوب بواسطة الكود التالي
app.get(/^\/(posts|articles)\/(.+)/, function (req, res, next) { });
لاحظ أن
- (+) يعني وجود slug حيث أن يجب أن يحتوي حرف واحد للتأكيد من وجود ال slig
أو يمكنك استخدام الحل التالي
app.get('/:type(posts|articles)/:id', ...)
-
كما تم التوضيح في التعليق السابق أنه sign لا تعني أن ال cookies ستكون مخفية ولكن سيتم إضافة توقيع إليها وهناك بعض الفروقات بين cookie و signed cookie
-
لا يمكننا تحديد ما إذا كانت البيانات التي يتم إعادتها يتم تعديلها من قبل العميل أم لا. ذلك في حالة ال cookie بينما العكس في ال signed cookie يمكننا تحديد ما إذا كانت البيانات التي يتم إعادتها يتم تعديلها من قبل العميل أم لا
-
ويضاف التوقيع كجزء من ال sigendCookie إلى جانب بيانات sigendCookie الفعلية وهذا التوقيع معروف من ناحية السيرفر فقط
-
-
يمكنك عمل untrack لمجلد أو ملف ما حيث عند عمل untrack له سيتجاهله git ولن يضيفه لقائمة التغييرات وهذا ما تبحث عنه
ولكن كيف تقوم بذلك
- إنشاء ملف يسمى .gitignore لاحظ النقطة والتسمية وسنقوم بإنشاء هذا الملف في ال root للمشروع
- ثم تقوم بفتح الملف وتضع به اسم الملف أو المجلد فقط وبذلك تقوم بجعل هذا الملف untracked
قم بهذه الخطوات وسيتم تنفيذ ما تريده
يمكنك أيضًا القراءة عن هذا الموضوع عن طريق البحث عن gitignore
-
تختلف الشروط اللازمة لإستخراج بطاقة من دولة إلى أخرى فيجب عليك مراجعة الشروط الخاصة بالبنوك الموجودة في دولتك
ولكن أعتقد أنه لا يمكنك إصدار بطاقة بعمر 13 عام ولكن يمكنك استخدام بطاقة أي شخص من عائلتك أو شخص تثق فيه وليس هناك مشكلة في ذلك
قم بقراءة الإجابات على هذا السؤال أيضاً
-
يمكنك استخدام ال log-timestamp ببساطة من خلال إضافتها فقط
أولاً تقوم بتثبيتها من خلال npm
npm install log-timestamp
ثانياً تقوم بإستدعائها والطباعة لرؤية الفرق
console.log('Before'); require('log-timestamp'); //هذا السطر هو المطلوب فقط console.log('After');
كما يمكنك استخدام الحل التالي إذا كنت لا تحتاج لإستخدام أو إضافات خارجية
var origlog = console.log; console.log = function( obj, ...placeholders ){ if ( typeof obj === 'string' ) placeholders.unshift( Date.now() + " " + obj ); else { // This handles console.log( object ) placeholders.unshift( obj ); placeholders.unshift( Date.now() + " %j" ); } origlog.apply( this, placeholders ); };
-
أولاً يعتبر الحصول على عمل من خلال منصات العمل الحر صعباً في البداية وهذا ليس له علاقة بمستواك في المجال إنما لأانك جديد على المنصة فليس هناك أعمال لك على الموقع أو تقييمات ولكن مع الإستمرار في تقديم العروض ستجد بعض المشاريع
ولكن هنا بعض الأشياء التي تضمن لك الحصول على عمل أو تسرع من فرص حصولك عليه مثل
- ال profile الخاص بما يحتوي من الأعمال السابقة
- طريقة تقديم العرض على أي مشروع
- طريقة تعريف نفسك في ال profile
يمكنك قراءة العديد من النصائح في إجابات هذه الأسئلة
-
حتى نستطيع عكس الترتيب للتنازلي بواسطة argsort ربما نحتاج لعكس المصفوفة الناتجة من هذه الدالة ويمكننا عكسها كالتالي
avgDists=np.array([1, 8, 6, 9, 4]) ids = avgDists.argsort()[::-1][:3] #لعكس المصفوفة نستخدم [::-1] ids array([3, 1, 2])
أو يمكننا تحويل القيم لقيم بالسالب
import numpy as np avgDists = np.array([2, 9, 7, 10, 5, 3]) ids = (-avgDists).argsort()[:n] #(-avgDists) لاحظ print(ids)
- 1
-
يمكنك استخدام الدالة np.place حيث يمكنك التحقق من الشرط أولاً ثم استبدال العناصر التي تريدها
لاحظ المثال التالي
import numpy as np # إنشاء مصفوفة 2*3 بالقيم من 0...5 arr = np.arange(6).reshape(2, 3) # استبدال الرقم 2 ب 3 np.place(arr, arr == 2, 3)
كما يمكنك استخدام ال fancy indexing كالتالي
arr[arr > 255] = x
سيتم استبدال العناصر الأكبر من 255 بالقيمة x
تعتبر الطريقة الثانية هي الأسرع
- 1
-
يمكنك استخدام الخاصية .size من numpy ولذلك لتنفيذ الكود السابق سيتم تعديله كالتالي
import numpy as np a = np.array([[]]) if a.aize == 0: print('empty') else: print('not empty')
لاحظ أن المصفوفة فارغة عندما ترجع ال a.size رقم 0
ولكن هناك مشكلة أن ال size تقوم بإرجاع واحد عند تنفيذها على np.array(None)
import numpy as np np.array(None).size #1
- 1
-
كما تم الشرح في التعليقات السابقة فالمشكلة أن العناصر بداخل overlayer تأخذ نفس ال opacity من الأب وهو overlayer لذلك الحل لهذه المشكلة ببساطة هو جعل العناصر بداخل ال overlayer بنفس المستوى
وهذه الطريقة هي المفضلة لعمل ال overlay لاحظ التعديل
<div class="homeSection"> <div class="overlayer"></div> <div class="home-content"> <!--ووضعه بنفس المستوى overlayer قمت بإخراج هذا العنصر من --> <div> <h1 class="title">we are creative agency</h1> <p class="p"> <span class="nr">Nawwar</span> is an Egyptian IT-Training Center founded in 2012 We have identified the unique challenges people may face in learning a new technology and have exerted efforts in providing strategies to overcome them. We welcome your participation in our training </p> <button class="btn btn-start">Get started</button> <button class="btn btn-learn">Learn more</button> </div> </div> </div>
وباستخدام هذه الطريقة لن تحتاج للتعديل في التنسيقات
- 1
-
يمكنك استخدام scipy.stats ونستخدم منه الدالة scoreatpercentile كالتالي
from scipy import stats a = np.arange(100) stats.scoreatpercentile(a, 50) 49.5
كما يمكنك استخدام python فقط بدون numpy أي مكتبات أخرى عن طريق تخصيص دالة تقوم بذلك
import math def percentile(data, perc: int): size = len(data) return sorted(data)[int(math.ceil((size * perc) / 100)) - 1]
ومثال
percentile([10.0, 9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0], 90) # 9.0 percentile([142, 232, 290, 120, 274, 123, 146, 113, 272, 119, 124, 277, 207], 50) # 146
-
توجد العديد من الطرق لتنفيذ ذلك حيث في التعليقات السابقة تم استخدام unique Counter و bincount
ولكن يمكنك استخدام pandas أيضاً كالتالي
>>> import pandas as pd >>> import numpy as np >>> x = np.array([1,1,1,2,2,2,5,25,1,1]) >>> pd.value_counts(x) 1 5 2 3 25 1 5 1 dtype: int64
-
كما شرح عبدالمجيد في التعليق السابق أنه يوجد Port مستخدم ولذلك يمكنك الكشف إذا كان port ما مستخدم أم لا ومن ثم إغلاقه عن طريق استخدام lsof
lsof -i :<port no>
سيعطيك الأمر السابق ال process id ثم يمكنك إيقاف العملية
kill -9 <process id>
-
من خلال ترجمة الخطأ يبدو أنك نسيت إضافة الدالة serializeUser و deserializeUser كالتالي
assport.serializeUser(function(user, done) { done(null, user.id); }); passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); }); });
كما يظهر في التوثيق الخاص بالمكتبة من هنا
-
توجد العديد من المكتبات الجتهزة لعمل المطلوب وربما تجد لكل مكتبة مميزات عن غيرها وكما في التعليقات السابقة يمكنك البحث لتجد المكتبة المناسبة لكل وإضافة يمكنك استخدام المكتبة skimage بسهولة كالتالي
from skimage.io import imsave imsave('Path_to_your_folder/File_name.jpg',your_array)
أو يمكنك استخدام حل آخر بدون استدعاء أي مكتبة كالتالي
def saveAsPNG(array, filename): import struct if any([len(row) != len(array[0]) for row in array]): raise ValueError, "المصفوفة يجب أن تحتوي عناصر من نفس الحجم" flat = []; map(flat.extend, reversed(array)) buf = b''.join([struct.pack('>I', ((0xffFFff & i32)<<8)|(i32>>24) ) for i32 in flat]) data = write_png(buf, len(array[0]), len(array)) f = open(filename, 'wb') f.write(data) f.close()
ويمكنك استخدام هذه الدالة كالتالي
saveAsPNG([[0xffFF0000, 0xffFFFF00], [0xff00aa77, 0xff333333]], 'test_image.png')
-
يمكنك التحكم في تحويل الأرقام العشرية ل integer سواء لأقرب رقم الرقم الأكبر أو الأصغر من خلال الدوال
>>> x = np.array([[1.0,2.3],[1.3,2.9]]) >>> z = np.ceil(x)#لأكبر رقم >>> t = np.floor(x)# لأصغر رقم >>> a = np.rint(x)# لأقرب رقم
يمكنك أيضاً استخدام الدالة _np.int كالتالي
>>> x = np.array([[1.0, 2.3], [1.3, 2.9]]) >>> np.int_(x) array([[1, 2], [1, 2]])
-
عند إنشاء DataFrame من مصفوفة تحتاج لتحديد ال data و ال index و ال columns كالتالي
pd.DataFrame(data=data[1:,1:], # القيم index=data[1:,0], # العمود الأول columns=data[0,1:]) # الصف الأول
ولكن ستلاحظ أن المصفوفة تحتوي على بيانات من نوع string ونوع integer لذلك تقوم numpy بتوحيد الأنواع ل string ونحن لا نريد ذلك وسنحول الأرقام ل integer مرة أخرى كالتالي
بدلاً من
data[1:,1:]
نستخدم
np.int_(data[1:,1:])
-
يمكنك قراءة ملفات ال html وإرسالها ببساطة كالتالي
app.get('/', (req, res) => { fs.readFile(__dirname + '/public/index.html', 'utf8', (err, text) => { res.send(text); }); });
-
كما في التعليق السابق فإنه عند استخدام الكود app.use كالتالي
app.use(express.static(__dirname + '/styles'));
فإنه يمكنك الوصول للملفات في مجدل styles مباشرة
http://localhost:5000/main.css
بينما إذا حددت path معين ك styles
app.use("/styles", express.static(__dirname + '/styles'));
فيجب عليك الوصول للمجلد styles كالتالي
http://localhost:5000/styles/main.css
لاحظ الفرق بين استخدام الطريقتين حيث أن عند استدعاء مثلاً ملفات التنسيق
-
عند استخدام الطريقة الأولى نستدعي الملف مباشرة من اسمه كالتالي
<link href="file_name.css" rel="stylesheet">
-
عند استخدام الطريقة الثانية نستدعي الملف من اسمه ولكن قبله المسار الذي حددناه كالتالي
<link href="styles/file_name.css" rel="stylesheet">
-
عند استخدام الطريقة الأولى نستدعي الملف مباشرة من اسمه كالتالي
-
إذا كان هناك مصفوفة ثنائية البعد مثلاً أو أكثر يجب استخدام دالة لتحويلها ل مصفوفة أحادية البعد وكما في التعليقات السابقة تم استخدام الدالة flatten ولكن يمكننا استخدام الدالة ravel حيث تعتبر اسرع من الدالة flatten وترجع reference من المصفوفة الأصلية لذلك سيكون الحل كالتالي
import numpy lst = [[1,2,3], [4,5,6]] newArray = numpy.array(lst) newArray.ravel().tolist()
- 1
-
بالطبع يمكنك من خلال ال File System API كما في التعليق السابق وتم استخدام ال writeFile وتوجد طريقة أخرى وهي createWriteStream بحيث يمكنك الكتابة عدة مرات في الملف وإنهاء ال stream بعد الإنتها كالتالي
var fs = require('fs'); var stream = fs.createWriteStream("file.txt"); stream.once('open', function(fd) { stream.write(" first row\n"); stream.write(" second row\n"); stream.end(); });
أريد رابط مسار إنشاء واجهة برمجية RESTful ؟
في PHP
نشر
لاحظ هذا الرابط يحتوي على مسار كامل لبناء API
أما بالنسبة التعامل مع خدمات التخزين السحابي AWS S3 فهناك تطبيق كامل لبناء موقع نستخدم فيه AWS S3