Thứ Năm, 29 tháng 3, 2018

TẠI SAO NÊN HỌC LẬP TRÌNH JAVA

 
vì sao nên học lập trình Java ?

Bạn không nên nhầm lẫn java với javaScrip tiếng nói này dùng để thiết kế để dễ dùng C++ hơn, c++ 1 ngôn ngữ khá phức tạp. 90% trong số 500 công ty trong danh sách Fortune đã dùng Java để phát triển các vận dụng máy tính để bàn và các hệ thống trang web.

Thân thiện với người mới bắt đầu

Nói chung, Java được thiết kế tương đối gần gũi với người mới bắt đầu vì nó giả thiết rằng lập trình viên không phải là sáng dạ hoặc cẩn thận, vì vậy các lập trình sẽ có khả năng tự bước chân vào viết mã cho các áp dụng Java mà không găp quá nhiều khó khăn.

Tương đối đơn giản để sử dụng

Java là một ngôn ngữ cấp cao, có tức là Java tóm lược (tức là xử lý cho bạn) hầu hết các chi tiết phức tạp của máy tính (máy tính) như quản lý bộ nhớ, vv… nên chi, bạn có thể tụ hội vào lập trình thay vì lo lắng về các chi tiết nhỏ Nhiều người cho rằng như vậy sẽ tẻ nhạt và khó khăn.

Khả năng mở mang và dễ dàng hơn để Maintaina

Java là một tiếng nói tĩnh, nghĩa là mã của bạn sẽ phải được kiểm tra lỗi trước khi nó có thể được tích hợp vào một áp dụng. Điều này có tức thị lỗi sẽ dễ dàng hơn để theo dõi. Hơn nữa, vì các tiếng nói đánh máy tĩnh cũng nghiêm ngặt hơn với các định nghĩa của sự vật, bạn sẽ có ít lỗi lạ và không trông đợi, có nghĩa là mã nguồn của bạn sẽ dễ dàng hơn để duy trì khi nó phát triển về kích thước và sự phức tạp.

Nhanh

Là một tiếng nói đánh máy tĩnh, Java nhanh hơn các tiếng nói đánh máy tự động vị mọi thứ được xác định rõ ràng hơn. Do đó, khi áp dụng đang chạy, tài nguyên máy của bạn sẽ không bị phung phí khi rà định nghĩa của một cái gì đó trong mã của bạn.

Hiệu suất Tối ưu hóa

Các chương trình Java hiện đại giờ thậm chí còn hiệu quả hơn nhờ những trình biên dịch JIT (chỉ trong thời gian) và các JVM được cải tiến vì hiệu suất có thể được tối ưu hóa trong thời gian thực để giúp một chương trình Java chạy nhanh hơn. Điều này rất bổ ích khi vận dụng của bạn phát triển lớn hơn hoặc cần phải xử lý nhiều quy trình hơn.

cộng đồng

kích tấc cộng đồng là quan yếu bởi cộng đồng ngôn ngữ lập trình lớn hơn, bạn càng có nhiều cơ hội nhận được hỗ trợ. Khi bạn bước vào thế giới lập trình, bạn sẽ sớm hiểu được sự tương trợ quan trọng như thế nào, vì cộng đồng nhà phát triển chỉ muốn cho và nhận trợ giúp. Hơn nữa, một cộng đồng lớn hơn, càng có nhiều người sẽ xây dựng các dụng cụ hữu dụng để làm cho việc phát triển trong ngôn ngữ cụ thể dễ dàng hơn.

ngày nay, có hơn 600 tiếng nói lập trình đáng để ý trên toàn thế giới. do vậy, với bối cảnh đó trong tâm tưởng, hãy xem xét chi tiết về quy mô cộng đồng Java.

Lớn thứ 2 StackOverflow Cộng đồng

StackOverflow là một trang web Q & A lập trình bạn sẽ không ngờ gì nữa trở nên gần gụi với như là một người mới bắt đầu mã hóa. Java có một cộng đồng đồ sộ cho cả phát triển web back-end và phát triển Android.

Cộng đồng Meetup lớn thứ 4

Tại các buổi gặp mặt, bạn thường có thể kết nối mạng và học hỏi từ các nhà phát triển đồng nghiệp. Các cuộc chuyện trò thường cung cấp tư vấn cho những người muốn nó. Có hơn 1.4k Java Meetup nhóm, tổng cộng trên 580.000 thành viên trên toàn thế giới. Về ngôn ngữ lập trình, Java có cộng đồng meetingup lớn thứ 4.

ngôn ngữ được gắn thẻ nhiều thứ hai tại GitHub

Các dự án hữu dụng hơn có, nhiều khả năng một ai đó đã xây dựng được một chức năng mà bạn cần và xây dựng nó tốt, điều này sẽ đẩy nhanh quá trình phát triển của bạn. GitHub có hơn 1,5 triệu dự án Java, hơn 1,1 nghìn trong số đó đã được hơn 500 người đánh dấu sao, đứng thứ 2 về các dự án hữu ích.

Nói chung, cộng đông java khá lớn, vì vậy có rất nhiều dụng cụ và thư viện tốt sẽ giúp dễ dàng quá trình phát triển các ứng dụng Java và học Java nói chung.

Các dịp nghề

Java là Kỹ năng được đề nghị nhiều thứ 3 trong danh sách Angel. Nhiều gã khổng lồ về công nghệ như Google hay Amazon cũng sử dụng Java để phát triển phần mềm phụ trợ cho các trang web của họ, và vì Java có hiệu suất khá tốt, rất nhiều người mới bắt đầu đã đạt đến điểm mở mang sẽ tích hợp các áp dụng của họ với Java để cung cấp các tính năng cần thiết hiệu suất.

ngày mai

Theo chỉ số TIOBE, Java là tiếng nói Phổ biến nhất vào năm 2015, Java có một chu kỳ cập nhật khá chậm về các phiên bản mới để bảo đảm tương hợp ngược, và các doanh nghiệp cũng chậm ưng ý những đổi thay, bởi vậy điều này có hiệu quả với cả hai bên. Oracle sở hữu Java nên tiếng nói đã tích cực làm việc để giữ liên can, và lỗi được khăng khăng tương đối nhanh chóng.

mặc dầu Java đã bị chỉ trích nhiều lần và nhiều tiếng nói đã nỗ lực thay thế nó như một Java tốt hơn, với việc phát hành một Java tốt hơn (Java 8) vào ngày 18 tháng 4 năm 2014, Java rõ ràng sẽ tiếp tục giữ liên tưởng và sẽ trở thành mạnh mẽ, Vì nó đã có nhiều phương tiện và thư viện trưởng thành sẽ không dễ dàng để thay thế.

Số người học java tăng 22,4% vào năm 2015

