thăm ḍ ư kiến, ping, pubsub, pubsubhub, pubsubhubbub

Ngày 06 tháng 9 năm 2009 bởi Prashant · B́nh luận
Nộp theo: công nghệ

Trong trường hợp bạn nghi ngờ, có một phương pháp trong sự điên rồ trên, trong tiêu đề của bài viết. Trong giới công nghệ cao là không chắc rằng bạn đă không nghe nói về pubsubhubbub. Trong vài tháng nhanh chóng, nó đă là một trong ba người đứng đầu nói chuyện về mọi thứ. Hai là homomorphic mă hóa và Google sóng [ 1 ]. Trở lại bài viết hiện tại trong tiêu đề cho thấy làm thế nào bạn nhận được các nội dung từ những người khác. Chi tiết sau trở nên rơ ràng hơn, nếu bạn tưởng tượng những điều xảy ra liên quan đến các blog, mặc dù họ được khái niệm không bị giới hạn đến các blog.

Bỏ phiếu đề cập đến kịch bản mà khách hàng yêu cầu các máy chủ nếu một cái ǵ đó mới đă đến. Thường yêu cầu cập nhật sẽ luôn luôn là một vấn đề với bỏ phiếu quá thường xuyên hoặc quá thường xuyên, nhưng là một độc giả đă chỉ ra ở đây là một điều tuyệt vời với bỏ phiếu là do máy chủ không phải duy tŕ trạng thái.

Ping đề cập đến trường hợp khi gửi một bài viết, bạn (hoặc phần mềm của bạn) cũng cập nhật một số dịch vụ cập nhật phổ biến (trung ương). Một số nền ở đây .

Tiếp theo là pubsub viết tắt cho xuất bản / đăng kư, một trong những sân sớm nhất cho nó đă được thực hiện bởi Evan Henshaw Plath và Kellan Elliott McCrea (72 slide nhưng giá trị sẽ thông qua). Buộc ví dụ họ đă chống lại điều này vào một ngày cụ thể, Friendfeed thu thập thông tin Flickr 2,9 triệu lần để có được những bức ảnh mới nhất của 45.754 người sử dụng, trong đó 6.721 đă truy cập Flickr trong những 24 giờ và có thể có khả năng "tải lên một bức ảnh. Lưu ư rằng những ǵ họ đề xuất không phải là một công nghệ mới, như họ chỉ ra cách mạng mới 20 công nghệ năm cũ '. Nếu bạn làm điều đó cho blog sau đó một trong những vấn đề lớn với XMPP - sự hiện diện của dữ liệu trên không, có thể cao tới 60-70% có thể được giảm rất nhiều.

pubsubhub là viết tắt cho xuất bản subscribe trung tâm và pubsubhubbub là một giao thức, cốt lơi trong đó là ư tưởng của pubsubhub. Nhà xuất bản trong đó (blogger) cập nhật các trung tâm (có thể có nhiều hơn một trung tâm, nói chuyện với nhau) cư trú "ở một nơi nào đó trong đám mây ', theo giao thức này có thể đẩy hoặc kéo theo giao thức liên kết tiếp theo trong chuỗi trung tâm, cho khách hàng (độc giả) luôn luôn được thúc đẩy mô h́nh trang này là điểm khởi đầu cho pubsubhubbub, tŕnh bày tổng quan là tốt. Anil Dash bao giờ hùng hồn mô tả ở đây là nút bấm web.
Hai lần đọc khác liên quan đến webhooks đó là cơ bản callbacks http. Github sử dụng nó, v́ vậy paypal thông báo không đồng bộ của thanh toán trong IPN V́ vậy, nhiều người khác. Khái niệm liên quan rsscloud pubsub trung tâm. Thực hiện theo liên kết này để biết thêm chi tiết.

Bạn có thể được viết tất cả những điều này ở đây là những ǵ, có hai 1. Những điều này là giá trị hiểu biết, tối thiểu ít nhất và 2. Blog này là pubsubhubbub kích hoạt thông qua appspot trung tâm bằng cách sử dụng này wordpress plugin và thức ăn chăn nuôi quá pubsubhubbub kích hoạt thông qua liên kết, Feedburner đây
-
[ 1 ]. - Tốt giới thiệu đọc mă hóa đầy đủ homomorphic là bài ​​viết này bởi Bruce Schneier và nói chuyện này là nhiều hơn hoặc ít hơn chỉ nguồn cho làn sóng Google.

