JavaRush /Blog Java /Random-VI /Làm thế nào một bài kiểm tra phỏng vấn biến thành một thư...
Roman Beekeeper
Mức độ

Làm thế nào một bài kiểm tra phỏng vấn biến thành một thư viện nguồn mở

Xuất bản trong nhóm
Xin chào mọi người, cộng đồng JavaRush! Đôi nét về bản thân: Tôi đã làm Kỹ sư phần mềm Java từ mùa xuân năm 2016. Tôi thích đến đây và giải quyết những vấn đề mà tôi chưa giải quyết được trong quá trình học. Hôm nay tôi sẽ kể cho các bạn nghe về thư viện - So sánh hình ảnh . Đây là thư viện mã nguồn mở được cung cấp công khai trên GitHub . Làm thế nào một nhiệm vụ kiểm tra phỏng vấn biến thành một thư viện nguồn mở - 1Mục đích của bài viết này là truyền tải rằng việc tạo ra một sản phẩm nguồn mở không chỉ lãng phí thời gian, không! Đây là trải nghiệm phong phú được rút ra từ nhiều phía khác nhau, khi bạn có quyền kiểm soát toàn bộ quá trình phát triển, khi bạn cần đi sâu vào từng chi tiết. Nguồn mở là thế giới xung quanh bạn. Tôi không đùa, trong suốt thời gian tồn tại của thư viện này, tôi đã giao tiếp với mọi người từ các quốc gia khác nhau, chẳng hạn như Hoa Kỳ, Ấn Độ, Trung Quốc, Ai Cập, Nga, Đức, Ukraine, Thụy Điển, New Zealand, Na Uy. Nghĩa là, đây là kinh nghiệm thực tế trong việc cùng phát triển, tìm kiếm sự thỏa hiệp, kiểm tra mã, v.v. Đó là phần giới thiệu, giờ hãy bắt đầu theo thứ tự:

Bài kiểm tra. Đầu tháng 8 năm 2017

Mọi chuyện bắt đầu từ việc tôi có một cuộc phỏng vấn với một trong những công ty, nơi bước đầu tiên là viết một bài kiểm tra. Nhiệm vụ là viết một đoạn mã so sánh hai bức ảnh có cùng kích thước, tìm ra điểm khác biệt giữa chúng, nhóm chúng lại và vẽ một hình chữ nhật xung quanh chúng. Có hình ảnh đầu tiên:
Làm thế nào một nhiệm vụ kiểm tra phỏng vấn biến thành một thư viện nguồn mở - 2
Có một hình ảnh thứ hai:
Làm thế nào một nhiệm vụ kiểm tra phỏng vấn biến thành thư viện nguồn mở - 3
Cần phải tìm ra những khác biệt và khoanh tròn chúng như hình dưới đây:
Làm thế nào một nhiệm vụ kiểm tra phỏng vấn biến thành thư viện nguồn mở - 4
Như bạn có thể thấy, có sự khác biệt trong trường Tên người dùng , được khoanh tròn bằng hình tam giác màu đỏ. Mô tả chi tiết hơn về nhiệm vụ . Tôi quyết định rằng tôi muốn làm điều đó không chỉ chính xác theo quan điểm chức năng mà còn phải đẹp mắt để không gây lúng túng. Để làm được điều này, tôi quyết định sẽ xuất bản nó dưới dạng một dự án trên GitHub . Tôi đã muốn nghiên cứu GitHub từ lâu và tích lũy kinh nghiệm làm việc với nó. Sau khi xem nhanh, tôi thấy rằng sẽ rất tốt nếu thêm các dịch vụ của bên thứ ba để phân tích chất lượng mã, tạo phạm vi bao phủ mã bằng các thử nghiệm, v.v. Đã thêm các công cụ sau:
  • Codacy - chất lượng mã. Nó thực sự đáng chú ý.

  • Travis CI là một công cụ CI (tích hợp liên tục) giúp xây dựng dự án, chạy thử nghiệm và cho biết liệu dự án có được xây dựng thành công hay không. Ví dụ: nếu một trong các thử nghiệm không vượt qua do những thay đổi mới, thì nó sẽ nói rằng quá trình xây dựng dự án không thành công và sẽ tô màu đỏ.

  • Quần yếm là một công cụ hiển thị bao nhiêu phần trăm mã của bạn được kiểm tra.

  • BetterCode Hub là một công cụ khác để phân tích chất lượng mã. Một điều rất hữu ích không chỉ cho bạn biết điều gì là xấu mà còn mô tả lý do tại sao và cung cấp liên kết đến một cuốn sách nơi bạn có thể thu thập kiến ​​​​thức về nó.