Khả năng duy trì sự hệ trọng và tồn tại của ngôn ngữ lập trình cũng phụ thuộc vào việc liệu ngôn ngữ có đang nhận được máu mới hay không, bởi vậy rõ ràng Java sẽ tiếp chuyện cai trị trong những năm tới.

 

Thứ Tư, 28 tháng 3, 2018

10 cuốn sách tester nên đọc


 


Trong một lần thu vén máy tính cũ, tôi tình cờ phát hiện lại cuốn sách Testing Computer Software được viết bởi Cem Kaner, Hung Q Nguyen, và Jack Falk. Tôi được tặng cuốn sách này như một món quà cho một dự án được thực hành tốt vào năm 2003 từ một người bạn là giảng sư Khoa học máy tính. Cuốn sách mang lại một số ký ức và khiến tôi nghĩ suy nhiều về những cuốn sách có ảnh hưởng đến cuộc sống của chúng ta như thế nào. Có rất nhiều những khóa học cho tất tật mọi thứ, chỉ dẫn tuốt, và những blog ấy xuất hiện trên truyền thông. Tuy nhiên chẳng thể so sánh giữa việc bạn download những thông báo từ Internet với việc lấy thông báo từ những cuốn sách huyền thoại đích thực.

Thế nhưng, bạn có biết về những quển sách về Testing huyền thoại chưa?

nền móng của Software Testing – Cem Kaner : Đây là cuốn sách trước hết của tôi về Testing nên chắc vì vậy mà tôi sẽ có một số tây vị dành cho nó đưa nó lên vị trí trước nhất. Đây là cuốn sách nền móng về Hardcore mà tôi muốn giới thiệu cho những ai đang chập chững bước vào thế giới của Tester. Cuốn sách sẽ giúp bạn hiểu một cách đơn giản về Testing như Test Cases và quản lý Test Cases. Tuy nhiên, với riêng tôi, tôi thích nhất là chương “Sự cấp thiết của Software Testing”. PHẢI ĐỌC!!!

Agile Estimating and Planing – Mike Cohn : nếu bạn muốn học về Agile Tester thì cuốn sách này là một chọn lọc tốt dành cho bạn. Cuốn sách tập hợp vào các phương pháp lập mưu hoạch Test Cases mà bạn sẽ gặp phải trong Agile Testing. Bạn sẽ học được cách tạo một kế hoạch tốt trong một khoảng thời kì ngắn và tìm hiểu một số những phương tiện căn bản có thể dùng trong Agile Development.

chỉ dẫn thực hiện Testing trong DevOps – Katrine Clokie : Cuốn sách này biểu lộ những đổi thay phức tạp liên tiếp trong quá trình phát triển Agile. Bạn sẽ học cách thực hành Automation testing đặc biệt trong sự phát triển của Agile.

Selenium Testing Tools Cookbook – Unmesh Gundecha : Cuốn sách giải thích các quy trình Testing hệ trọng đến việc xây dựng và Automated Test cho các vận dụng Web. Đây hứa hẹn là cuốn sách hữu ích trước nhất cho các Web Automation Tester.

Bug Advocacy – Cem Kaner và Rebecca Fiedler : Sau khi đọc cuốn sách này, bạn sẽ có thể xác định được những lỗi thường gặp và giải pháp phần mềm thông thường, thưa lỗi và quan trọng là cách xử lý lỗi không phải lặp lại. Đây chắc hẳn là cuốn sách must-have-item cho người học hoặc đang thực hành Testing!!!

Software Testing – Ron Patton: Một cuốn sách khác dựa trên các nguyên tắc cơ bản tụ tập vào các chiến lược và thủ tục. Cuốn sách sẽ giúp bạn mau chóng tiếp cận những thuật ngữ và phương pháp cơ bản mà bạn sẽ phải cần đến. Nó cung cấp phương pháp dễ dàng hơn trong việc tìm ra các vấn đề Software Testing phổ quát nhất. Sau khi đọc cuốn sách này bạn có thể dễ dàng thực hiện các bài soát trên các vận dụng web, rà về khả năng sử dụng, chức năng và nhiều thứ khác.

The Agile Samurai – Jonathan Rasmusson: Cuốn sách này ghi chi tiết về thế giới Agile và làm thế nào một nhóm Agile giỏi có thể được hình thành. Cuốn sách giao hội vào những Testers đương đại và tầm quan yếu của việc hiểu được yêu cầu của khách hàng, đặc biệt là trong bối cảnh phát triển nhanh. Sau khi đọc bạn sẽ có thể dùng các kỹ thuật Agile, giúp đáp ứng được sản phẩm theo đề nghị của khách hàng. Tóm lại, phải đọc cho các bạn có định hướng với Agile!

thực hành Automated Software Testing: Làm thế nào để tiết kiệm thời kì và hoài thấp hơn mà vẫn nâng cao chất lượng? – Elfriede Dustin, Thom Garrett, Bernie Gauf : Như cái tên cho thấy, cuốn sách này sẽ làm nổi bật tại sao Automation Test lại làm việc tốt hơn Testings. Cuốn sách giúp xây dựng các kỹ năng và kiến ​​thức cần thiết trong vấn đề Automation Testing.

Bài học kinh nghiệm về Software Testing – Cem Kaner : Cuốn sách chỉ ra những sai lầm phổ biến mà mọi người thường mắc phải khi bắt đầu công việc QA. Cuốn sách chứa đựng những ví dụ thực tiễn sẽ giúp bạn vượt qua các vấn đề trước khi chúng nảy và tăng hiệu quả của Test Team.

Trải nghiệm Test Automation – Dorothy Graham & Mark Fewster : Cuốn sách này bao gồm 28 trường hợp thực tiễn về Automation Testing cùng 14 giai thoại ngắn. Cuốn sách là những kinh nghiệm của tác giả, giúp bạn phát triển kỹ năng Automation Testing của mình.

 

Thứ Ba, 27 tháng 3, 2018

IT TALKSHOW 3: “BẢO MẬT THÔNG TIN - CHÌA KHÓA VÀNG CHO SỰ THÀNH CÔNG

🔐🔐🔐 An ninh mạng tại Việt Nam năm 2017 đã có những diễn biến phức tạp. Các thiết bị kết nối Internet (IoT) như Router Wi-Fi, Camera IP… trở thành đích nhắm của hacker cùng sự bùng nổ nhanh chóng của các biến thể mã độc mới đã xuất hiện với quy mô toàn cầu, gây ảnh hưởng lớn về tài chính và các hoạt động kinh tế, xã hội.

 


