Skip to content

release 0.1

Yifan Zhao edited this page Oct 15, 2020 · 70 revisions

Release 0.1

Due Date

Friday September 25th.

Overview

You are tasked with building a command-line tool for finding and reporting dead links (e.g., broken URLs) in a file. Users might use your tool to help locate broken URLs in an HTML page, for example. Your tool can be written in any programming language.

This first release is designed to expose you to the common workflows and tools involved in contributing to open source projects on GitHub. In order to give every student a similar learning experience, we will all be working on the same project.

This first release is also aimed at putting you in the role of "open source creator" and later "open source maintainer." You will use the code you write in this assignment in subsequent labs during the course to explore various aspects of open source work.

NOTE: in subsequent releases, you will have more freedom to work on different projects.

Learning Goals

In addition to the actual code you will write, the ultimate goal of this first release is to help you gain experience in many aspects of open source development, specifically:

  • gaining some experience in a programming language by building a real-world tool
  • working with the basics of git, including branches, commits, etc.
  • creating open source projects on GitHub
  • writing about your own work via your Blog

Requirements and Features: Implement All

You must complete all of the following requirements and features:

  • pick a name for your tool. Try not to pick a name that is already used by other projects.
  • create a GitHub Repo for your project, see https://docs.github.com/en/enterprise/2.15/user/articles/create-a-repo
  • choose an OSI Approved Open Source License for your project and include a LICENSE file in your rep, see https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/licensing-a-repository
  • create a README.md file, and keep it updated as you write your code, documenting how to use your tool, which features you include, etc.
  • choose a programming language. You can use a language you know and love, or something new that you've never used before and want to learn.
  • create a command-line tool in your chosen language. It must support all of the following:
    • running the tool with no arguments should print a standard help/usage message showing how to run the tool, which command line arguments can be passed, etc.
    • running the tool with a filename should cause the file to be processed. For example, tool_name index.html should check for broken links in the file named index.html in the current directory.
    • when processing a file, the tool should look for all URLs using the http:// and https:// schemes. Every http:// or https:// URL in the given file should be processed.
    • when processing a URL, your tool should attempt to do a network request of the given URL and check the resulting HTTP code. To begin with, an HTTP 200 result should be considered "good" and a 400 or 404 considered "bad." Any other result should be "unknown"
    • after a URL is processed, print it to out along with whether it was good, bad, or unknown. Each URL should get its own line.

Optional Features: Pick 2

In addition to the required features, you are asked to pick 2 of the following optional features to include in your submission:

  • colourize your output. Good URLs should be printed in green, bad URLs in red, and unknown URLs in gray ** running the tool with the v or version argument should print the name of the tool and its version
  • support both Windows and Unix style command line args (e.g., --version vs. /v)
  • allow passing multiple file paths to your tool vs. a single path
  • allow passing directory paths vs. file paths, and recursively process all children under that directory
  • allow passing glob patterns (e.g., *.txt) to find files to process
  • add support for non-text file formats, looking for URLs within binary data (e.g., UTF-8 strings embedded in binary)
  • add support for more HTTP result codes. For example, redirects with 301, 307, 308 (i.e., follow the redirect to the new location)
  • add support for timeouts, DNS resolution issues, or other server errors when accessing a bad URL. A bad domain, URL, or server shouldn't crash your tool.
  • add a command line flag to allow checking for archived versions of URLs using the WayBackMachine, see https://archive.org/help/wayback_api.php
  • add a command line flag to allow specifying a custom User Agent string when doing network requests.
  • add a command line flag to allow checking whether http:// URLs actually work using https://
  • add support for parallelization, using multiple CPU cores so your program can do more than one thing at a time
  • optimize your network code so that you only request headers vs. downloading full bodies (e.g., use HEAD)
  • come up with your own idea. If you have an idea not listed above, talk to your professor and see if it's OK to implement that (it probably is).

Getting Help

For this assignment, everyone must do their own work, but that doesn't mean you can't talk to your colleagues. At every stage of your work, make sure you ask for help, share ideas, and get feedback from others in the class. Please use Slack to help with communication.

Try using community-based, open, collaborative development practices. This means talking with others about your work, and talking to them about theirs, asking for and giving help, and focusing on people as well as code. It also means doing this in public (e.g., on Slack) instead of in private. The goal is to support each other and for us to start building a community.

Requirements

You will be graded on the following. Please make sure you have addressed everything that makes sense below:

  • GitHub Repo exists
  • GitHub Repo contains LICENSE file
  • GitHub Repo contains a README.md file with clear information on how to use the tool and all of its features
  • GitHub README.md is free of typos, spelling mistakes, formatting or other errors
  • GitHub Repo contains project's Source Code
  • Source Code implements all Mandatory Requirements, and each one is Complete and Working
  • Source Code implements 2 of the Optional Requirements, and both are Complete and Working
  • Source Code is well written (consistent formatting, code comments, good naming, etc)
  • Blog Post documents the project, how to use it, which features it includes, and shows examples of how to use it
  • Blog Post contains link to GitHub repo
  • Add Info to Table Below