-UPDATE - Bài viết này giải thích làm thế nào các yêu cầu của máy chủ công cộng để gọi lại có thể được làm việc xung quanh cho các khách hàng máy tính để bàn bằng cách sử dụng cổng XMPP (cho pubsubhubbub).

Một chút lắp ráp

29 Tháng 8, 2009 bởi Prashant · B́nh luận
Nộp theo: công nghệ

Sau khi đọc bài viết này về bộ đệm miễn phí khóa và nh́n thấy việc sử dụng của CAS (so sánh và trao đổi), tôi cảm thấy như đăng các mă lắp ráp để làm như vậy. Sử dụng trường hợp đó là viết một phương pháp bản địa và gọi nó từ Java (trở lại trong 1.5, khi cấu trúc dữ liệu đồng thời trong Java nhiều hơn hoặc ít hơn không tồn tại). Nếu không có thêm ado, tôi sẽ mở ra mă vào bạn :) . Đầu tiên là cho CAS và thứ hai là cho máy tính GCD bằng cách sử dụng thuật toán Euclid (điều này có thể được t́m thấy ở nhiều nơi và hướng dẫn).

Biên dịch và chạy hướng dẫn gcc file_name.c ; ./a.out

So sánh và Trao đổi

   # Bao gồm 
  # Bao gồm 
 / / Trao đổi - newvalue, comperand cũ / giá trị dự kiến
 / *
  * Chức năng thực hiện các điều sau đây nếu giá trị tại * dest là bằng oldvalue sau đó thay thế nó bằng cách newvalue khác để nó không thay đổi: làm tất cả những nguyên tử
  *
  * Có hai lựa chọn giá trị trả về
  * 1.is giá trị ban đầu * dest và để lại gánh nặng của fxn gọi để so sánh nó với oldval
  * 2.  làm điều đó hơn ở đây và trở về 0 hoặc 1, điều này sẽ có hiệu quả hơn
  ** /

 / * Sau đó thay đổi nó thành vĩ mô * /
 int cas (int * dest, int oldvalue, int newvalue)
	 printf ("(% d,% d,% d)", * dest, oldvalue, newvalue);
	 / * Int cas (int dest, int oldvalue, int newvalue) {* /
	 / * Int cas (int dest, int newvalue, int oldvalue) {* /
	 int kết quả = 1; * 1 cho thấy cas thành công và 0 cho thấy rằng nó không thành công * /
	 / * Btw cần phải thiết lập cc clobbering cờ!  * /
	 __asm__ __ volatile__ (
			 "Movl% 2,% eax \ n \ t"
			 "Movl% 3,% ebx \ n \ t"
			 "Movl% 0,% ecx \ n \ t"
			 "Khóa \ n \ t"
			 "CMPXCHG ebx%% (% ecx%) \ n \ t" / * KHÓA nên trên cùng một ḍng * /
			 "Jz Làm \ n \ t"
			 "Movl $ 0,% 1 \ n \ t"
			 "Làm: \ n \ t"
			 : "M" (dest), "g" (kết quả)
			 : "G" (oldvalue), "g" (newvalue), "m" (dest)
			 : "% Eax,% ebx, ecx", "cc"
			 );
	 printf ("(% d,% d,% d)", * dest, oldvalue, newvalue);
	 Kết quả trả lại;
 }

 / * TODO
  * Viết khác fxn asm đặt trên fxn trong một ṿng lặp trong khi và tiếp tục cố gắng, trừ khi nó thành công * /

 int main () {
	 int a = 5, b = 6;
	 int * c = (int *) malloc (sizeof (int));
	 * C = 6;
	 / * Int c = 6; * /
	 printf ("% d \ n", cas (c, b, b));
	 printf ("% d \ n", cas (c, b, a));
	 printf ("% d \ n", cas (c, a, a));
	 printf ("% d \ n", cas (c, b, b));
	 * C = 6;
	 / * C = 5; * /
	 printf ("thay đổi giá trị của * c% d \ n", * c);
	 printf ("% d \ n", cas (c, b, b));
	 printf ("% d \ n", cas (c, b, a));
	 printf ("% d \ n", cas (c, a, a));
	 printf ("% d \ n", cas (c, a, b));
	 printf ("% d \ n", cas (c, b, a));
	 trở về 0;
 }

Định dạng ghi chú - có vẻ như highlighter cú pháp wp được thêm cuối cùng, bỏ qua điều đó.

GCD

 # Bao gồm 
 int UCLN (int a, int b) {
     int kết quả;
     / * Tính toán Greatest Common Divisor bằng cách sử dụng thuật toán Euclid * /
     volatile__ __asm__ __ ("movl% 1,% eax;
                           "Movl% 2,% ebx;"
                           "CONTD: cmpl $ 0,% ebx;"
                           "Je Làm;
                           "Xorl%% EDX, EDX%%;
                           "Idivl%% ebx;"
                           "Movl%% ebx, eax%%;
                           "Movl% edx,% ebx%;
                           "Jmp CONTD;
                           "DONE: movl% eax,% 0;": "= g" (kết quả): "g" (a), "g" (b)
     );

     Kết quả trả lại;
 }

 int main () {
     int 1, thứ hai;
     printf ("Nhập hai số nguyên:");
     scanf ("% d% d", và trước tiên, và thứ hai);

     printf ("GCD% d% d là% d \ n", đầu tiên, thứ hai, gcd (đầu tiên, thứ hai));

     trở về 0;
 }

ruby 1 lót để tạo ra băm

20 tháng 8 năm 2009 bởi Prashant · B́nh luận
Nộp theo: công nghệ

Hôm qua trong khi đi qua một trong các chương tŕnh cũ của tôi, tôi t́m thấy này được viết bởi tôi trở lại:

#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

Để giết một số bị đ́nh hoăn cho tôi tiết lộ rằng raw_text trông giống như

 

, Phải nó đă được cắt từ xác nhận thanh toán paypal.

Trên đường nếu bị phá vỡ trong các phần đọc tốt hơn:

  unescaped_array = CGI.unescape (raw_text). split ('&')
   unescaped_array = unescaped_array.collect {| x | b = x.split ("="); b.push (không) nếu b.size == 1;}
   flattened_array = unescaped_array.flatten
   hash = Hash [* flattened_array] 

Hăy để thực hiện các bước cá nhân trong IRB:

  irb (main): 009:0> unescaped_array = CGI.unescape (raw_text) chia ('&')    

 => ["SUCCESS", "mc_gross = 10.00", "protection_eligibility = không hợp lệ", "payer_id = U7PPJJ4TSJ47E", "thuế = 0.00", "payment_date = 09:45:30 ngày 10 Tháng Bảy 2009 PDT", "payment_status = chờ "]                                                                         

 irb (main): 013:0> unescaped_array = unescaped_array.map {| x | b = x.split ("="); b.push (không) nếu b.size == 1;}  

 => [["SUCCESS", nil], ["mc_gross", "10,00"], ["protection_eligibility", "không hợp lệ"], ["payer_id", "U7PPJJ4TSJ47E"] ["thuế", "0.00"] ["payment_date", "09:45:30 ngày 10 tháng bảy 2009 PDT"], ["payment_status", "chờ"]]                               

 irb (main): 014:0> flattened_array = unescaped_array.flatten     

 => ["SUCCESS", con số không, "mc_gross", "10,00", "protection_eligibility", "không hợp lệ", "payer_id", "U7PPJJ4TSJ47E", "thuế", "0.00", "payment_date", "09:45: 30 ngày 10 tháng 7 năm 2009 PDT "," payment_status "," chờ "]
 irb (main): 015:0>
 hash = Hash [* flattened_array]
 => {"Thuế" => "0.00", "payment_status" => "chờ", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "THÀNH CÔNG" => con số không, "payment_date" = > "09:45:30 Jul 10, 2009 PDT", "protection_eligibility" => "không hợp lệ"} 

BTW, * được gọi là nhà điều hành splat trong ruby

Một cách khác để tạo ra băm từ mảng của cặp 'là để sử dụng tiêm:

  hash = [[1,2], [3,4]] tiêm ({}). {| kết quả, yếu tố | kết quả [element.first] = kết quả [element.last]; kết quả} 

Có là một trong nhiều cách :) Viết một ṿng lặp, tôi sẽ để lại như một bài tập cho các độc giả!