🔏 Theo báo cáo mới nhất, từ đầu năm 2017 đến nay, Trung tâm VNCERT đã ghi nhận và điều phối xử lý gần 10.000 sự cố an ninh mạng bao gồm 1.762 sự cố website lừa đảo (Phishing), 4.595 sự cố về phát tán mã độc (Malware) và 3.607 sự cố tấn công thay đổi giao diện (Deface). Và theo nhận định của các chuyên gia, tình hình an toàn thông tin mạng trong năm 2018 sẽ diễn biến phức tạp hơn với các cuộc tấn công mạng tinh vi và đặc biệt nguy hiểm nhằm vào các hạ tầng trọng yếu quốc gia. Bên cạnh đó, tình trạng tấn công lừa đảo qua email và mạng xã hội sẽ tiếp tục gia tăng và diễn biến khó lường. Các hình thức tấn công mạng như Phishing và Dos nhằm vào Big Data cũng được dự báo tiếp tục gia tăng về số lượng, phức tạp hơn về kỹ thuật, rộng lớn hơn về quy mô.

🔏 Trong bối cảnh vấn đề đó, chuỗi sự kiện IT TALKSHOW với chủ đề: BẢO MẬT THÔNG TIN - CHÌA KHÓA VÀNG CHO SỰ THÀNH CÔNG sẽ mang lại cho các bạn những thông tin cũng như kiến thức bổ ích trong chương trình.

👉👉 Chủ đề số 3: BẢO MẬT THÔNG TIN - CHÌA KHÓA VÀNG CHO SỰ THÀNH CÔNG

🕢 Thời gian: 18h30 - 21h00 ngày 📆 31/3/2018 tại Hội trường P5, tầng 3, tòa nhà 25T2, Nguyễn Thị Thập, Hà Nội

👉 Số lượng tham dự: 100 người
👉 Khách mời chia sẻ:

👤 Ông Nguyễn Minh Đức - Nhà sáng lập CyRadar

👤 Ông Ngô Việt Khôi - Chuyên gia An ninh Thông tin, Nguyên giám đốc quốc gia Trend Micro Việt Nam

👤 Ông Nguyễn Ích Cường - Giám đốc Công ty CP Đầu tư & Phát triển Nguyễn Ích

🎁🎁🎁 Đặc biệt, nhân dịp kỷ niệm Tháng thanh niên, BTC chúng tôi tặng tới 100% Chi phí tham gia chương trình. Nhanh tay đăng ký vì số lượng có hạn. 

Đăng Ký Ngay Tại Đây  http://bit.ly/2FLRJcz 

Thứ Bảy, 24 tháng 3, 2018

CyRadar cảnh báo chiến dịch lừa đảo thị trường tiền ảo hàng tỷ đồng

CyRadar - startup hoạt động trong lĩnh vực an toàn thông báo do FPT ươm tạo và phát triển vừa cho biết, những ngày cuối tháng 2/2018, hệ thống của CyRadar đã ghi nhận trường hợp lừa đảo vô cùng tinh vi để chiếm đoạt hàng loạt đồng tiền ảo (cryptocurrency) trị giá hàng tỷ đồng.
 

 

 
Theo như ghi nhận của CyRadar, đã có nạn nhân Việt Nam bị lừa hơn 350.000 USD, tương đương gần 8 tỷ đồng. Hacker sẽ sử dụng ví riêng đối với mỗi nạn nhân, nên số tiền bị hack thực tiễn có thể lớn hơn rất nhiều lần (Ảnh minh họa. Nguồn: Internet)



phân tách cách thức lừa đảo của hacker, chuyên gia CyRadar cho hay, trước hết, nạn nhân nhận được 1 email mạo xưng sàn giao dịch CoinDesk.

 

 
Nội dung email giả mạo sàn giao thiệp giao tiếp CoinDesk (Nguồn ảnh: CyRadar)

Khi click vào “Read the whole story” để đọc thêm thông tin trong email giả mạo trên, nạn nhân sẽ được chuyển đến trang web lừa đảo có tên miền unicode coindeṣk[.]com giả danh tên miền của sàn Coindesk (chữ s là kí tự unicode, thực ra là tên miền xn--coindek-873c[.]com).

Lợi dụng đặc điểm của tên miền có ký tự unicode, kẻ xấu đã đăng ký tên miền giả danh gần như giống hệt tên miền chính gốc, nếu không chú ý kỹ, sẽ rất khó để phân biệt.
 

 
Nội dung lừa đảo từ trang web giả mạo có tên miền xn--coindek-873c[.]com (Nguồn ảnh: CyRadar)
 
Theo CyRadar, nội dung lừa đảo mà kẻ xấu đưa ra để dụ nạn nhân khá hấp dẫn, cho biết nạn nhân sẽ được nhận thêm 0,5 EOS cho mỗi đồng EOS đang sở hữu và 10 EOS cho mỗi đồng ETH đang sở hữu.

Khi nạn nhân làm theo chỉ dẫn, click vào “MyEtherWallet” hoặc “submit your claim” trong hình trên, sẽ nối chuyển sang 1 tên miền unicode khác “myetḣerwalleṫ.com” mạo danh tên miền “myethwallet[.]com” (chữ ḣ và chữ ṫ là kí tự unicode, thực ra là tên miền “xn--myeterwalle-nl8et7a[.]com”)
 

 
Nội dung lường đảo từ trang web giả mạo có tên miền xn--myeterwalle-nl8et7a[.]com (Nguồn ảnh: CyRadar)

“Sau khi nạn nhân điền private key và submit, hacker đã có toàn quyền sử dụng ví mà nạn nhân dùng để lưu các đồng ETH, EOS ... Từ đó, hacker đã gửi sờ soạng số tiền mà nạn nhân đang có sang trương mục của hacker”, chuyên gia CyRadar nêu.

Theo như ghi nhận của CyRadar, đã có nạn nhân Việt Nam bị lừa hơn 350.000 USD, tương đương gần 8 tỷ đồng. Hacker sẽ dùng ví riêng đối với mỗi nạn nhân, nên số tiền bị hack thực tế có thể lớn hơn rất nhiều lần.
 

 

 

 
Ứng dụng công nghệ Malware Graph, CyRadar phát hiện hacker dùng 7 tên miền mạo danh để lừa đảo người dùng.
 
 
Dựa vào công nghệ Malware Graph, CyRadar đã phát hiện hacker chuẩn bị tổng cộng 7 tên miền mạo xưng can dự đến chiến dịch lừa đảo này. Cụ thể, các tên miền được hacker dùng trong chiến dịch lừa đảo thị trường tiền ảo này gồm có: coindeṣk[.]com (xn--coindek-873c[.]com); coindeṡk[.]com (xn--coindek-s73c[.]com); coindesḳ[.]com (xn--coindes-bx3c[.]com); myetḣerwalleṫ.com (xn--myeterwalle-nl8et7a[.]com); myetherẇalleṫ[.]com (xn--myetheralle-jb9exm[.]com); mẏetherwalleṫ[.]com (xn--metherwalle-jb9ejq[.]com); mẏetherẉallet[.]com (xn--metherallet-ol9eqc[.]com).

