TRUNGTQ

Think Big, Act Small, Fail Fast and Learn Rapidly

NAVIGATION - SEARCH

Khóa học Scrum Foundation tại Bình Anh

Ngày 15/10/2016, Học viện Agile đã triển khai đào tạo căn bản về Scrum cho Công ty Điện tử Bình Anh. Khóa học nhằm cung cấp cho người học nắm vững những kiến thức, công cụ cơ bản để áp dụng Scrum trong công việc.

Tham gia khóa học gồm có các trưởng phòng dự án, trưởng phòng ban, lập trình viên, kiểm thử viên của Công ty.

scrum-foundation-binh-anh-1

Khóa học được thiết kế nhằm hướng đến câu chuyện, trải nghiệm và tìm cách tháo gỡ các vấn đề thực tế tại Bình Anh. Do đó, kiến thức thay vì được giảng dạy riêng biệt thì được truyển tải thông qua các bài tập, hoạt động thảo luận hoặc cách giải quyết vấn đề cụ thể tại Bình Anh.

scrum-foundation-binh-anh-2

Người học đánh giá cao thiết kế hoạt động của khóa học. Nhờ những trải nghiệm “Scrum thực” tại khóa học, người học biết cách dùng nhiều kỹ thuật Scrum mà thường ngày vẫn phải “loay hoay mãi”.

scrum-foundation-binh-anh-3

Sau 8 năm phát triển, Bình Anh đã trở thành một trong những nhà sản xuất hàng đầu trong lĩnh vực thiết bị Giám sát Hành trình và khẳng định được thương hiệu trên toàn quốc. Tại Bình Anh, đã có một số nhóm, cá nhân tìm hiểu và bắt đầu áp dụng Agile\Scrum vào công việc phát triển phần mềm. Lần này Bình Anh muốn tổ chức khóa đào tạo để có thể hiểu kỹ hơn, áp dụng đúng “chất” Scrum hơn.

LINK: http://hocvienagile.com/blog/khoa-hoc-scrum-foundation-tai-binh-anh/

20 .NET Developers to Follow Online

Want to know what the best .NET developers in the world are up to? Want to get their take on how to write better code and develop better products? You’re in luck, because many of them have a significant presence online.

To get started, in alphabetical order, here are 20 of our favorite .NET developers to follow:

1. Scott Allen. Founder of Ode to Code and CTO of Medisolv. Teacher, writer, speaker, podcaster.
Blog
Twitter
GitHub

2. Iris Classon. Technical evangelist at Telerik, Microsoft MVP, member of the Microsoft Extended Experts Team (MEET), writer, speaker.
Blog
Twitter
YouTube
GitHub
Stack Overflow

3. David Ebbo. From his Twitter profile: “Microsoft dev lead working on Windows Azure Web Sites, with a focus on Project Kudu(the OSS git engine).”
Blog
Twitter
GitHub
Stack Overflow

4. Damian Edwards. ASP.NET program manager at Microsoft, creator of SignalR, and Web Forms MVP.
Blog
Twitter
GitHub
Stack Overflow

5. David Fowler. ASP.NET software developer at Microsoft. Creator and lead developer on SignalR.
Blog
Twitter
GitHub

6. Jon Galloway. Senior technical evangelist at Microsoft, specializing in ASP.NET MVC. Co-author of The ASP.NET Anthology. Part of the Herding Code podcast.
Blog
Twitter
GitHub
Stack Overflow

7. Damien Guard. CTO at Attack Pattern, formerly at Netflix on Windows 8/Windows Phone/Silverlight, Microsoft on Xbox.com, LINQ to SQL, Entity Framework & CodeFirst.
Blog
Twitter
GitHub

8. Scott Guthrie. Cloud and enterprise executive vice president at Microsoft. Runs or has run development teams building ASP.NET, Silverlight, WPF, CLR, IIS, Media Server, and the Visual Studio Tools for web development and Windows Phone 7. With Mark Anders, creator of ASP.NET. (And FutureStack 13 speaker!)
Blog
Twitter
GitHub

9. Phil Haack. VP of product development at GitHub. Previously senior program manager on the ASP.NET team at Microsoft.
Blog
Twitter
GitHub