Dưới đây là một chút trường hợp sử dụng không liên quan của việc tạo ra băm từ mảng:

  IRB (chính): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.  : Ít hơn :: lớn hơn}

 => {: Ít hơn => [1, 2, 3, 4]: lớn hơn => [7, 9]} 

Bạn có thể làm việc nhiều hơn, về cơ bản kết quả của khối được sử dụng như là ch́a khóa cho rằng phần tử trong bảng băm kết quả.

gmail, mutt và sửa chữa msmtp

17 tháng tám năm 2009 bởi Prashant · B́nh luận
Nộp theo: công nghệ

Nếu bạn sử dụng mutt và smtp để truy cập gmail. Đây là một tin tức (xấu). Kẻ mát vào Google một lần nữa thay đổi giấy chứng nhận. Oh, bạn hỏi làm thế nào để nó biết nó? Đơn giản mutt bắt đầu phàn nàn về chứng chỉ xấu khi cố gắng sử dụng msmpt, khét tiếng 'msmtp: TLS giấy chứng nhận xác minh không thành công: giấy chứng nhận không có một tổ chức phát hành được biết đến chào tôi trên màn h́nh.

Để vượt qua xác nhận -
Chỉ cần chạy sau

$ msmtp --serverinfo --host=smtp.gmail.com --tls=on --port=587 --tls-certcheck=off

Nơi Server Thwate cũ bây giờ bạn nhận được sau đây trong phân khúc công ty phát hành
Issuer:
Common Name: Google Internet Authority
Organization: Google Inc
Country: US

May mắn thay, sửa chữa là đơn giản, đây là những ǵ bạn cần phải làm trên debian

# apt-get install ca-certificates
# dpkg -s ca-certificates|grep Version
Version: 20090814

Sau này chỉ cần thay đổi ḍng sau trong bạn ~ /. 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

Việc sáp nhập băm trong các tập tin conf yaml

31 Tháng Bảy 2009 bởi Prashant · B́nh luận
Nộp theo: công nghệ

YAML là khá tiện dụng để viết các tập tin cấu h́nh. Chính lợi thế đó, nó đọc tập tin văn bản. Điều này làm việc thực sự tốt nếu tập tin cấu h́nh của bạn là bằng phẳng (không có hệ thống phân cấp) và không có lần lặp lại.
Nếu tập tin cấu h́nh của bạn có lặp lại sau đó nó làm cho cảm giác để phân biệt những yếu tố và tái sử dụng chúng. Những ǵ tôi có nghĩa là chúng ta hăy nói rằng bạn tập tin cấu h́nh của bạn trông như thế này:

  phát triển:
   input_location: common_input
   output_location: dev_location
   mail:
     smtp_server: your_server
     đăng nhập: your_login
     mật khẩu: top_secret
 sản xuất:
   input_location: common_input
   output_location: dev_location
   mail:
     smtp_server: your_server
     đăng nhập: your_login
     mật khẩu: top_secret 

Giả sử trên mă trong / tmp / test.yml ở đây là làm thế nào bạn có thể đọc trong python, ruby
$cat readyml.py

 # / Usr / bin / env python
 từ pprint nhập khẩu pprint như Trang
 # Trong debian cần phải cài đặt python-yaml
 từ nhập khẩu yaml tải, băi chứa, load_all
 hash = tải (mở ('/ tmp / test.yml'))
 Trang (hash ['phát triển']) 


$ cat readyml.rb

  # / Usr / bin / env ruby
 yêu cầu 'Trang'
 hash = YAML :: tải (File.open ('/ tmp / test.yml').)
 Trang băm ['phát triển'] 

đây là một tiện dụng lót cho phiên bản ruby
$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]' hoặc bạn có thể thử trong IRB hoặc giao diện điều khiển python.

Lưu ư rằng trong đoạn mă trên, tất cả mọi thứ khác hơn là đầu ra vị trí tương tự trong phát triển và một phần sản xuất. Đây là nơi định danh nút yml đến để giải thoát. Ư tưởng là đơn giản có một bộ các giá trị mặc định và ghi đè lên tại địa điểm khác nhau.
Bạn có thể kéo nó ra ngoài như sau:

  mặc định: - mặc định
   input_location: common_input
   output_location: dev_location
   mail:
     SENDER_NAME: người gửi
     smtp_server: your_server
     đăng nhập: your_login
     mật khẩu: top_secret
 phát triển:
   <<: * Mặc định
 sản xuất:
   <<: * Mặc định
   output_location: prod_location 


$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$

Tuyệt vời, nó hoạt động (tm).
Có thể cho rằng chúng tôi giao dịch ở một số rơ ràng cho một chút ma thuật. Đây là một lời giải thích nhỏ: &, và <<: & là anchor thẻ có thể được hiểu như là định danh nút, * là nút tham chiếu và <<: là viết tắt của hợp nhất băm.

Để biết thêm chi tiết xem một trong hai thông số kỹ thuật yaml hoặc wikipedia
Cho đến nay rất tốt nhưng có một nắm bắt ở đây, những sáp nhập băm không phải là đệ quy. Nó có nghĩa là: chúng ta hăy nói rằng bạn muốn có tên người gửi thư trong hai môi trường khác nhau, bạn có thể bị cám dỗ để làm như sau:

  mặc định: - mặc định
   input_location: common_input
   output_location: dev_location
   mail:
     SENDER_NAME: người gửi
     smtp_server: your_server
     đăng nhập: your_login
     mật khẩu: top_secret
 phát triển:
   <<: * Mặc định
   mail:
     SENDER_NAME: sender_dev
 sản xuất:
   <<: * Mặc định
   output_location: prod_location
   mail:
     SENDER_NAME: sender_prod 

Cho phép kiểm tra

$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
nil
$

Rất tiếc, một cái ǵ đó đă đi sai, vấn đề như đă đề cập ở trên là hợp nhất hash không phải là đệ quy và khi hợp nhất nó thay thế thư mặc định của thư sản xuất mà chỉ có một ch́a khóa. Giải pháp / công tŕnh xung quanh là cuộn thêm một cấp độ:

  common_settings: & common_settings
 input_location: common_input
 output_location: dev_location
 mail_defaults: & mail_defaults
  SENDER_NAME: người gửi
   smtp_server: your_server
   đăng nhập: your_login
   mật khẩu: top_secret

 mặc định: - mặc định
   <<: * Common_settings
   mail:
     <<: * Mail_defaults
 phát triển:
   <<: * Mặc định
 sản xuất:
   <<: * Mặc định
   mail:
     <<: * Mail_defaults
     SENDER_NAME: sender_prod

Cho phép kiểm tra lại

$ ruby -rpp -e 'pp YAML::load(File.open("/tmp/a.yml"))["development"]["mail"]["login"]'
"your_login"
$

Bạn có nói rằng bạn có thêm một mức độ làm tổ, bạn có thể chắc chắn cuộn thêm một cấp nữa, nhưng sau đó nó trở thành một mớ hỗn độn. V́ vậy, nếu bạn không cố gắng để viết giải pháp cho tháp Hà Nội trong một tập tin conf, nó là tốt hơn để restucture tập tin conf hơn đào vào yaml hay cái ǵ khác. Nhưng đó là cuộc gọi của bạn anyway.

Một chút chuyển hướng vỏ

Ngày 10 tháng năm năm 2009 bởi Prashant · B́nh luận
Nộp theo: công nghệ