Chuyên gia CyRadar cho biết thêm, doanh nghiệp hiện đã gửi những thông báo độc hại nói trên cho cộng đồng an ninh mạng trên VirusTotal, từ đó các hãng bảo mật khác có thể cập nhật thông tin để bảo vệ người dùng.

CyRadar nhận định, hiện tượng lường đảo phê duyệt các tên miền unicode đang ngày một trở nên phổ quát. Điều này cũng đã được CyRadar cảnh báo từ hơn 1 năm trước. Cách lừa đảo này được hacker chọn lọc vì tính “hiệu quả” của nó, đặc biệt khi nạn nhân dùng smartphone để truy cập. “Bởi lẽ trên điện thoại, do màn hình nhỏ nên nạn nhân sẽ khó phát hiện các tên miền trên là mạo hơn”, chuyên gia CyRadar san sớt.

CyRadar khuyến cáo người dùng cần cảnh giác và thẩm tra kỹ đối với những thông báo có lợi về tài chính cho bản thân, đặc biệt là các tin liên can đến thị trường tiền ảo.

Bên cạnh đó, người dùng cũng cần soát kỹ các tên miền, đường dẫn trước khi điền hoặc gửi các thông tin quan yếu; tuyệt đối không để lộ hoặc gửi private key của các ví; đồng thời cần lưu ý rằng cách nhận coin airdrop thường ngày chỉ cần điền địa chỉ ví, không cần gửi private key.

Thứ Ba, 20 tháng 3, 2018

Meo học lập trình thật nhanh

 


ngôn ngữ lập trình mới như Dart, Go, Kotlin, Elixir và… vô vàng những ngôn ngữ, framework mới được tung ta ra mỗi ngày! Việc làm quen với những điều mới đôi khi tốn kha khá thời kì của không ít lập trình viên chúng ta. 

Bài viết này sẽ tổng hợp một mẹo từ hackernoon giúp bạn có thể thực hành để thúc đẩy quá trình học trong tiếng nói lập trình và framework mới . 

Giỏi ngôn ngữ trước. Sau đó hãy tìm hiểu framework. 

Một số lập trình viên có xu hướng lo học framework mới, như Ruby on Rails, mà không hề biết gì về tiếng nói mà chúng dựa trên, trong trường hợp này là Ruby. Đó là một vấn đề nghiêm trọng, đặc biệt là với Rails, bởi nó đối với Ruby như là một DSL (tiếng nói cụ thể miền). 

Luyện tập giải code và fix bug. 

Có rất nhiều trang web như LeetCode, HackerRank và Project Euler có thể giúp bạn tập tành các bài tập này một cách lưu loát. Bạn sẽ tìm hiểu thêm về cú pháp, thư viện và logic. Đó là một cách hay để chuẩn bị cho cuộc phỏng vấn.
dùng StackOverflow và Code Review càng nhiều càng tốt. 

Khi bạn bắt đầu giải quyết code, bạn sẽ gặp phải rất nhiều vấn đề. Để giải quyết chúng, bạn có thể dùng StackOverflow, một trang web mà bất kì developer nào cũng phải biết. 

ngoại giả còn có Code Review, một cộng đồng StackExchange, cùng một mạng từ StackOverflow. Trang sẽ đánh giá code của bạn với các chuyên gia trong ngành
Xem thật nhiều code 

GitHub là nơi cấp thiết nếu bạn muốn thành công trong công việc cũng như học tốt ngôn ngữ lập trình. Ở đó bạn sẽ tìm thấy code được viết bằng ngôn ngữ bạn đang học. Nếu bạn tự tín đóng góp, điều đó thậm chí còn tốt hơn.
Cài đặt một linting tool 

Linters là phương tiện phân tích code và đánh dấu các lỗi. Một dụng cụ linting sẽ đánh dấu lỗi cho bạn để sửa sang và nhờ đó mà việc học hỏi cũng sẽ diễn ra nhanh và dễ dàng hơn. Đối với Ruby, tôi dùng RuboCop như là một linter.
Luyện viết code liên tục 

Khi mới học Python, tôi dựa vào kiến ​​thức C # để suy luận logic code của Python. Đó là một cách tuyệt trần để học một ngôn ngữ lập trình mới, nhưng không đủ để đạt trình cao, do bạn không hề học cách lập trình thật sự của ngôn ngữ đó. 

Để có thể giỏi một ngôn ngữ, bạn phải đọc rất nhiều code được viết bởi những pro và bắt chước theo họ.
Hãy tạo ra một áp dụng 

Mục đích chính của việc học một tiếng nói lập trình là xây dựng một cái gì đó. Khi tôi học Ruby, tôi đã sử dụng framework Rails để tạo một blog, một vận dụng mới, cũng như là một bản sao của Wikipedia và một trang web giống như Rotten Tomatoes. 

Xây dựng một cái gì đó sẽ giúp phát triển mọi khía cạnh trong việc học hỏi một tiếng nói mới của bạn.
Đừng bỏ cuộc 

Bạn cần thời kì và tập hợp để có thể thạo một tiếng nói. Đừng bỏ cuộc vày bạn có thể đang gần mục tiêu hơn bạn nghĩ đấy. Nếu bạn bị mắc kẹt, hãy nhờ viện trợ. Có rất nhiều nguồn bổ ích trên mạng. 

Tôi biết một lập trình viên đã nghiên cứu C # trong hơn 20 năm. Ông vẫn khám phá ra những điều mới về C # và. NET hằng ngày. Lập trình viên này là Antonio Maniero, thành viên có ảnh hưởng nhất của StackOverflow ở Bồ Đào Nha. 

Hãy luôn nhớ: chúng ta sẽ không bao giờ học được mọi thứ về một ngôn ngữ, và đó là điều sẽ giúp chúng ta luôn mong muốn được học hỏi nhiều hơn mỗi ngày. 

Hãy nhớ rằng, bạn có thể giỏi về điều gì đó nhưng vẫn luôn có nhiều điều cần phải học. 
 

 