Submission

When you have completed all the requirements above, please add your details to the table below.

Name Blog Post (URL) GitHub Repo (URL) Language (e.g., Java)
Example Name https://example.com/blog/1 https://github.com/example/tool-name JavaScript
Chris Pinkney https://dev.to/chrispinkney/release-0-1-or-i-d-pull-my-hair-out-if-i-had-any-4f7m https://github.com/chrispinkney/He-s-Dead-Jim Python
Zongwei Yang https://dev.to/yzwdroid/gourl-release-0-1-2ndb https://github.com/yzwdroid/goURL Go
Ekaterina Grinberg https://medium.com/@egrinberg/cli-utest-19f1429a8de4 https://github.com/egrinberg/Utest Node.js
Pedro Fonseca https://medium.com/@pedrofonsecadev/url-pilgrim-doc-a7090b4c6c53 https://github.com/PedroFonsecaDEV/URLpilgrim Node.js
Philip Golovin https://1jz.tech.blog/2020/09/18/wisa-a-link-checking-tool/ https://github.com/1jz/WISA Go
Tim Roberts https://dps909tddr.tech.blog/check-that-link-0-1/ https://github.com/TDDR/checkThatLink Python
Stella Jung https://sostellajung.blogspot.com/2020/09/http-parser-my-first-open-source-project.html https://github.com/StellaJung-Student/http-parser Javascript
Khoi Nguyen Vu (Tony) https://medium.com/@tonyknvu/release-0-1-i-feel-i-just-released-a-final-1-0-0-and-i-am-not-being-over-confident-580ecc4a68fb https://github.com/tonyvugithub/GoURLsCheckerCLI Go
Roger Yu https://ryudeveloper.wordpress.com/2020/09/24/checking-links-in-python3/ https://github.com/rogercyyu/cligon-url-checker Python
Isabella(Xiaolu) Liu https://dev.to/isabellaliu77/release-0-1-of-urlchecker-5fc4 https://github.com/isabellaliu77/urlChecker GO
Matthew Stewardson https://matthew-k-stewardson.blogspot.com/2020/09/week-2-working-on-linkstatusgo.html https://github.com/MSTEWARDSON/LinkStatus GO
Leon Li https://gonewiththewind1982.blogspot.com/2020/09/testlinks-small-command-line-tool.html https://github.com/lixiaoqity/testLink JavaScript
Jasper Mui https://muioverflow.wordpress.com/2020/09/17/my-me-check-link-cli-tool-mcl/ https://github.com/Jasper-Mui/me-check-links JavaScript
Joey Assal https://osd600-joey-assal.blogspot.com/2020/09/osd600-release-01.html https://github.com/joey2031/OSD600-Release0.1 JavaScript
Eunbee Kim https://ekim105.wordpress.com/2020/09/25/findbrokenglass-2/ https://github.com/eunbeek/findBrokenGlass Java
Nesa Bertanico https://nesabyte.wordpress.com/2020/09/23/title-bapples-v_0-1/ https://github.com/NesaByte/Bapples Java
Wei Huang https://weihuangosd.blogspot.com/2020/09/dlcheck-command-line-tool.html https://github.com/Wei-J-Huang/dlcheck JavaScript
Mamadou Diallo https://mamadou--diallo.blogspot.com/2020/09/release-01-command-line-html.html https://github.com/mamadou-diallo/HTML-Link-Reviewer- Java
Palak Chawla https://palak-chawla.blogspot.com/2020/09/release-01-or-first-ever-release-blog.html https://github.com/chawlapalak/Url-Inspector Node.js
Joel Azwar https://joelazwaros.blogspot.com/2020/09/linkchek-for-your-url-verifying-needs.html https://github.com/joelazwar/linkChek Node.js
ZongJin Jiang https://zjjiang2.blogspot.com/2020/09/release-01-project-checkurl.html https://github.com/zjjiang2/project-checkurl Node.js
Plamen Velkov https://plamenvelkovtech.blogspot.com/2020/09/release-01-aka-anxiety-attacks-every-05.html https://github.com/pyvelkov/DeadLinkage Java
Jie Yang https://jyangblogs.wordpress.com/2020/09/24/a-command-line-tool-checking-broken-urls/ https://github.com/jossiey/LinkChecker-CmdLC Java
Yuan-Hsi Lee https://dev.to/yuanleemidori/are-you-a-bad-link-or-a-good-link-fgb https://github.com/yuanLeeMidori/OSD600.GoodLinkOrBadLink C#
Abdulbasid Guled https://dev.to/hyperthd/urlautomationmachine-why-check-status-codes-when-you-can-get-a-machine-to-do-it-for-you-3d9j https://github.com/HyperTHD/URLAutomationMachine Python
Junyong Liu https://jliu396.blogspot.com/2020/09/my-osd600-release-01.html https://github.com/tianlangwu/urlStatusChecker Node.js
Henry Nguyen https://dev.to/henryzerocool/my-first-cli-2o0j https://github.com/HenryZerocool/henz-cli Python
Jennifer Croft https://dev.to/strawberries73/what-was-i-thinking-cn4 https://github.com/strawberries73/OSD600-Journey-on-rocky-trails (v2)Node.js
Jongwon Jang https://jongwon-jang.blogspot.com/2020/09/w2-release-01-getting-out-of-tutorial.html https://github.com/jongwon-jang/detectURL Python
Mohammed Ahmed (Mo) https://medium.com/@moho472/release-0-1-playing-around-with-new-libraries-22a95ef2f120 https://github.com/Metropass/url_tester Python 3.8
Michael Brackett https://dev.to/mljbrackett/link-check-3dg9 https://github.com/MLJBrackett/link-check Python 3.8
Bing Pan https://dev.to/bpan2/httplinkchecker-eoa https://github.com/bpan2/httplinkchecker Java 8
Sanjida Afrin https://medium.com/@safrin2/find-broken-link-fbl-0-1-1d9af4b79f9b https://github.com/sanji11/find-broken-link Node.js
Muskan Shinh https://muskanshinh.wordpress.com/2020/09/24/new-post/ https://github.com/Shinh18/urltester Node.js
Matthew Ross https://os-discovery.blogspot.com/2020/09/which-tab-was-i-on-again-finishing-up.html https://github.com/matt-ross16/CheckMyLinks Python
Hyunji Lee https://hyunjijanelee.blogspot.com/2020/09/link-check-open-source-url-fi.html https://github.com/hyunjiLeeTech/URL-FI Node.js
Kimin Lee https://dev.to/klee214/let-s-find-wrong-url-in-your-file-1c67 https://github.com/klee214/findBreakURL Node.js
Royce Ayroso-Ong https://medium.com/@roycedev/haystack-release-0-1-devblog-606ed1cbb67c https://github.com/rjayroso/haystack-link-checker Python
Andre Bhaseen https://abhaseen.github.io/open%20source/2020/09/25/week-2.html https://github.com/abhaseen/Verify-URL Python
Ruby Anne Bautista https://medium.com/@rabautista/jumping-off-the-deep-end-b0a4e79972f https://github.com/rubyAnneB/linkReaper-cli Python
Mintae Kim https://mintaedotblog.wordpress.com/2020/09/25/dead-link-checker-release-0-1/ https://github.com/sonechca/Dead_Link_Checker Python
Thanh Tien Phat Nguyen https://dev.to/phast184/release-0-1-simple-practice-to-learn-to-create-an-cli-1l0 https://github.com/phast184/link-checker-tool JavaScript
Devansh Shah https://dev.to/zg3d/fire-linker-a-cli-tool-for-broken-links-1ahc https://github.com/zg3d/fireLinker Node.js
Badal Sarkar https://badalsarkar.ca/blog-opensource/opensource/Blink/ https://github.com/badalsarkar/Blink Java
Raymond Rambo https://dev.to/fluentinstroll/link-checker-release-v0-1-4aol https://github.com/fluentinstroll/Link-Checker Node.js
Nathan Pang https://osdnathanp.wordpress.com/2020/09/25/osd-lab-0-1/ https://github.com/NathanPang001/PYLinkChecker Python
Abu Zayed Kazi Masudan Nabi https://www.abuzayed.ca/my-blog/osd600/2020/09/26/checklinkcli2-first-release-0-1/ https://github.com/abuZayed15/check-link C#
Alexander Hugh https://medium.com/@ahugh2000/release-0-1-complete-549e24ce621d https://github.com/Supercraft888/lFinder Node.js
Minh Huy Nguyen https://x7z.net/getting-started-release01 https://github.com/VietnameZe/insane-cli Node.js
Thomas-Jayrell LeBlanc https://tjstavern24697521.wordpress.com/2020/09/26/release-0-1-my-first-time-with-python/ https://github.com/IcemanEtika/deadlinkz Python
Danish Ali Mussa https://medium.com/@danishali_mussa/release-01-580dd3d1c929 https://github.com/danishalim/URLChecker Node.js
Jianpeng Zhang https://www.blogger.com/blog/post/edit/1188195736783893006/7053187206253006951 https://github.com/tuidamon/Webpage-status-checking-tool Node.js
Paul Sin https://osd600.blogspot.com/2020/09/we-are-off.html https://github.com/jiyoungsin/OSD_A1_Tool bash
Anthony Slater https://dev.to/slaterslater/introducing-gustavo-1n3b https://github.com/slaterslater/gustavo Python
Abdul Abdi https://abdulosd.blogspot.com/2020/09/osd600-release-01-deadornot-cli-url.html https://github.com/AbdulMAbdi/deadOrNot Python
Mohammed Niaz Ul haque https://dev.to/niazulhaque/aha-the-feeling-of-completing-the-start-2inn https://github.com/Niaz-Ul-Haque/nlinks Node
Yifan Zhao https://joy3van.blogspot.com/2020/10/you-already-know-linkedin-but-have-you.html https://github.com/Joy3van/linked-out Node.js
Clone this wiki locally