10. Corey Haines. “The software journeyman.” Speaker, teacher, cofounder of Code Retreat, and developer on MercuryApp and Slottd.com.
Blog
Twitter
GitHub
Stack Overflow

11. Scott Hanselman. Programmer, writer, teacher, speaker. Co-author of Professional ASP.NET 2.0. Host of the Hanselminutes podcast.
Blog
Twitter
YouTube
GitHub
Stack Overflow

12. Anders Hejisberg. Microsoft Technical Fellow. Lead architect of C# and core developer on TypeScript. Original author of Turbo Pascal, chief architect of Delphi. Co-author of The C# Programming Language.
Twitter

13. Scott Koon. Senior application developer with Russell Investment Group. Co-host of Herding Code podcast. Contributor to Witty, a WPF .NET Twitter client.
Blog
Twitter
GitHub

14. Eric Lawrence. Developer at Telerik. Created Fiddlerand SlickRun. Formerly a program manager on the Internet Explorer development team at Microsoft.
Blog
Twitter
GitHub
Stack Overflow

15. Drew Marsh. Chief software architect at Mimeo.com.
Blog
Twitter
GitHub
Stack Overflow

16. Chad Myers. Director of development at Dovetail Software. Speaker at the Austin .NET User’s Group and the ADNUG Code Camp.
Blog
Twitter
GitHub

17. John Papa. Silverlight expert. Former technical evangelist at Microsoft on the Silverlight and Windows 8 teams. Speaker, writer.
Blog
Twitter
GitHub
Stack Overflow

18. Jon Skeet. Software engineer at Google in London. Usually a Microsoft C# MVP. Author of C# in Depth.
Blog
Twitter
GitHub
Stack Overflow

19. Mike Stall. Principal software developer at Microsoft.
Blog
GitHub

20. Rick Strahl. President of West Wind Technologies. Writer, speaker, co-publisher of CODE Magazine, C# MVP.
Blog
Twitter
GitHub
Stack Overflow

LINK: https://blog.newrelic.com/2014/03/12/20-net-developers-follow-online/

 

Improving Azure SQL Database Performance using In-Memory Technologies

In late 2016, Microsoft announced the general availability (GA) of Azure SQL Database In-Memory technologies. In-Memory processing is only available in Azure Premium database tiers and provides performance improvements for On-line Analytical Processing (OLTP), Clustered Columnstore Indexes and Non-clustered Columnstore Indexes for Hybrid Transactional and Analytical Processing (HTAP) scenarios.

Azure SQL Database shares the same In-Memory technologies that exist in SQL Server. Microsoft first introduced In-Memory capabilities for both Columnstore Indexes and OLTP in SQL Server 2012 and SQL Server 2014 respectively.

Microsoft claims up to 30% improved performance for OLTP and up to 100x faster Analytics workloads and positions In-Memory use cases for organizations looking to:

Provide headroom to scale without changing their service tier. [This opportunity exists] because of the more efficient query and transaction processing, In-Memory technologies also help you to reduce cost. You typically don't need to upgrade the pricing tier of the database to achieve performance gains. In some cases, you might even be able reduce the pricing tier, while still seeing performance improvements with In-Memory technologies.

Microsoft has identified the following benefits of using In-Memory Technologies in Azure SQL Database:

  • In-Memory OLTP increases throughput and reduces latency for transaction processing.
  • Clustered columnstore indexes reduce your storage footprint (up to 10 times) and improve performance for reporting and analytics queries. You can use it with fact tables in your data marts to fit more data in your database and improve performance. Also, you can use it with historical data in your operational database to archive and be able to query up to 10 times more data.
  • Nonclustered columnstore indexes for HTAP help you gain real-time insights into your business through querying the operational database directly, without the need to run an expensive extract, transform, and load (ETL) process and wait for the data warehouse to be populated. Nonclustered columnstore indexes allow very fast execution of analytics queries on the OLTP database, while reducing the impact on the operational workload.
  • You can also combine In-Memory OLTP and columnstore indexes. You can have a memory-optimized table with a columnstore index. This allows you to both perform very fast transaction processing and run analytics queries very quickly on the same data.