Bức tranh thuật toán phân cụm

 Nếu bạn đang có ý định trở nên một Data Scientist (nhà khoa học dữ liệu) thì ngày nay đang là 1 thời điểm không hề tồi chút nào. Những con người kể cả khó tính nhất cũng sẽ đổ dồn sự Chú ý khi bạn đề cập tới Big Data trong cuộc đối thoại, đám đông sẽ cảm thấy nao nức khi được nghe bạn chém gió về Trí tuệ nhân tạo cũng như Học máy. Thậm chí những con số do Google cung cấp tại đây còn cho thấy: toàn bộ vẫn chưa có dấu hiệu dừng lại, chúng vẫn tiếp phát triển với tốc độ rất nhanh. ngày càng có rất nhiều các giải thuật ‘thông minh’ đã được phát minh ra để viện trợ các nhà khoa học dữ liệu. tuốt luốt chúng nhìn chung đều có vẻ rất phức tạp, nhưng nếu chúng ta hiểu được và biết cách kết hợp một cách nhuần nhuyễn thì mọi việc sẽ trở thành dễ dàng hơn rất nhiều.

 Các khóa học về khai phá dữ liệu (Data Mining) hoặc học máy (Machine Learning) vẫn thường khai mạc bằng những thí dụ về phân cụm, lí do đơn giản bởi vì chúng rất thực tế và không quá khó hiểu. Bài toán phân cụm là 1 nhánh ứng dụng chính của lĩnh vực Unsupervised Learning (Học không giám sát), trong đó dữ liệu được trình diễn.# trong bài toán không được dán nhãn (tức là không có đầu ra). Trong trường hợp này, thuật toán sẽ tìm cách phân cụm – chia dữ liệu thành từng nhóm có đặc điểm rưa rứa nhau, nhưng đồng thời đặc tính giữa các nhóm đó lại phải càng dị biệt càng tốt. Dữ liệu của chúng ta có thể là bất cứ thứ gì, chẳng hạn như dữ liệu về khách hàng: Thuật toán phân cụm sẽ rất hữu ích trong việc đánh giá và chia thành các nhóm người dùng khác nhau, rồi từ đó ta có thể đưa ra những chiến lược marketing hạp trên từng nhóm người dùng đó.K-Means Clustering Sau khi dạo qua những màn giới thiệu chung, phần nhiều các khóa học Data Mining sẽ bắt đầu luôn với K-Means: 1 thuật toán tuy đơn giản nhưng lại khá hiệu quả và được sử dụng rộng khắp. Trước khi bắt tay vào làm, chúng ta cần phải xác định sẵn 2 thứ: đó là hàm khoảng cách được dùng (ví dụ như khoảng cách Euclid) và số lượng nhóm mong muốn (ta sẽ kí hiệu trong bài viết này là k )