Mỗi dịch vụ này đều có huy hiệu riêng kèm theo kết quả dữ liệu, chẳng hạn như dự án bảo hiểm mã. Và huy hiệu này có thể được thêm vào phần mô tả chính của dự án - tệp README. Nhiệm vụ đã sẵn sàng - tôi đã gửi nó để xem xét. Sau khi xem xét, ngay lập tức, từ trí nhớ mới, tôi đã tạo Vấn đề Github cho mỗi nhận xét , điều này sau đó sẽ giúp tôi cải thiện dự án này. Không có nhiệm vụ cải tiến nào từ nhà tuyển dụng nên tôi đã quên mất dự án một thời gian...

Đường dẫn thư viện. tháng 7 năm 2018

Logo

Có một thời điểm, tôi phát hiện ra rằng mọi người thường ghé thăm dự án của tôi và điều này xảy ra hàng ngày. Tôi đã rất ngạc nhiên về điều này, và càng ngạc nhiên hơn nữa khi khoảng một năm sau, một ISSUE đã được tạo ra, trong đó viết rằng một nhà thiết kế đồ họa nào đó đã đề nghị tôi tạo một logo cho dự án của mình. Họ nói rằng anh ấy thích làm điều này cho các sản phẩm Opensource và sẽ làm điều đó hoàn toàn miễn phí. Chúng tôi bắt đầu hợp tác. Một số phương án đã được đề xuất, nhưng cuối cùng chúng tôi đã giải quyết được vấn đề này:
Làm thế nào một nhiệm vụ kiểm tra phỏng vấn biến thành một thư viện nguồn mở - 5
Khi đó tôi vẫn còn trẻ và chưa quen với cộng đồng mã nguồn mở, và thực tế về một lời đề nghị như vậy đối với tôi thật là hoang đường và tôi đã hỏi, tại sao anh ấy lại làm điều này? Anh ấy trả lời: "Lolz ồ, chỉ vì tôi thích đóng góp cho các dự án nguồn mở. Kiểu như mục tiêu cuộc sống..." ( vấn đề chính là ở đây ). Đó là lần đầu tiên tôi cảm thấy thật tuyệt vời khi những người khác nhau tìm thấy bạn thông qua các dự án nguồn mở và đưa ra những điều thú vị như vậy!

Khiếm khuyết bên đầu tiên

Tôi nhận thấy rằng một nhà phát triển nào đó từ Trung Quốc đã tạo ra một vấn đề cho tôi , trong đó anh ấy mô tả rằng anh ấy đã tìm thấy một khiếm khuyết trong công việc của thư viện, rằng nếu bạn sử dụng hình ảnh lớn, bạn sẽ nhận được StackOverflowError . Người đàn ông quyết định lợi dụng và nhận ra sai lầm. Và tôi không chỉ tìm thấy nó. và cũng viết về cô ấy. Đây là một bước tiến mới trong sự phát triển của thư viện. Hơn nữa, tôi thực sự không có giải pháp. Tại một thời điểm nhất định, một trong những người thử nghiệm đến từ Nga đã đề xuất một giải pháp. Nhưng nó còn thô và không được làm đúng cách nên tôi không chấp nhận. Và khi đến lúc xuất bản thư viện ở Maven Central, cần phải giải quyết một số vấn đề với khiếm khuyết này; tôi không muốn xuất bản nó cùng với nó. Ngoài ra, còn một khuyết điểm nữa mà tôi chưa bao giờ sửa được và nó cũng mang lại rất nhiều bất tiện.

Cách sử dụng dòng lệnh. Mùa thu 2018