In a recent Data Exposed episode, Scott Klein, senior technical evangelist, and Jos de Bruijn, senior program manager, from Microsoft provided a demonstration of Azure SQL Database In-Memory processing. The application they built, simulated Internet of Things (IoT) device telemetry ingestion. In this demo, they performed a simulation of 1 Million meters publishing device reads. In the initial demo, the Azure SQL Database did not have In-Memory objects enabled. The result was both CPU and Log IO were under considerable pressure with CPU % hovering around 89% and Log IO reaching 86%. Once In-Memory optimized objects were introduced, CPU % reduced to 10.47% and Log IO reduced down to 34%.

Image source: (screenshot) https://channel9.msdn.com/Shows/Data-Exposed/In-Memory-OTLP-in-Azure-SQL-DB

Developers may be tempted to increase their Azure SQL Database Throughput Units (DTU) when experiencing performance pressures. The answer, to performance challenges, may now lie in optimization instead of scaling up. Mark Freydl, solution architect at Quorum Business Solutions, explains:

Scalable performance is critical with our IoT platform for oil and gas that must run 24/7/365. The addition of In-Memory OLTP tables and native-compiled stored procedures on Azure SQL Database for a few key operations immediately reduced our overall DTU consumption by seventy percent.

In addition to the IoT telemetry example, Microsoft has identified additional use cases for In-Memory processing, including financial trading, gaming, ASP.Net session management, Tempdb replacements and avoiding inefficient Extract Transform Load (ETL) operations.

Image source: (screenshot) https://channel9.msdn.com/Shows/Data-Exposed/In-Memory-OTLP-in-Azure-SQL-DB

LINK: https://www.infoq.com/news/2017/01/Azure-SQL-DB-InMemory

Microsoft Open Sources Visual Studio Test

Microsoft has open sourced their Visual Studio Test Platform (VS Test) used to run tests in many languages, collect diagnostic data and report the results.