Mô phỏng quá trình phân cụm K-Means

 Thuật toán bắt đầu với việc chọn ra tâm của từng cụm. Chúng ta có thể đơn giản chọn k điểm tình cờ trong bộ, hoặc dùng một số hướng tiếp cận nào khác, nhưng nhìn chung ngẫu nhiên vẫn là cách tốt nhất. Rồi kế tiếp, luân phiên lặp lại 2 thời đoạn sau:tuổi gán : gán từng phần tử trong bộ dữ liệu của chúng ta vào các cụm. Cách thức tiến hành đó là: với mỗi điểm, hãy tính khoảng cách từ điểm đó tới vị trí các tâm, sau rốt: tâm nào gần nhất thì gán vào cụm ứng với cái tâm đógiai đoạn cập nhật : duyệt từng cụm, cập nhật lại tọa độ của tâm: Như đã biết, sau giai đoạn 1, chúng ta đã thu được k cụm ứng với dãy các điểm được gán cho từng cụm. Tọa độ tâm mới của cụm sẽ bằng trung bình cộng tọa độ các điểm trong cụm Sau càng nhiều vòng lặp, các tâm càng chuyển di chậm dần, và tổng khoảng cách từ mỗi điểm trong cụm tới tâm cụm lại càng nhỏ đi. Quá trình sẽ kết thúc cho tới khi hàm tổng khoảng cách tụ hợp (tức là không có sự thay đổi nào xảy ra ở tuổi gán nữa). Lúc này tọa độ tâm vẫn sẽ bằng trung bình cộng các điểm ngày nay trong cụm, hay nói cách khác tâm sẽ không còn chuyển di tiếp nữa. Chú ý thuật toán K-Means chỉ bảo đảm được quá trình này sẽ đưa hàm tổng khoảng cách tụ hợp tới điểm cực tiểu địa phương, chứ không kiên cố đó là giá trị nhỏ nhất của thảy hàm số . Tuy nhiên, điều này là có thể ưng ý được vì KHÔNG phải mô hình nào càng sát với bộ dữ liệu huấn luyện thì cũng sẽ càng tốt. Ta có thể nhận thấy rằng việc chọn lọc tâm lúc khởi điểm cũng có ảnh hưởng tới kết quả chung cục thu được, do đó đã nảy sinh rất nhiều quan điểm trái chiều về vấn đề này. Một ý tưởng đơn giản là cho chạy K-Means nhiều lần với mỗi bộ tâm ngẫu nhiên khác nhau, rồi sau đó chọn ra mô hình tốt nhất ưng chuẩn việc xét giá trị nhỏ nhất của các hàm tổng khoảng cách ứng với chúng. Một hướng tiếp cận khác trong việc chọn tâm ban sơ đó là chọn những điểm “xa nhất”. Việc này có thể cho kết quả tốt hơn, tuy nhiên ta sẽ mắc phải vấn đề với những phần tử “nhiễu”, đó là những phần tử nằm riêng lẻ một mình tách biệt với phần còn lại trong bộ dữ liệu. Do đó chúng sẽ tự lập ra 1 cụm riêng của chính mình. Có một cách giải quyết đã được phát minh để cân bằng song song được cả 2 điều trên, nó có tên gọi là  K-Means++ : trong đó, tâm khởi đầu vẫn được chọn ngẫu nhiên, nhưng là chọn lần lượt (thay vì đồng loạt) và kèm theo xác suất tình cờ tỉ lệ thuận với khoảng cách tới lót dạ vừa chọn trước đó . tức thị, các điểm càng nằm phía xa sẽ có khả năng được chọn làm tâm kế tiếp càng lớn. Do đó, nếu có 1 nhóm các điểm, khả năng chỉ 1 điểm từ nhóm đó được chọn làm tâm cũng sẽ cao hơn.   K-Means++ cũng đang được chọn dùng cho bước khởi tạo của thuật toán K-Mean trong thư viện Scikit-learn của Python. Nếu bạn đang lập trình Python, bạn có thể dùng ngay thư viện này. Đối với Java, thư viện Weka sẽ là 1 sự chọn lựa đáng để cân nhắc.Java (Weka)  // Load some data Instances data = DataSource.read("data.arff"); // Create the model SimpleKMeans kMeans = new SimpleKMeans(); // We want three clusters kMeans.setNumClusters(3); // Run K-Means kMeans.buildClusterer(data); // Print the centroids Instances centroids = kMeans.getClusterCentroids(); for (Instance centroid: centroids) System.out.println(centroid); // Print cluster membership for each instance for (Instance point: data) System.out.println(point + " is in cluster " + kMeans.clusterInstance(point));  // Load some dataInstances data = DataSource . read ( "data.arff" ) ; // Create the modelSimpleKMeans kMeans = new SimpleKMeans ( ) ; // We want three clusterskMeans . setNumClusters ( 3 ) ; // Run K-MeanskMeans . buildClusterer ( data ) ; // Print the centroidsInstances centroids = kMeans . getClusterCentroids ( ) ;for ( Instance centroid : centroids ) System . out . println ( centroid ) ; // Print cluster membership for each instancefor ( Instance point : data ) System . out . println ( point + " is in cluster " + kMeans . clusterInstance ( point ) ) ; Python (Scikit-learn) >>> from sklearn import cluster, datasets >>> iris = datasets.load_iris() >>> X_iris = iris.data >>> y_iris = iris.target >>> k_means = cluster.KMeans(n_clusters=3) >>> k_means.fit(X_iris) KMeans(copy_x=True, init='k-means++', ... >>> print(k_means.labels_[::10]) [1 1 1 1 1 0 0 0 0 0 2 2 2 2 2] >>> print(y_iris[::10]) [0 0 0 0 0 1 1 1 1 1 2 2 2 2 2] >>> from sklearn import cluster , datasets>>> iris = datasets . load_iris ( )>>> X_iris = iris . data>>> y_iris = iris . target >>> k_means = cluster . KMeans ( n_clusters = 3 )>>> k_means . fit ( X_iris )KMeans ( copy_x = True , init = 'k-means++' , . . .>>> print ( k_means . labels_ [ :: 10 ] )[ 1 1 1 1 1 0 0 0 0 0 2 2 2 2 2 ]>>> print ( y_iris [ :: 10 ] )[ 0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 ] Ở trong thí dụ Python phía trên, ta dùng bộ dữ liệu Iris chứa kích tấc đài hoa và cánh hoa cho 3 giống hoa Iris khác nhau, chia những dữ liệu này thành 3 cụm, rồi sau đó so sánh với giá trị thực tiễn của chúng, để soát độ xác thực của thuật toán. Trong trường hợp này, chúng ta thấy rằng dữ liệu được tách thành 3 cụm (ứng với 3 giống hoa) khác nhau và K-Means đã nhận ra xác thực những phần tử nào cùng nằm chung 1 cụm ( Chú ý rằng Unsupervised Learning là bài toán không có nhãn nên chỉ số k bằng (0, 1, 2) ở trên chỉ là tình cờ, có tác dụng phân biệt chứ không phải là nhãn đầu ra ). Tuy nhiên, làm cách nào mà ta chọn ra được số cụm (k) ăn nhập? Câu hỏi rưa rứa như vậy thường rất phổ quát trong Học máy. Nếu chúng ta yêu cầu nhiều cụm hơn, dữ liệu sẽ được chia nhỏ ra, và giá trị error (tổng khoảng cách) cũng sẽ nhỏ hơn. Vậy, như thế có phải sẽ là tốt hơn nếu ta chọn k lớn nhất có thể? Chúng ta có thể chọn k = m (số điểm), như thế mỗi điểm sẽ trở thành tâm của chính nó và mỗi cụm sẽ chỉ có 1 điểm? Điều đó không sai, error sẽ bằng 0, nhưng chúng ta sẽ chẳng thể tìm được tả đơn giản cho dữ liệu, và mô hình thu được cũng không thể phủ được những điểm mới thêm vào. Vấn đề này có tên gọi là overfitting , và tất nhiên chúng ta sẽ không mong gặp phải nó. Một cách để giải quyết vấn đề này là bổ sung thêm hàm phạt (penalty) cho số lượng cụm. Từ đó, đích của ta lúc này không chỉ còn giảm thiểu error, mà phải thăng bằng cả error + penalty . Giá trị error sẽ tiến dần tới 0 khi chúng ta tăng số lượng cụm, nhưng song song penalty cũng tăng theo. Quá trình tăng số lượng cụm sẽ dừng lại khi mà lượng error giảm đi thấp hơn so với giá trị penalty, và kết quả thu được là kết quả tối ưu. Có một giải pháp dùng Bayesian Information Criterion (BIC) để tính k có tên gọi là X-Means [Pelleg and Moore, 2000]. Một thứ khác chúng ta cần quan hoài đó là hàm khoảng cách. Hiển nhiên, với những điểm nằm trong không gian, khoảng cách Euclid rõ ràng là hiệu quả nhất, nhưng thỉnh thoảng ta cần thêm vài “mánh khóe” cho những loại dữ liệu đặc trưng khác nhau, thí dụ như các giá trị rời rạc,… Việc này đề nghị khá nhiều kiến thức chuyên ngành liên hệ tới dữ liệu đó. Hoặc, chúng ta có thể nhờ tới sự viện trợ của Học máy để huấn luyện ra hàm khoảng cách hạp nhất. Nếu bạn có 1 tập các dữ liệu huấn luyện (đã biết trước chúng được phân cụm thế nào qua nhãn của chúng), kĩ thuật Supervised Learning (học có giám sát) có thể được vận dụng để tìm ra hàm khoảng cách ăn nhập, rồi vận dụng nó vào trong dữ liệu cần phân cụm. Ngoài ra, có 1 thuật toán phân cụm khác có tên là Expectation-Maximization (EM) cũng gần na ná với 2 giai đoạn được dùng trong K-Means. Nói chuẩn xác thì K-Means có thể coi là 1 phiên bản đơn giản hơn của EM. Tuy nhiên, đừng nhầm lẫn chúng với nhau mặc dầu có rất nhiều điểm chung giữa 2 thuật toán này.EM Clustering Như vậy, với K-Means: mỗi điểm sẽ được gán cho 1 nhóm và mỗi nhóm được đại diện bởi 1 tâm. Điều này không quá phức tạp, vì chúng ta chưa gặp phải vấn đề cụm chồng chéo, hoặc những cụm có hình dáng khác hình tròn. Với EM , ta hiện giờ có thể tiến một bước xa hơn nữa và đặc tả mỗi cụm bằng tâm của nó (kì vọng), covariance (hiệp phương sai – qua đó ta có thể trình diễn được cụm hình elip) và weight (kích thước của cụm). Xác suất mà 1 điểm thuộc về 1 cụm bây chừ được tính bằng xác suất phân phối Gauss đa biến.

 Chúng ta sẽ bắt đầu EM bằng cách tính, với mỗi điểm, xác suất mà nó thuộc về từng cụm là bao nhiêu (hẳn nhiên, các cụm ban sơ cũng được khởi tạo ngẫu nhiên). Đây là bước E-step. Nếu 1 cụm là “ứng viên” tốt đối với 1 điểm, nó sẽ có xác suất gần với 1. Tuy nhiên, có xảy ra trường hợp 2 hay nhiều cụm cùng là ứng viên tốt, do đó điểm của chúng ta lúc này sẽ có phân phối xác suất giữa các cụm. Tính chất này của thuật toán được gọi là “soft clustering”. Bước M-step bây chừ tính lại các tham số của mỗi cụm, bằng cách dùng kết quả xác suất của các điểm được tính ở bước E-step. Để tính tâm mới, covariance mới và weight mới của 1 cụm, mỗi dữ liệu điểm sẽ được đánh trọng số tỉ lệ thuận với xác suất biến cố “điểm đó thuộc cụm” (lấy từ E-step). Luân phiên 2 bước này sẽ làm tăng giá trị log-likelihood của hàm xác suất cho tới khi giá trị này tập kết tới cực đại. Nói thêm, rưa rứa với K-Means, thuật toán EM chỉ cho ta giá trị cực đại địa phương, nên chi ta có thể sẽ cần phải thực hiện thuật toán nhiều lần để tìm được mô hình tốt hơn nữa. Nếu ta muốn đưa ra quyết định 1 điểm bất kỳ thuộc cụm nào, đơn giản chỉ cần chọn cụm cho ta giá trị xác suất cao nhất ứng với điểm đó. Và ta cũng có thể hoàn toàn tái tạo lại được 1 mẫu rưa rứa như dữ liệu ban đầu từ mô hình dựa vào dãy các xác suất thu được.

Thứ Hai, 19 tháng 3, 2018

Broadcast Receiver trong Android

 

 

ảnh minh hoa -học lập trình android ở đâu

 


Broadcast Receiver phản hồi các thông báo phát ra từ các áp dụng khác hoặc từ chính hệ thống. Những thông tin này đôi khi được gọi là các event hoặc intent. Ví dụ, các áp dụng cũng có thể khởi tạo các tín hiệu broadcast để thông báo cho vận dụng khác biết rằng một số dữ liệu đã được về tới thiết vị và là có sẵn cho chúng để dùng, nên chi Broadcast Receiver thông dịch thông tin đó và khởi tạo hành động hiệp.

Sau đây là hai bước quan yếu để làm Broadcast Receiver làm việc cho các Intent: −


Tạo Broadcast Receiver.


Đăng ký Broadcast Receiver.

Có thể có một bước bổ sung nếu bạn đang triển khai các Custom Intent của bạn, thì khi đó bạn sẽ phải tạo và phát các Intent đó.
Tạo Broadcast Receiver trong Android

Một Broadcast Receiver được khai triển như là một lớp con của lớp BroadcastReceivervà ghi đè phương thức onReceive(), nơi mà mỗi thông báo được nhận như là một tham số của đối tượng Intent.
 

public class MyReceiver extends BroadcastReceiver  @Override public void onReceive(Context context, Intent intent)  Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show(); 


Đăng ký Broadcast Receiver trong Android

Một ứng dụng nghe các Intent được phát ra cụ thể bằng cách đăng ký một Broadcast Receiver trong AndroidManifest.xml file. giả tỉ chúng ta đang đăng ký MyReceiver cho system event (sự kiện được tạo từ hệ thống) đã được tạo là ACTION_BOOT_COMPLETED, mà được kích hoạt bởi hệ thống một khi hệ điều hành Android đã hoàn tất tiến trình boot.

 

BROADCAST-RECEIVER

 

 

 android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >  android:name="MyReceiver">   android:name="android.intent.action.BOOT_COMPLETED">   


bây chừ, bất cứ khi nào thiết bị Android của bạn được boot, thì thông tin sẽ được nhận bởi MyReceiver và trình khai triển logic bên trong phương thức onReceive() sẽ được thực thi.

Có một số system event được định nghĩa là là các trường final static trong lớp Intent. Bảng dưới kê một số system event quan trọng: 

Eventmô tả

android.intent.action.BATTERY_CHANGEDthông tin này chứa trạng thái nạp, mức độ, và thông báo khác về pin

android.intent.action.BATTERY_LOWChỉ thể low battery trên thiết bị

android.intent.action.BATTERY_OKAYChỉ rằng pin bây chừ là tốt sau khi low battery

android.intent.action.BOOT_COMPLETEDĐây là tín hiệu broadcast thông báo sau khi hệ thống đã chấm dứt boot

android.intent.action.BUG_REPORTChỉ activity để ít một bug

android.intent.action.CALLthông tin một lời gọi tới ai đó được xác định bởi dữ liệu

android.intent.action.CALL_BUTTONNgười dùng nhấn nút call để tới Dialer (trình gọi điện) hoặc giao diện UI ăn nhập khác để tạo một cuộc gọi

android.intent.action.DATE_CHANGEDDate đã được thay đổi

android.intent.action.REBOOTReboot thiết bị



Tín hiệu Custom Intent

Nếu bạn muốn chính ứng dụng của bạn nên tạo và gửi các Custom Intent, thì khi đó bạn sẽ phải tạo và gửi các Intent đó bằng việc sử dụng phương thức sendBroadcast() bên trong lớp Activity của bạn. Nếu bạn dùng phương thức sendStickyBroadcast(Intent) thì Intent là sticky, tức là Intent bạn đang gửi vẫn ở đâu đó sau khi tín hiệu kết thúc.

 

public void broadcastIntent(View view) Intent intent = new Intent(); intent.setAction("com.tutorialspoint.CUSTOM_INTENT"); sendBroadcast(intent);

Ở đây com.tutorialspoint.CUSTOM_INTENT cũng có thể được đăng ký theo cách na ná như chúng ta đã đăng ký intent được tạo ra từ hệ thống (system intent).

 android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >  android:name="MyReceiver">   android:name="com.tutorialspoint.CUSTOM_INTENT">   


tỉ dụ

Ví dụ này sẽ giải thích cách tạo BroadcastReceiver để chặn Custom Intent. Khi bạn đã quen với Custom Intent, bạn có thể lập trình ứng dụng để chặn các system intent. Bạn theo các bước sau để sửa đổi áp dụng Android đã tạo trong chương thí dụ Hello World. − 

Bướcdiễn tả

1Bạn sẽ dùng Android Studio để tạo một ứng dụng Android và đặt tên nó làMy Application dưới một package là com.example.My Application như đã giải thích trong chương thí dụ Hello World

2Sửa đổi phương thức MainActivity.java để thêm phương thức broadcastIntent()

3Tạo một MyReceiver.java dưới một package com.example.My Application để định nghĩa một BroadcastReceiver

4Một áp dụng có thể xử lý một hoặc nhiều Custom Intent và System Intent mà không có bất cứ hạn chế nào. Mỗi Intent bạn muốn chặn phải được đăng ký trong AndroidManifest.xml file sử dụng thẻ

5Sửa đổi nội dung mặc định của res/layout/activity_main.xml file để bao một button để thông tin Intent

6Không cần sửa đổi string.xml file, Android Studio sẽ để ý điều đó

7Chạy áp dụng để chạy Android Emulator và kiểm tra kết quả các đổi thay đã thực hành trong áp dụng


Sau đây là nội dung của activity file đã được sửa đổi src/com.example.My Application/MainActivity.java. File này có thể bao các phương thức nền tảng. Chúng ta đã thêm phương thức broadcastIntent() để phát một Custom Intent.