Giai đoạn phát triển tiếp theo là giao tiếp với một người Thụy Điển (Renato Athaydes), người muốn sử dụng thư viện thông qua dòng lệnh và vì điều này cần phải thực hiện một số thay đổi và bổ sung. Tôi lại một lần nữa ngạc nhiên và ngạc nhiên về điều này. Sau khi nhà thiết kế đồ họa viết thư cho tôi, sự ngạc nhiên của tôi có phần bớt đi nhưng vẫn rất cao. Ý nghĩ rằng ai đó thực sự cần mã của tôi khiến tôi cảm thấy vô cùng phấn khích. Anh ấy đã thực hiện những thay đổi cần thiết và chuẩn bị mã. Tôi đã tiến hành đánh giá mã, tức là tôi đã xem xét các thay đổi, có những nhận xét đã được thay đổi và những thay đổi đó đã có trong thư viện. Tôi đã chỉ định những thay đổi này là phiên bản v2.0. Bước tiếp theo là thêm thư viện vào Maven Central - một kho lưu trữ trung tâm, từ đó bạn có thể tải xuống cho bất kỳ dự án nào và sử dụng nó làm phần phụ thuộc. Lúc đó tôi chưa biết làm thế nào, thậm chí từ xa nên tôi nói mình bận và nhờ anh ấy thực hiện tất cả các bước cần thiết để setup dự án. Nhưng điều này hóa ra vẫn chưa đủ và điều thú vị nhất là thiết lập kết nối với Maven Central. Đây là một nỗi đau tột cùng mà lần đầu tiên tôi không thể làm được và phải đến ngày 15 tháng 4, tôi mới có thể xuất bản dự án trên Maven Central. Điều đó không hề dễ dàng, nhưng như những người khác thường nói, "tất cả những ai muốn xuất bản mã Java của mình đều phải trải qua điều này". Trước khi xuất bản thư viện, cuối cùng tôi đã tìm ra những gì và cách làm với những khiếm khuyết đã tồn tại từ lâu và phát hành phiên bản mới v2.0.2 , trong đó tôi cảm ơn tất cả những người đã giúp đỡ tôi, mô tả những gì và cách tôi đã làm .

Xuất bản lên Maven Central. Mùa xuân 2019

Để xuất bản thư viện một cách chính xác, bạn cần hiểu rõ về cách lập phiên bản và cách đặt phiên bản chính xác. Tôi sẽ bám sát kế hoạch này:
  • XX.YY.BBBB , trong đó XX là bản cập nhật phiên bản chính, kéo theo những thay đổi không tương thích với phiên bản trước đó (ví dụ: thay đổi về kết quả trả về trong các phương thức);
  • YY là một bản cập nhật nhỏ - một thay đổi hoặc mở rộng nội bộ không thay đổi BBBB là gì - đây là những lỗi đã được sửa.
  • Ví dụ: phiên bản 2.0.2 có nghĩa là phiên bản chính là 2, không có bản cập nhật nhỏ nào và có hai bản cập nhật cho các lỗi.
Tiếp theo, điều quan trọng là phải tìm ra cách đặt chính xác groupIdArtifactId . Chúng phải được chọn một lần và sử dụng thêm. Và chúng tạo thành gói lưu trữ mã. Đã: ua.comparison.image Bây giờ: com.github.romankh3.image.comparison Và điều này rõ ràng là tốt hơn, vì mọi người đều biết rằng đây là một dự án từ GitHub và có thể được tìm thấy từ một người có biệt danh romankh3. Khi tôi làm tất cả những điều này, tôi đã phát hành phiên bản mới v2.1.0 .

Giao tiếp với người Thụy Điển. tháng 5 năm 2019

Sau khi tôi xuất bản thư viện, một người Thụy Điển khác (Mika Kytöläinen) đã gửi email cho tôi và nhờ bạn của anh ấy thực hiện các thay đổi đối với thư viện của tôi. Anh ấy nói rằng anh ấy thực sự cần điều này và anh ấy sẽ rất vui nếu chúng tôi làm điều đó và thực hiện nhanh chóng. Tất nhiên, tôi không phản đối những thay đổi cần thiết. Anh ấy đề xuất thêm cấu hình độ dày đường kẻ để vẽ một hình chữ nhật. Giống như đối với những người có thị lực kém thì đây sẽ là một thay đổi hữu ích. Đã chuẩn bị mã . Sau khi bổ sung thêm một số thay đổi, tôi đã phát hành phiên bản v2.2.0