VS Test is integrated with Visual Studio and part of the .NET Core Tools. VS Test can be used to discover tests and run them across multiple cores in parallel. It is an extendable platform, working with tests written in any language (C#, C++, JavaScript, Python, etc.) and various testing frameworks, such as NUnit, xUnit, Google Tests, Jasmine, Karma, etc. The Visual Studio Marketplace contains 25 free adapters for various testing frameworks, and others can be created if desired. One supported framework is MS Test V2 through its adapter, which Microsoft will open source later this year when it is ready for the public, according to Brian Harry, VP for Cloud Developer Services. 

VS Test includes four main components:

  1. Test Runner – a command line process receiving a test container with settings detailing the tests to be executed (the language runtime, hardware architecture, test framework used, etc.).  The runner spawns other processes used by the platform.
  2. Test Execution Host – a process that loads the test container and executes tests.
  3. Data Collector Host – another process containing test execution data listeners.
  4. IDE/Editor – the tool used by the developer to trigger test runs.

The components and the relationship between them is shown in the following diagram:

vstest-arch-1

Microsoft has currently open sourced the runner and the execution host process. Over the following months they will release other parts of the platform when the code is ready for the public. The roadmap includes open sourcing the data collection infrastructure, the protocol used to communicate with the IDE, adding support for UWP applications, and the ability to configure the CLI integration with various testing frameworks.

LINK: https://www.infoq.com/news/2017/01/visual-studio-test

So sánh tốc độ List collection và HashSet collection trong C#

Mở đầu

Lâu nay khi lập trình chúng ta chủ yếu sử dụng kiểu dữ liệu List để thao tác với các collection, mặc dù đây không phải là kiểu collection duy nhất trong .NET nhưng các lập trình viên đã quá quen thuộc với việc sử dụng kiểu List nên thói quen này không phải dễ thay đổi.

Trong bài viết này chúng ta sẽ cùng so sánh tốc độ của kiểu ListHashSet (một kiểu collection xuất hiện bắt đầu từ .NET 3.5) để biết được khi nào thì nên sử dụng List và khi nào thì nên dùng kiểu HashSet.

ListToSet

Kiểu List<T>

Kiểu List<T> chứa một danh sách item, truy cập qua chỉ số. Không giống như kiểu mảng là một kiểu cố định kích thước, list tự động tăng kích thước khi cần. Đây chính là lý do tại sao List đôi khi còn được gọi là kiểu mảng động.

Cấu trúc bên trong của List thực chất là một mảng, nếu mảng này hết chỗ nó sẽ tạo ra một mảng mới lớn hơn và copy toàn bộ item từ mảng cũ sang mảng mới. Ngày nay thì chúng ta thấy hầu hết lập trình viên đều dùng kiểu List thay vì kiểu mảng. Tuy nhiên trong một số trường hợp nếu item là cố định thì bạn nên dùng kiểu mảng để có performance tốt hơn.

Một số phép toán trên kiểu List

 

Thêm/Xóa phần tử ở đầu hoặc giữa List

Nếu bạn cần thêm/xóa một phần tử ở đầu hoặc giữa List thì nó sẽ cần dịch chuyển một hoặc nhiều item. Trường hợp xấu nhất, nếu bạn thêm/xóa một phần tử ở đầu List nó sẽ phải dịch tất cả item còn lại trong List. Nếu List càng lớn thì sẽ càng mất thời gian và resource để thực hiện.

Thêm/Xóa phần tử ở cuối List

Thêm/Xóa một phần tử ở cuối List ngược lại rất nhanh và không phụ thuộc vào kích thước của List vì không item nào cần phải dịch chuyển.

Tìm kiếm một phần tử

Khi tìm kiếm một phần tử bằng một số hàm như IndexOf, Contains, Findthì kiểuList sẽ thực hiện duyệt qua tất cả các item để tìm ra phần tử đó. Trong trường hợp xấu nhất, nếu phần tử nằm ở cuối List thì tất cả các item cần được duyệt qua.

Truy cập một phần tử bởi chỉ số

Là phép toán thực hiện rất nhanh vì bản chất bên trong List là một mảng. Tốc độ truy cập không bị ảnh hưởng bởi độ lớn của List.

Kiểu HashSet<T>

HashSet là kiểu xuất hiện từ .NET 3.5, nó chứa các item duy nhất, nghĩa là nó không thể chứa các item trùng lặp và thứ tự của item cũng không quan trọng. VD: {a,b,c} tương đương {c,b,a}

Sử dụng HashSet khi bạn cần tìm kiếm nhanh trên một tập các item không lặp. VD trong bài toán thực tế mình đang phải làm là kiểm tra một danh sách Order có nằm trong một danh sách Order khác không?

Kiểu HashSet dựa trên hàm hash để tính toán ra chỉ số của item vì vậy phép tìm kiếm có tốc độ rất nhanh. Dưới đây là một số phép toán trên kiểu HashSet

 

So sánh tốc độ List<T> và HashSet<T>

Mặc dù trong các tài liệu đều chỉ ra kiểu HashSet nhanh hơn List nhưng thực tế có phải luôn luôn như vậy? Chúng ta sẽ cùng kiểm nghiệm qua một ví dụ benchmark đơn giản: Kiểm tra một danh sách có nằm trong một danh sách khác hay không:

Kết quả thực hiện cho thấy sự khác nhau rõ rệt về performance:

  • 50 item List.Contains mất 0.000018s, HashSet.Contains mất 0.000023s
  • 50000 item List.Contains mất 9.38s, HashSet.Contains mất 0.002s

BenchmarkResult

Từ kết quả trên có thể thấy rằng không phải lúc nào performance của HashSet cũng nhanh hơn List. Với số lượng item nhỏ (<50 item) thì tốc độ của List còn nhanh hơn so với HashSet nhưng khi số lượng item lớn thì lúc đó HashSet mới phát huy tác dụng, tốc độ của HashSet rất nhanh và không phụ thuộc vào số lượng item.

Kết luận

Kiểu List tương đối nhanh khi bạn truy cập item bằng index nhưng khi tìm kiếm một item trong List lớn (50 item trở lên) thì nó sẽ chậm dần. Ngược lại kiểu HashSet lại rất nhanh khi tìm kiếm trên một tập item lớn. Vì vậy mà tùy từng trường hợp cụ thể bạn cần lựa chọn kiểu collection cho phù hợp với bài toán của mình.

Nếu bạn có bất kì câu hỏi hay kinh nghiệm nào liên quan đến bài viết này xin hãy để lại comment bên dưới và đừng quên chia sẻ cho bạn bè nếu thấy hữu ích.

Happy coding. Stay tuned.

P/s: Source code example trong bài các bạn có thể download tại đây: ListAndHashSetBenchmark

LINK: https://tungnt.net/so-sanh-toc-do-list-collection-va-hashset-collection-trong-c/