package com.example.My Application;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.content.Intent;import android.view.View;public class MainActivity extends Activity  @Override public void onCreate(Bundle savedInstanceState)  super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);  @Override public boolean onCreateOptionsMenu(Menu menu)  getMenuInflater().inflate(R.menu.activity_main, menu); return true;  // broadcast a custom intent.  public void broadcastIntent(View view) Intent intent = new Intent(); intent.setAction("com.tutorialspoint.CUSTOM_INTENT"); sendBroadcast(intent); 

Còn đây là nội dung của src/com.example.My Application/MyReceiver.java:

package com.example.My Application;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;public class MyReceiver extends BroadcastReceiver  @Override public void onReceive(Context context, Intent intent)  Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show(); 

Sau đây là nội dung đã sửa đổi của AndroidManifest.xml file. Ở đây, chúng ta đã thêm thẻ để bảo vệ service:

 xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.My Application" android:versionCode="1" android:versionName="1.0" >  android:minSdkVersion="8" android:targetSdkVersion="22" />  android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >  android:name=".MainActivity" android:label="@string/title_activity_main" >   android:name="android.intent.action.MAIN" />  android:name="android.intent.category.LAUNCHER"/>    android:name="MyReceiver">   android:name="com.tutorialspoint.CUSTOM_INTENT">    

Nội dung của res/layout/activity_main.xml để bao một button để phát Custom Intent. −

 xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">  android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Example of Broadcast" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:textSize="30dp" />  android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tutorials point " android:textColor="#ff87ff09" android:textSize="30dp" android:layout_above="@+id/imageButton" android:layout_centerHorizontal="true" android:layout_marginBottom="40dp" />  android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageButton" android:src="@drawable/abc" android:layout_centerVertical="true" android:layout_centerHorizontal="true" />  android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button2" android:text="Broadcast Intent" android:onClick="broadcastIntent" android:layout_below="@+id/imageButton" android:layout_centerHorizontal="true" />

Và nội dung của res/values/strings.xml để định nghĩa hai hằng mới: −

  name="menu_settings">Settings  name="title_activity_main">My Application

 


Chạy áp dụng Hello World! vừa sửa đổi ở trên. giả tỉ bạn đã tạo AVD trong khi cài đặt. Để chạy áp dụng từ Android Studio, mở activity file và nhấn tượng trưng Run từ thanh dụng cụ. −
 

 


Bây giờ, để phát Custom Intent, bạn nhấn vào nút Broadcast Intent nó sẽ phát"com.tutorialspoint.CUSTOM_INTENT" mà sẽ bị chặn bởi BroadcastReceiver đã đăng ký là MyReceiver và màn hình mô phỏng sẽ như sau: −
 


Bạn có thể triển khai BroadcastReceiver khác để chặn các System intent như Bootup, date changed, low battery, …

Thứ Sáu, 16 tháng 3, 2018

Hơn 200 trang web WrokPress bị nhiễm KeyBlogger


Các tập lệnh độc hại ghi lại mật khẩu cũng như thông báo đăng nhập của quản trị viên cũng như User 

Cuối tuần trước các chuyên gia bảo mật đã cảnh báo hơn 2.000 trang web chạy hệ thống quản lý nội dung mã nguồn mở WordPress đã bị nhiễm phần mềm độc hại. Phần mềm độc hại yêu cầu người dùng đăng nhập và ghi nhận thảy những thông báo đăng nhập của người dùng 

Keylogger – trình theo dõi thao tác bàn phím, là một phần mã độc nhằm lợi dụng các máy tính bị nhiễm mã độc để đào tiền ảo. Theo dữ liệu được ban bố bởi dịch vụ lùng trang web PublicWWW cho thấy, cho tới chiều thứ Hai tuần này, có 2,092 trang web đang chạy chương trình mã độc này. 

Công ty bảo mật Website Sucuri nói đây là mã độc đã được tìm thấy trên 5.500 trang web WordPress trong tháng 12. Những mã độc này đã được làm sạch đã được gỡ xuống. Các ,mã độc mới được host trên ba trang web mới là msdns[.]online, cdns[.]ws, và cdjs[.]online. Không có trang nào lưu trữ mã này có liên quan đến Cloudflare hoặc bất kỳ công ty hợp pháp nào khác. 

Nghiên cứu của Sucuri Denis Sinegubko được đăng trên blog : “Thật không may cho những người dùng và chủ sở hữu trang web bị nhiễm bệnh, keylogger , phương thức tấn công không có gì mới là, kịch bản chung là dữ liệu được nhập vào mỗi mẫu trang web (bao gồm cả hình thức đăng nhập) và được gửi cho các hacker phê duyệt giao thức WebSocket.” 

Cuộc tiến công lần này hoạt động bằng cách thêm vào các trang web WordPress một đoạn mã. Các đoạn mã được thêm vào ghi nhận tới thời điểm tại bao gồm: 
 

  • hxxps://cdjs[.]online/lib.js
  • hxxps://cdjs[.]online/lib.js?ver=…
  • hxxps://cdns[.]ws/lib/googleanalytics.js?ver=…
  • hxxps://msdns[.]online/lib/mnngldr.js?ver=…
  • hxxps://msdns[.]online/lib/klldr.js

Bên cạnh việc ghi lại các thao tác gõ phím vào bất kỳ trường đầu vào nào, các mã lệnh tải mã khác khiến cho các khách truy cập trang web chạy JavaScript từ Coinhive dùng máy tính của khách truy cập để vỡ hoang Monero cryptoconal mà không cần cảnh báo. 

Bài đăng của Sucuri không nói rõ ràng các trang web đang bị nhiễm bệnh như thế nào. Theo mọi cách, kẻ tấn công đang khai hoang những điểm yếu an ninh do việc dùng phần mềm lỗi thời. 

Sinegubko đã viết: “Mặc dù mức độ hiểm của các cuộc tiến công lần này vẫn chưa đáng báo động bàng cuộc tiến công bằng Cloudflare hồi tháng 12/2017, tuy nhiên điều này báo động về tỷ lệ tái kích hoạt mà, khi mà có nhiều trang web không thể nào bảo vệ chính họ sau vụ lây ban đầu. “Có thể một số trong các trang web này thậm chí không nhận thấy web của họ bị nhiễm độc.” 

Những người muốn quét dọn các trang web bị nhiễm độc thì có thể làm theo các bước sau . Điều quan trọng là các quản trị trang web cần làm lúc này là nên thay đổi thảy mật khẩu trang web vì các mã độc cho phép kẻ tiến công truy cập vào ắt các mật khẩu cũ.

Stack Overflow đã phát hành nghiên cứu hàng năm về ngành công nghiệp lập trình.

Công ty cho biết ấn bản 2018 của nó đại diện cho nghiên cứu 'lớn nhất từng có' về thái độ, lương và nhân khẩu học của nhà phát triển...