الاستطلاع، بينغ، pubsub، pubsubhub، pubsubhubbub
في حال كنت متشككا، وهناك أسلوب في جنون أعلاه، في عنوان آخر. في دوائر التكنولوجيا فإنه من غير المحتمل أن لم تكن قد سمعت من pubsubhubbub. في أشهر قليلة بسرعة، فقد كان واحدا من المراكز الثلاثة الاولى تحدثنا عن امور. الاثنان الآخران يجري تشفير متماثل الشكل وجوجل موجة [ 1. ]. أعود إلى آخر الحالي - حيث في العنوان يبين كيف يمكنك الحصول على محتويات من أشخاص آخرين. تفاصيل بعد أن تصبح أكثر وضوحا، إذا كنت أتخيل الأشياء يحدث فيما يتعلق بلوق، على الرغم من المفهوم أنها لا تقتصر على بلوق.
الاقتراع يشير إلى أن السيناريو حيث عملاء يبقى السؤال الخادم إذا كان هناك شيء جديد قد حان حتى. كيف سيكون في كثير من الأحيان لطلب التحديثات تكون دائما مشكلة مع الاقتراع متكررة جدا أو متباعدة جدا، ولكن كما أشار أحد القراء هنا أن واحدة كبيرة، مع شيء الاقتراع هو أن الخادم لا يملك للحفاظ على الدولة.
بينغ يشير إلى حالة حيث أنت (أو البرمجيات الخاصة بك) عندما نشر مقالا، أيضا تحديث بعض الخدمات الشعبية التحديث (وسط). بعض المعلومات الأساسية هنا .
التالية هي pubsub التي تقف على نشر / الاشتراك، واحد من أقرب الملعب لصنع كان هنا من قبل ايفان هينشو، بلاث وكيلان إليوت، McCrea (72 شرائح لكنه يستحق يمر بها). وكان مثالا بارزا قدموه ضد هذا - في تاريخ معين، فريندفيد زحف فليكر 2900000 مرات للحصول على أحدث الصور من 45754 المستخدمين، منها 6721 زار فليكر في تلك مدار 24 ساعة ويمكن أن يكون "محتملة" تم الرفع صورة. علما بأن ما اقترحت ليست تقنية جديدة، كما يشيرون إلى "ثورة التكنولوجيا الجديدة 20 عاما من العمر". اذا كنت تفعل ذلك لبلوق بعد ذلك واحدة من المشاكل الرئيسية مع XMPP - يمكن الحد من وجود بيانات النفقات العامة، والتي قد يكون مرتفعا كما 60-70٪ الكثير.
pubsubhub لتقف على نشر اكتتاب محور وpubsubhubbub هو بروتوكول، الذي هو جوهر فكرة pubsubhub. الناشرين فيها (ويقول المدونين) تحديث محور التي (قد يكون أكثر من واحد المحاور، والتي يتحدثون مع بعضهم البعض) يقيم "في مكان ما في سحابة"، وفقا لهذا البروتوكول يمكن دفع أو سحب وفقا للبروتوكول ولكن الرابط التالي في سلسلة، مركزا على العميل (ويقول القراء) انها تدفع دائما نموذج. هذا صفحة جيدة نقطة البداية لpubsubhubbub، والشرائح نظرة عامة جيدة. بليغ من أي وقت مضى أنيل داش يصفه هنا كما الويب عبر الضغط على زر.
اثنين من القراءات الأخرى ذات الصلة هي webhooks الذي هو في الأساس رد HTTP. Github يستخدم ذلك، يفعل ذلك باي بال للدفع الإخطارات غير متزامن في IPN . وكذلك الحال بالنسبة غيرها الكثير. ومفهوم ذات الصلة rsscloud وهو مرة أخرى محور pubsub. اتبع هذا الرابط للاطلاع على التفاصيل.
هل يمكن أن يتساءل ما هو الهدف من كتابة كل هذه هنا، وهناك نوعان 1. هذه الأمور يستحق أن يعرف، على الأقل الحد الأدنى و 2. هذا بلوق هو تمكين pubsubhubbub الآن عبر محور appspot باستخدام هذا وورد البرنامج المساعد والأعلاف جدا pubsubhubbub سكريبت عن طريق وصلة، فيدبورنر هنا
-
[ 1 ]. - جيد قراءة تمهيدية للتشفير متماثل الشكل هو تماما هذه المادة من قبل بروس شنير، و هذا الحديث هو أكثر أو أقل المصدر الوحيد لموجة جوجل.
التحديث - هذا آخر يشرح كيف يمكن عمل شرط الخادم العام لالاستدعاء للعملاء في جميع أنحاء سطح المكتب باستخدام بوابة XMPP (لpubsubhubbub).
وهناك القليل من الجمعية
بعد قراءة هذا المقال عن مخازن قفل حرة ورؤية استخدام CAS (قارن والمبادلة)، شعرت وكأني نشر رمز الجمعية أن تفعل نفس الشيء. استخدام أكثر من حالة كان هناك طريقة لكتابة الأصلي والذي يطلق عليه من جافا (مرة أخرى في 1.5، عندما المتزامنة هياكل البيانات في جاوة كانت أكثر أو أقل غير موجود). دون مزيد من اللغط، وأنا على إطلاق العنان للرمز لك
. الأول هو لاستراتيجية المساعدة القطرية والثاني هو لGCD الحوسبة باستخدام خوارزمية إقليدس (ويمكن الاطلاع على هذا واحد في كثير من الأماكن والبرامج التعليمية وكذلك).
ترجمة وتشغيل تعليمات gcc file_name.c ; ./a.out
قارن ومقايضة
وتشمل #وتشمل # / / تبادل - newvalue، comperand قديمة / القيمة المتوقعة / * * وظيفة في الواقع لا شيء التالية - إذا كانت القيمة في دست * تساوي oldvalue ثم الاستعاضة عنها newvalue آخر ترك الأمر دون تغيير: هل كل هذه بالذرة * * وهناك خياران لقيمة الإرجاع * القيمة الأولية 1.is من دست * وترك عبء fxn يدعو لمقارنتها مع oldval * 2. يفعل ذلك أكثر من هنا والعودة 0 أو 1، وهذا ينبغي أن تكون أكثر كفاءة ** / / * تغيير في وقت لاحق إلى الماكرو * / مادبا CAS (INT * دست، وكثافة العمليات oldvalue، وكثافة العمليات newvalue) { printf ("(٪ د، د٪، د٪)"، * دست، oldvalue، newvalue)؛ / * كثافة العمليات CAS (INT دست، وكثافة العمليات oldvalue، وكثافة العمليات newvalue) {* / / * كثافة العمليات CAS (INT دست، وكثافة العمليات newvalue، وكثافة العمليات oldvalue) {* / مادبا نتيجة = 1 ؛/ * 1 يدل على أن استراتيجية المساعدة القطرية نجحت و 0 يدل على أن فشلت * / / * راجع للشغل في حاجة إلى تعيين مكعب للعلم clobbering! * / __asm__ __ volatile__ ( "movl 2٪،٪ EAX٪ \ ن \ T" "movl٪ 3،٪٪ EBX \ ن \ T" "movl 0٪،٪٪ ECX \ ن \ T" "قفل \ ن \ T" "CMPXCHG٪ EBX٪، (٪ ECX٪) \ ن \ ر" يجب أن / * قفل تكون على نفس السطر * / "JZ حررت \ ن \ T" "movl $ 0، 1٪ \ ن \ T" "حررت: \ ن \ T" : "= م" (دست)، "= ز" (النتيجة) : "ز" (oldvalue)، "ز" (newvalue)، "م" (دست) : "EAX٪"، "EBX٪"، "ECX"، "سي سي" )؛ printf ("(٪ د، د٪، د٪)"، * دست، oldvalue، newvalue)؛ عودة نتيجة؛ } / * TODO * الكتابة آخر fxn ASM الذي يضع فوق fxn في حلقة وبينما تحاول أن تبقي ما لم ينجح * / الباحث الرئيسي () { مادبا 1 = 5، ب = 6؛ مادبا * ج = (كثافة العمليات *) malloc (sizeof (الباحث))؛ * ج = 6؛ / * كثافة ج = 6؛ * / printf ("٪ د \ ن"، CAS (ج، ب، ب))؛ printf ("٪ د \ ن"، CAS (ج، ب، أ))؛ printf ("٪ د \ ن"، CAS (ج، أ، أ))؛ printf ("٪ د \ ن"، CAS (ج، ب، ب))؛ * ج = 6؛ / * ج = 5؛ * / printf ("القيمة المتغيرة لل* ج ب٪ د \ ن"، * ج)؛ printf ("٪ د \ ن"، CAS (ج، ب، ب))؛ printf ("٪ د \ ن"، CAS (ج، ب، أ))؛ printf ("٪ د \ ن"، CAS (ج، أ، أ))؛ printf ("٪ د \ ن"، CAS (ج، أ، ب))؛ printf ("٪ د \ ن"، CAS (ج، ب، أ))؛ عودة 0؛ }
تلاحظ التنسيق - يبدو وكأنه تمييز بناء الجملة WP تضيف في النهاية، تجاهل ذلك.
GCD
وتشمل #مادبا GCD (كثافة العمليات أ، كثافة العمليات ب) { مادبا النتيجة؛ / * حساب المقسوم المشترك الأكبر باستخدام خوارزمية إقليدس * / __asm__ volatile__ __ ("movl٪ 1،٪ EAX٪؛" "movl 2٪،٪ EBX٪؛" "تابع: cmpl $ 0٪٪، EBX"؛ "التهاب الدماغ الياباني الذي قام به؛" "٪٪ xorl EDX، EDX٪٪؛" "٪٪ idivl EBX"؛ "٪٪ movl EBX، EAX٪٪؛" "٪٪ movl EDX، EBX٪٪؛" "تابع أحزاب اللقاء المشترك"؛ "حررت: movl٪ EAX٪، 0٪؛": "= ز" (النتيجة): "ز" (أ)، "ز" (ب) )؛ عودة نتيجة؛ } الباحث الرئيسي () { مادبا الأولى والثانية؛ printf ("أدخل عددين:")؛ scanf ("٪ D٪ D"، و 1، و 2)؛ printf ("GCD٪ من D & D٪ هو٪ د \ ن"، الأولى والثانية، GCD (الأولى والثانية))؛ عودة 0؛ }
روبي 1 المتشددين لإنشاء التجزئة
أمس في حين يمر واحد من البرامج بلادي القديمة، لقد وجدت هذا الذي كتبه لي مرة أخرى في وقت ما:
#begin magic
hash=Hash[*CGI.unescape(raw_text).split('&').map{|x| b=x.split("=");b.push(nil) if b.size==1;b}.flatten]
#end magic
لقتل بعض من التشويق واسمحوا لي أن الكشف عن raw_text يبدو
، أليس كذلك تم قطع عليه من اعتراف الدفع باي بال.
فوق خط إذا كسر في أجزاء يقرأ على نحو أفضل:
unescaped_array = CGI.unescape (raw_text). انقسام ('و') unescaped_array = unescaped_array.collect {| X | ب = x.split ("=")؛ b.push (لا شيء) إذا b.size == 1، ب} flattened_array = unescaped_array.flatten تجزئة التجزئة = [* flattened_array]
دعونا نفعل الخطوات الفردية في مجلس الهجرة واللاجئين:
الاتحاد الدولي للرجبي (الرئيسي): 009:0> unescaped_array = CGI.unescape (raw_text) سبليت ('&') => ["نجاح"، "mc_gross = 10.00"، "protection_eligibility = غير مؤهل"، "payer_id = U7PPJJ4TSJ47E"، "ضريبة = 0.00"، "payment_date 09:45:30 = 10 يوليو 2009 PDT"، "payment_status = بانتظار "] الاتحاد الدولي للرجبي (الرئيسي): 013:0> unescaped_array = unescaped_array.map {| X | ب = x.split ("=")؛ b.push (لا شيء) إذا b.size == 1، ب} => [["نجاح"، لا شيء]، ["mc_gross"، "10.00"]، ["protection_eligibility"، "غير مؤهل"]، ["payer_id"، "U7PPJJ4TSJ47E"]، ["الضريبة"، "0.00"] ، ["payment_date"، "09:45:30 10 يوليو 2009 PDT"]، ["payment_status"، "معلق".]] الاتحاد الدولي للرجبي (الرئيسي): 014:0> flattened_array = unescaped_array.flatten => ["نجاح"، لا شيء "، mc_gross"، "10.00"، "protection_eligibility"، "غير مؤهل"، "payer_id"، "U7PPJJ4TSJ47E"، "الضريبة"، "0.00"، "payment_date"، "09:45: 30 10 يوليو 2009 PDT "،" payment_status "،" معلق "] الاتحاد الدولي للرجبي (الرئيسي): 015:0> تجزئة التجزئة = [* flattened_array] => {"ضريبة" => "0.00"، "payment_status" => "معلقة"، "payer_id" => "U7PPJJ4TSJ47E"، "mc_gross" => "10،00"، "نجاح" => لا شيء "، payment_date" = > "09:45:30 10 يوليو 2009 PDT"، "protection_eligibility" => "غير مؤهل"}
راجع للشغل، ويسمى * عامل تنبيه في روبي
طريقة أخرى لإنشاء التجزئة من "مجموعة من أزواج 'هو استخدام حقن:
التجزئة = [[1،2]، [3،4]] حقن ({}). {| نتيجة لذلك، عنصر | نتيجة [element.first] = النتيجة [element.last]؛ نتيجة} هناك أكثر من طريقة
كتابة حلقة، الذي سأترك باعتبارها ممارسة للقراء!
هنا قليلا حالة الاستخدام لا علاقة لها من خلق التجزئة من المصفوفات:
الاتحاد الدولي للرجبي (الرئيسي): 005:0> [1،2،3،4،7،9] group_by {| X | X <5.؟ : أقل :: أكبر} => {: أقل => [1، 2، 3، 4]،: أكبر => [7، 9]}
يمكنك أن تفعل المزيد من الأشياء، ويستخدم أساسا نتيجة للكتلة كمفتاح لهذا العنصر في التجزئة الناتجة عن ذلك.
Gmail، والمغفل، وmsmtp الإصلاح
إذا كنت تستخدم المغفل وبروتوكول نقل البريد الإلكتروني من الدخول إلى Gmail. وهنا هو أنباء (السيئة). الرجال بارد في غوغل تغير مرة أخرى شهادة. أوه، لم تسأل - كيف أنها تعرف ذلك؟ بدأ المغفل بسيط تشكو الشهادة السيئة عند محاولة استخدام، الذي اشتهر msmpt 'msmtp: TLS التحقق شهادة: فشل. الشهادة لم حصلت على مصدر معروف' استقبل لي على الشاشة.
لعبور تأكيد -
تشغيل فقط بعد
$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off
في مكان من خادم Thwate العمر الآن تحصل بعد في الجزء المصدر
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US
لحسن الحظ الإصلاح هو بسيط، وهنا ما عليك القيام به على دبيان
# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814
بعد هذا التغيير فقط السطر التالي في ~ وأنت /. msmtprc
tls_trust_file /certs/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem
tls_trust_file /certs/Thawte SSLWeb Server Roots/thawte Premium Server CA/Thawte Premium Server CA.pem
إلى
tls_trust_file /usr/share/ca-certificates/mozilla/Equifax_Secure_CA.crt
دمج التجزئة في ملفات YAML أسيوط
YAML هو مفيد جدا لكتابة ملفات التكوين. الميزة الرئيسية هي أن يقرأ مثل ملف نص. هذا يعمل بشكل جيد حقا إذا كان ملف التكوين مسطح (أي التسلسل الهرمي) وليس لديه التكرار.
إذا كان لديك تكوينات لديه ملف التكرار ثم فمن المنطقي أن فصل هذه العناصر وإعادة استخدامها. ما أعنيه هو هذا - دعونا نقول لكم ملف التكوين يشبه هذا:
التنمية: input_location: common_input output_location: dev_location البريد الإلكتروني: smtp_server: your_server تسجيل الدخول: your_login كلمة السر: top_secret الإنتاج: input_location: common_input output_location: dev_location البريد الإلكتروني: smtp_server: your_server تسجيل الدخول: your_login كلمة السر: top_secret
على افتراض فوق رمز في / تمة / test.yml هنا هو كيف يمكنك أن تقرأ في بيثون وروبي
$cat readyml.py
#! / البيرة / بن / بيثون الحياة الفطرية من pprint الاستيراد pprint كما PP # في ديبيان تحتاج إلى تثبيت بيثون YAML من YAML استيراد التحميل، التفريغ، load_all التجزئة = حمل (مفتوحة ('/ تمة / test.yml')) ص (التجزئة ['تنمية'])
$ cat readyml.rb
#! / البيرة / بن / روبي الحياة الفطرية يتطلب 'ص' التجزئة = YAML :: تحميل (File.open ('/ تمة / test.yml'). قراءة) PP التجزئة ['تنمية']
هنا هو مفيد 1 بطانة للنسخة روبي
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' أو يمكنك أن تجرب نفسها في مجلس الهجرة واللاجئين أو وحدة بيثون.
نلاحظ أنه في مقتطف الشفرة أعلاه، كل ما هو غير موقع الإخراج هو نفسه في تطوير وإنتاج جزء. هذا هو المكان الذي yml معرف العقدة يأتي لانقاذ. الفكرة بسيطة لديها مجموعة من القيم الافتراضية وتجاوز لهم في مكان مختلف.
هل يمكن أن تسحبه بعيدا على النحو التالي:
الافتراضات: والتخلف input_location: common_input output_location: dev_location البريد الإلكتروني: SENDER_NAME: مرسل smtp_server: your_server تسجيل الدخول: your_login كلمة السر: top_secret التنمية: <<: * التخلف الإنتاج: <<: * التخلف output_location: prod_location
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
عظيم، وأنها تعمل (TM)!
تداول يمكن القول أننا لبعض الوضوح قليلا من السحر. وهنا لشرح صغير: & *، و<<: لا يمكن فهمه والتي هي علامة ارتساء كما معرف العقدة *، هو إشارة العقدة و<<: لتقف على دمج التجزئة.
لمزيد من التفاصيل راجع إما المواصفات YAML أو ويكيبيديا
حتى الآن جيد جدا ولكن هناك كمية الصيد هنا، يدمج هذه التجزئة ليست متكررة. ما يعنيه هو: لنفرض أنك تريد أن يكون مختلفا اسم المرسل للبريد في اثنين من البيئات، قد يكون إغراء لك أن تفعل ما يلي:
الافتراضات: والتخلف input_location: common_input output_location: dev_location البريد الإلكتروني: SENDER_NAME: مرسل smtp_server: your_server تسجيل الدخول: your_login كلمة السر: top_secret التنمية: <<: * التخلف البريد الإلكتروني: SENDER_NAME: sender_dev الإنتاج: <<: * التخلف output_location: prod_location البريد الإلكتروني: SENDER_NAME: sender_prod
يتيح فحص
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$
عفوا، حدث خطأ ما، مشكلة على النحو المذكور أعلاه هو أن عملية الدمج التجزئة ليست متكررة وعلى الرغم من دمج استبدالها الإلكتروني الافتراضي عن طريق البريد الإنتاج التي ليس لها إلا مفتاح واحد. حل / العمل حول هو انبسط مستوى واحد أكثر:
common_settings: & common_settings input_location: common_input output_location: dev_location mail_defaults: & mail_defaults SENDER_NAME: مرسل smtp_server: your_server تسجيل الدخول: your_login كلمة السر: top_secret الافتراضات: والتخلف <<: * common_settings البريد الإلكتروني: <<: * mail_defaults التنمية: <<: * التخلف الإنتاج: <<: * التخلف البريد الإلكتروني: <<: * mail_defaults SENDER_NAME: sender_prod
يتيح التحقق مرة أخرى
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$
هل نقول لديك مستوى واحد أكثر من أن تعشش، كذلك يمكنك انبسط بالتأكيد واحدة أكثر من مستوى، ولكن بعد ذلك يصبح فوضى. لذا، إذا كنت لا يحاولون الكتابة إلى حل أبراج هانوي في ملف أسيوط، أنه من الأفضل أن restucture ملف أسيوط من حفر في YAML أو أي شيء آخر. ولكن هذا هو مكالمتك على أي حال.
وهناك القليل من إعادة توجيه قذيفة
هنا هو كيف نفعل عادة إعادة توجيه قذيفة
$ ./pgm.sh args >out.txt 2>err.txt
كنت أرغب في تعديله قليلا وتشغيل كما يلي
$ ./pgm.sh args
مع اشتراط أن خرج والخطأ يجب ان تذهب الى بعض اسم حسابها داخل pgm.sh بناء على وسائط. يمكن للمرء أن يكون حالة توضيحية عندما التاريخ هو جزء من وسائط. لذلك ترغب المعياري للذهاب الى القول / الخاص / الدليل / pgm_out_YYYYMMDD.txt 1
المشكلة مع طريقة قياسية من إعادة توجيه N>file.txt أي ربط ملف N اصف إلى file.txt، هو انه يعمل فقط لعملية متشعب حديثا، وليس للعملية الحالية.
هكذا
$ echo hi 1>out.txt ; echo hii . سوف ترسل مرحبا إلى out.txt لكن سيتم طباعة HII إلى stdout 2
هذا هو المكان الذي exec يأتي لإنقاذنا. إذا أضفنا exec 1>somefile.txt ثم خرج من بقية السيناريو انتقل إلى somefile.txt
$. / سوف test.sh توجيه مرحبا، وكذلك إلى HII out.txt
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
وبالمثل لتوجيه stdout فضلا عن STDERR سنفعل شيئا من هذا القبيل
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp
عادت الآن إلى النقطة الأصلية من إعادة توجيه إلى بعض الملفات من داخل وعاء، دعنا نقول برنامج حساب اسم الملف في بعض OUTFILE متغير، قد فعلنا فقط exec 1>$OUTFILE
هذا لا يحل المشكلة الحالية. ولكن قد تريد أن تذهب من خلال المثال التالي الذي يحقق وصول عشوائي "من ملف في شيل. مثال على ذلك هو من هنا
echo 1234567890 > File # Write string to "File".
exec 3<> File # Open "File" and assign fd 3 to it.
read -n 4 <&3 # Read only 4 characters.
echo -n . >&3 # Write a decimal point there.
exec 3>&- # Close fd 3.
cat File # ==> 1234.67890
مع تعليق، هذا الرمز هو تفسير النفس.
-
1 ويمكن أيضا أن يتم ذلك عن طريق $ ./pgm.sh args >pgm_out`date +%Y%m%d` . لكن الفكرة هي لتوليد هذا اسم الملف استنادا الى بعض المنطق في البرنامج نفسه
2 1 في 1> out.txt لا لزوم لها لكنه يوضح هنا أن نقوم بإعادة توجيه FD 1
لرفع أو لا مقياس لل
في حين يتحدث عن التقسيم الأفقي لقواعد البيانات، DHH من الشهرة ROR يوحي بأن أشياء التحجيم يمكن أن تنتظر، وبالتأكيد ننتظر حتى نقطة احتياجات عملك تتطلب ذلك. مقاله بالتأكيد يجعل معنى لقول الاجهزة الصغيرة الناشئة. لا يعني أن في البدء يجب أن تكتب البرامج التجريبية ولكن بالنظر إلى أن هناك فقط 24 ساعة في اليوم الذي ينبغي أن تركز على خدمة يقولون 1000 مستخدم في أكثر من وسيلة الوفاء فقدان النوم أكثر من القلق حول كيفية التعامل مع طلبي حمولة من 13142000 المستخدمين. اذا كان لديك الكثير من المستخدمين الذين سوف تعرف كيف لتوسيع نطاق. لتبدأ قابلية مشكلة جيدة لحل مشكلة ولكن أفضل بكثير لديها، وأعني أي بدء أحب أن واجهت هذه المشكلة!
في آخر ذات صلة بالمادة جيرمي Zawodny يكتب يجب أن لا يتوقف السيد مور إذا كانت لديك مشاكل في الاستيعاب.
منذ هذه المقالات تشير إلى قانون مور لا يسعني إلا أن كتابة قانون مور يجب أن تكون واحدة من القانون الأكثر المعمم في علوم الحاسب الآلي. من توقعاته الأصلية حول كثافة الترانزستور، ويستشهد الآن هذا القانون في أي مكان واجهتم النمو المتسارع.



