Giao tiếp với người Đức. tháng 5 năm 2019

Sau đó, một người Đức đã tạo ra một vấn đề trong đó anh ta nói rằng anh ta muốn sử dụng nó để thử nghiệm nhưng nó thiếu chức năng. Anh ấy đưa ra nhiều đề xuất rất thú vị, anh ấy gợi ý rằng thay vì chỉ trả về bức tranh thu được với kết quả là kết quả của so sánh, hãy trả về một tập hợp dữ liệu: những gì được so sánh, kết quả (nếu cần) và trạng thái trong đó sẽ là MATCH, MISMATCH, SIZE_MISMATCH . Thậm chí đã thực hiện những thay đổi. Nhưng họ hoàn toàn không tính đến đoạn mã trước đó và được thực hiện một cách vội vàng. Tôi từ chối và đề nghị thực hiện chúng khi tôi thấy phù hợp. Mặc dù vậy, anh ấy phản hồi nhiều hơn và tôi quyết định sẽ tự mình làm việc đó và phát hành phiên bản mới. Đồng thời, Mika Kytöläinen đề xuất một chức năng thú vị khác - thêm các khu vực không được đưa vào so sánh. Đây là một trường hợp có thật. Và tất cả điều này đã được phát hành trong v3.0.0

Sử dụng trong một dự án thực tế

Vào cuối tháng 5, một người thử nghiệm tự động hóa từ Kyiv đã viết thư cho tôi, người này bắt đầu quan tâm đến thư viện và muốn sử dụng nó trong một dự án thực sự mang lại tiền. Đó là một bước đột phá! Sử dụng nó ở đâu đó trong một dự án thú cưng là một chuyện, nhưng sử dụng nó trong một dự án thực tế lại là một vấn đề hoàn toàn khác. Chúng tôi đã thảo luận về những gì và làm thế nào nó hoạt động. Ứng dụng này rất thú vị: trong ứng dụng của họ, họ có các tờ séc được in và cần phải kiểm tra xem các tờ séc đó có được tạo theo một mẫu nhất định và nó không thay đổi hay không. Nhưng có một vấn đề là các phần như ngày và giờ luôn thay đổi và phải bỏ qua. Chúng tôi đã thêm chức năng để bỏ qua một số khu vực, nhưng hóa ra nó vẫn còn rất thô để sử dụng thực sự và chúng tôi vẫn làm việc hiệu quả cùng nhau trong vài tuần về vấn đề này. Kết quả là đã ra mắt phiên bản v3.1.1

Tìm một niche

Sau đó, tôi nhận ra rằng mục đích thực sự cho thư viện của tôi là sử dụng nó trong các cuộc thử nghiệm. Để làm được điều này, tôi quyết định tìm một số loại diễn đàn dành cho người thử nghiệm và viết thư cho họ về diễn đàn đó để nhận được một số phản hồi và tăng danh tiếng. Tôi tìm thấy một diễn đàn tiếng Nga và đăng một bài báo trên đó: Tổ chức thử nghiệm hình ảnh - so sánh hai hình ảnh tương tự nhau . Trong đó, tôi đã nhận được phản hồi thực sự về mã và chức năng, tôi đã áp dụng và phát hành phiên bản mới v3.2.0 và sau đó là v.3.3.0 .

Hiện nay

Thư viện hiện có 60 sao trên Github và có 33 nhánh. Tôi nghĩ điều này thật tuyệt vời vì tôi không quảng cáo nó theo bất kỳ cách nào ngoại trừ một bài viết trên diễn đàn dành cho máy tự động hóa. Cảm ơn mọi người đã đọc đến cuối. Nó thực sự hóa ra là một bài viết dài hơn tôi mong đợi. Một bài viết về cách xuất bản một thư viện lên Maven Central. Nếu bạn có bất cứ điều gì để thêm, viết! Nếu bạn có bất cứ điều gì muốn đề xuất để cải thiện thư viện, hãy viết! Tôi sẽ đọc mọi thứ và dành thời gian thích hợp cho nó. Bất cứ ai thích bài viết và thấy nó hữu ích - hãy đánh giá và viết bình luận. Ngoài ra, hãy đăng ký tài khoản github của tôi romankh3. Xem thêm các bài viết khác của tôi:
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION