Một chút lắp ráp
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 dò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 vò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ồmint 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; }
Cricketing Thế giới đang chờ đợi một trật tự thế giới mới
Sau một loạt kéo dài năm kiểm tra và khoảng hai tháng, Anh tro khai hoang.
Chúng ta hãy nói về đội chiến thắng đầu tiên để trung bình của họ là 'trung bình' nếu bạn không muốn quan trọng. Greame Swann đóng góp với dơi sẽ được tính không kém so với đóng góp với bóng. Stuart Broad - tốt nhất tất cả tròn là không khởi động cho các thử nghiệm thứ 5. Andrew Strauss là chỉ phù hợp batsman và Jimmy Anderson là chỉ phù hợp bowler.
Ở đây không phải để trách móc những thành tựu của đội chiến thắng, nhưng để đưa vào quan điểm thực tế mà bất chấp tất cả những điều này, Australia đã mất. bạn sẽ phải suy nghĩ vài giây, nếu được yêu cầu đặt tên bowler tốt nhất của họ. Đúng, nó là BW Hilfenhaus,. Hauritz tốt hơn kỳ vọng của everbody nhưng vẫn không đủ tốt để được lựa chọn cho hai năm thử nghiệm. Nam Phi không bao giờ trở thành một beater thế giới mà không có một vòng quay đẳng cấp thế giới, Australia không thể hy vọng vẫn là một mà không có một một trong những đủ tốt ít nhất. Magician rời sân khấu và nó không giống như nghệ thuật nữa, quên ma thuật. Ponting đứng cao trong số những con người thấp hơn và Michael Clarke đứng lên rất thường xuyên, nhưng mà làm cho họ một nhóm với một số cầu thủ rất tốt và không phải là một đội bóng rất tốt.
Ashes 2009 sẽ được nhớ cho Ashes cuối Andrew Flintoff của, Stuart Broad của đến như 1 tất cả tròn (nếu ông cho biết thêm văn hóa dân gian Ashes một số chi tiết bắt đầu đầy hứa hẹn của ông), và một trong các thế kỷ đầu tiên nổi bật nhất của mọi thời đại bởi Trott nhưng nó cũng sẽ là nhớ đến như là điểm nơi ifs and buts về uy quyền tối cao của Úc cuối cùng đã được đưa vào phần còn lại, nó là hơn. Đừng làm cho tôi sai, họ vẫn có thể tìm Mike Hussey hoặc Stuart Clark nhưng bạn cảm thấy sự đóng góp của tất cả các cầu thủ vĩ đại thời gian khi họ bị mất đi. Đôi khi họ đến để nhắc nhở bạn của mình trong IPL nhưng họ vẫn không thể thay thế. Chúng ta hãy cảm thấy may mắn vì đã nhìn thấy Warne, McGrath và Gilchrist chơi với nhau và được hỗ trợ bởi Waughs, Ponting, Hyden, Martin và Langer.
Đi về phía trước, Nam Phi sẽ luôn luôn vẫn là một đội bóng rất tốt nhưng họ cần phải giành chiến thắng trận bán kết và nhất quán hơn trên toàn cầu, Việt Nam sẽ vẫn còn enigmatically rực rỡ, súng trẻ Ấn Độ có thể sẽ tìm thấy nó khó khăn để điền vào những đôi giày của người tiền nhiệm đặc biệt. Sri Lanka tiếp tục thể hiện cái nhìn thoáng qua của nghệ thuật thủ công. Tuy nhiên, chúng ta có thể phải chờ cho đôi khi trước khi có một đội ngũ tất cả ra chiếm ưu thế trước khi đội trưởng phàn nàn về sự thiếu cạnh tranh, như Steve Waugh đã làm một lần.
Trên một lưu ý liên quan - chúng ta hãy chào đón sự trở lại sắp tới của Asif, ông có 1 rất nhiều địa ngục tiềm năng, cho phép của hy vọng để nhìn thấy một số trong đó và cũng chào đón Andy Hoa awatar mới, bên phải, bạn không thể giữ người đàn ông tốt xuống cho lâu dài.
ruby 1 lót để tạo ra băm
Hôm qua trong khi đi qua một trong các chương trì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 vò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
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 gì 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 dò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
Git và Khảo sát Awesome
Dưới đây là hai liên kết cho cuộc khảo sát của git (phiên bản kiểm soát hệ thống) và cộng đồng (quản lý cửa sổ) tuyệt vời. Nếu bạn sử dụng một trong những, xin vui lòng đưa ra một số thời gian để điền vào bảng câu hỏi. Hãy suy nghĩ về nó như là cách đơn giản nhất để đóng góp cho phần mềm mà bạn sử dụng.
Dưới đây là các liên kết:
Git - http://www.survs.com/survey?id=2PIMZGU0&channel=Q0EKJ3NF54
Awesome - http://www.survs.com/survey?id=8BVEV3FO&channel=BH07CQ040D
Lưu ý - (tìm thấy trên các trang nhưng ở dưới cùng
) -
"Nếu bạn đã bật cookie, bạn luôn có thể trình điều tra một phần đầy, và quay trở lại câu trả lời của bạn ở thời gian sau đó, hoàn thành nó sau này."



