Dưới đây là làm thế nào chúng tôi thường làm chuyển hướng vỏ
$ ./pgm.sh args >out.txt 2>err.txt
Tôi muốn sửa đổi nó một chút và chạy như sau
$ ./pgm.sh args
với yêu cầu đầu ra đó và lỗi nên đi đến một số tên tập tin bên trong pgm.sh tính toán dựa trên args. Một minh họa trường hợp có thể là khi một ngày là một phần của args. V́ vậy, bạn muốn thiết bị xuất chuẩn để đi đến nói / / thư mục / pgm_out_YYYYMMDD.txt 1

Vấn đề với cách tiêu chuẩn của chuyển hướng N>file.txt có nghĩa là, liên kết mô tả tập tin N file.txt, là nó chỉ hoạt động cho quá tŕnh mới được chia hai và không cho quá tŕnh hiện tại.
do đó,
$ echo hi 1>out.txt ; echo hii . sẽ gửi hi out.txt nhưng sẽ in hii thiết bị xuất chuẩn 2

Đây là nơi exec nói đến cứu hộ của chúng tôi. Nếu chúng ta thêm exec 1>somefile.txt sau đó đầu ra từ phần c̣n lại của kịch bản sẽ đi somefile.txt

$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
$. / Test.sh sẽ chuyển hướng hi cũng như hii out.txt

Tương tự như vậy, để chuyển hướng thiết bị xuất chuẩn cũng như thiết bị lỗi chuẩn, chúng tôi sẽ làm một cái ǵ đó như thế này
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp

Bây giờ quay trở lại điểm ban đầu của chuyển hướng đến một số tập tin từ bên trong vỏ, để nói rằng chương tŕnh tính toán tên tập tin trong một số OUTFILE biến, chúng ta có thể vừa thực hiện exec 1>$OUTFILE

Điều đó giải quyết các vấn đề hiện tại. Nhưng bạn có thể muốn đi qua ví dụ sau đây mà đạt được truy cập ngẫu nhiên của tập tin trong shell script. Ví dụ là từ đây
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

Với ư kiến, mă này là tự giải thích.
-
1 Nó cũng có thể được thực hiện bởi $ ./pgm.sh args >pgm_out`date +%Y%m%d` nhưng ư tưởng là để tạo ra tên tập tin dựa trên một số logic trong chương tŕnh chính nó.
2 1 trong 1> out.txt là không cần thiết, nhưng nó làm rơ ở đây rằng chúng tôi đang chuyển hướng fd 1

Quy mô hay không quy mô

11 tháng một năm 2009 bởi Prashant · B́nh luận
Nộp theo: công nghệ

Trong khi nói về phân vùng theo chiều ngang của cơ sở dữ liệu, DHH của ROR nổi tiếng cho thấy rằng các công cụ mở rộng quy mô có thể chờ đợi, chắc chắn chờ đợi cho đến thời điểm nhu cầu kinh doanh của bạn yêu cầu nó. Bài viết của ḿnh chắc chắn làm cho ư nghĩa cho các thiết lập nhỏ nói rằng khởi động. Không phải nói rằng trong phần khởi động, bạn nên viết các chương tŕnh giới thiệu nhưng cho rằng chỉ có 24 giờ trong một ngày bạn nên tập trung vào việc phục vụ nói 1000 người sử dụng trong cách thực hiện nhiều hơn là mất giấc ngủ của bạn lo lắng về việc làm thế nào ứng dụng của tôi sẽ xử lư tải trọng 13,142 triệu người sử dụng. Nếu bạn nhận được rất nhiều những người sử dụng, bạn sẽ biết làm thế nào để quy mô. Đối với phần khởi động của khả năng mở rộng là một vấn đề tốt để giải quyết nhưng một vấn đề tốt hơn để có, tôi có nghĩa là bất kỳ khởi động để chạy vào vấn đề này!

Trong một bài viết liên quan đến Jeremy Zawodny viết bạn không nên phụ thuộc vào ông Moore nếu bạn có vấn đề khả năng mở rộng.

Kể từ khi những bài viết này đề cập đến định luật Moore không thể không viết rằng định luật Moore phải là một của pháp luật tổng quát nhất trong khoa học máy tính. Từ dự báo ban đầu của ông về mật độ bóng bán dẫn, luật này được trích dẫn bất cứ nơi nào bạn đi qua tăng trưởng theo cấp số nhân.