Amy Luo
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # COMP1531 WED13C ## week_1 "How many hours of zoom calls happen everyday (on average)?" ### group1 hello 4.66 Billion internet users We could say 2.5 billion use zoom High school students use it for an average 6 hours 300 million daily participants Students: 6 hours (hs) workers: 3 hours ### group2 3 million hours maybe,,,, perhaps,,, I guess,,, unlikely,,, no we didnt zero thought no thought head empty random number ### group3 hello **50 million hours probably** nah this ones right trust wait we're actually right ### group4 45 billion minutes per year 2055 hours per day ### group5 lmao no hello world: 500 million The hours 3 + 50 + 500 million / 3 (hrs) ## week_2 Thinking about testing > The following set_name function is used to set a name according to the follow requirements on input: > First Name must be at least 3 characters, and no more than 30. > Last Name must be at least 3 characters, and no more than 50. > First Name can only contain letters (uppercase or lowercase), and dashes. > Last Name can only contain letters (uppercase or lowercase), spaces, and dashes. > Middle Name can be None, but if it's not none, it can be between 1 and 50 characters. > Middle Name cannot be longer than the first name, and it cannot be longer than the last name. Your tutor will break you up into your project groups for this activity. Once completed you can come back together to discuss what you have. The function returns True if the inputs are valid, and False if the inputs are invalid. ```python= def set_name(firstName, middleName, lastName): pass ``` Write a list of inputs and associated return values. This is good practice for trying to conceptualise edge case. |Input|Output| |-|-| |len(firstname) < 3 |false| |len(firstname) > 30|false| |len(lastname) < 3 |false| |len(lastname) > 50|false| |middlename not None && len(middlename) > 1 && len(middlename) < 50|true| |len(middlename) > 50 | false| |last name contains chars between "a-z" or between "A-Z" or "-"|true| |first name contains chars between "a-z" or between "A-Z" or "-"|true| |len(middlename) < len(lastname) or len(middlename) < len(first name) |true| ## week_3 Each group in the tutorial should share a summary of their teams plans and progress in relation to: * When (or if) they are running standups and whether they are synchronous or asynchronous * How often they meet, how they meet, and what the goals/outcomes of any meetings so far have been * Have they or will they try pair programming * Any challenges they've faced already after being in a group for a week * Other group members (in other teams) are encouraged to ask questions and learn from what other groups are doing/saying. ### Alpaca * Synchronous meeting usually about 2 times a week. * Meetings over Teams. * Meetings provide an update on individual progress and also give the opportunity to bring up overarching issues. Actionables are also established to do until the next meeting. * No challenges yet. * Planned to implement pair programming in the next iteration of the project. ### Beagle Regular synchronous meetings: 2 standups (Monday and Friday's) for small updates and setting objectives and working through challenges, with a larger more focused meeting on Wednesdays during tute to consolidate code. - More formal meetings will be via zoom and microsoft teams. Smaller group checkups are done via discord. Challenges face include consistency in code (variable names, using fixtures), understanding and making assumptions regarding how each function needs to be implemented for testing. These were faced in pairs and frequently discussed with the remaining members over dm's. - pair meetings held in discord ### Camel Run a mix of synchronous and asynchronous standups throughout the week. Asynchronous standup held on the Sunday morning with in-person meetings on Monday ~5pm & Friday ~4pm as well as the in person meeting held during the tut. * Asynchronous standups every Sunday * Goals/Outcomes: discuss what we have done and going to complete, ask any questions we have Done - Held in-person meetings to distribute tasks after catching up on the assignment spec with follow up standups being held twice for updates in progress & discussing any problems met To Do - Roughly finish sections by Wednesday for time to edit, merge and polish code ### Dodo * 3 meetings a week (Wednesday, Friday and Sunday) and synchronous * On Microsoft Teams: Sunday meetings each week at 3pm, Wednesday meetings each week at 1pm to 4pm, maybe fridays at 1pm 5min before. * Sunday bigger meeting, other are just standups * Agreeing on data structures has been the biggest challange * Pair programming to some extent hope ### Eagle Synchronous meetings every 3-4 ish days to just update each other on our progress / what we have to prioritise. Main meeting is during the tutorial where we have an extended period of time to discuss and make sure everyone is fully up to date of what has to be done. - Meet more formally on MS teams but also short informal meetings on other messenging apps such as Discord. - Better planning in the early stages of the project - closer teamwork when working on code, not just when someone submits a merge request - more frequent synchronous standups Challenges - Making sure everyone is on track with the tasks - Ensuring our code is functional - Style conflicts ## week_4 Compare these two pieces of code from a pythonic, style, and readability point of view and choose which one you prefer. When you choose one, you must justify your reasoning in the shared document your tutor gives you. ```python= def check_password(password): if password == "password" or password == "iloveyou" or password == "123456": return "Horrible password" elif (len(password) >= 12 and any(x.isupper() for x in password) and any(x.isdigit() for x in password) and any(x.islower() for x in password)): return "Strong password" elif len(password) >= 8 and any(x.isdigit() for x in password): return "Moderate password" else: return "Poor password" if __name__ == '__main__': print(check_password("ihearttrimesters")) # What does this do? ``` ```python def check_password(password): ''' Takes in a password, and returns a string based on the strength of that password. The returned value should be: * "Strong password", if at least 12 characters, contains at least one number, at least one uppercase letter, at least one lowercase letter. * "Moderate password", if at least 8 characters, contains at least one number. * "Poor password", for anything else * "Horrible password", if the user enters "password", "iloveyou", or "123456" ''' horrible_pw = ["password", "iloveyou", "123456"] digit = False upper = False if password in horrible_pw: return "Horrible Password" elif len(password) >= 8: for char in password: if char.isdigit(): digit = True elif char.isupper(): upper = True if digit and upper and len(password) >= 12: return "Strong Password" elif digit: return "Moderate Password" return "Poor Password" if __name__ == '__main__': print(check_password("ihearttrimesters")) # What does this do? ``` ### Alpaca First: - Is more pythonic, - Overly long conditions, - Shorter looking, Second: - Has docstrings. - Put all the horrible passwords into a list, ### Beagle Why we did not choose First: - has a lot of repeated code - password, conditions etc. - conditions are very long - Second: - has doc string, describes the function well - uses a list for identifying horrible password - Since it is set out vertically, more easily digestible and code logic is more easily understandable ### Camel First: - Is more pythonic in structure - Utilises in-built libraries for checking digits and case check - Less readable with long if statements Second: - Has docstring which assists to understand the functions purpose - Has possibly longer runtime due to for loops - it's more readable: less code in each line ### Dodo First: - First one is very attractive (appearance-wise), very pythonic - Conditions are contained within the if statement - Uses more built-in functions - Logic of code is easier to follow (branches are easier to identify) Second: - booleans make for simpiler and shorter logic - Passwords in a list easy to add more passwords that are considered bad - ### Eagle - First Uses more python conventions and syntax, however makes it harder to read to someone who wouldn't know Python. - Second Second one is much more readable with explanation of the function and simple code. We would prefer the the second function to the first despite it being longer, it is much more readable with the docstring explaining the function and more simpler logic. The first function is more pythonic however, the complex functions has longer conditions and is quite overwhelming for a non-python user. Branched as opposed to long elif statements. ## Week_7 ### B. Requirements Your tutor may break you up into groups to complete this activity. Q. What are attributes of good requirements? Q. How could we clean this up into well described requirements? "I want a burger with lots of pickles and mayo but I need to make sure that the mayo doesn't make the burger bun really wet. Oh, and it needs to be warm, like, made less than 5 minutes ago warm but not so hot that I burn myself. I'm also not a big fan of plastic containers so if it could be in a paper bag that would be good. Actually, make that a brown paper bag, I like the colour of that" --- ### ALPACA: #### Attributes of good requirements: **Cohesive:** The requirement defines a single aspect of the desired business process or system. **Complete:** The individual requirement is not missing necessary or relevant information. Additionally, the entire set of requirements should cover all relevant requirements. **Consistent:** The requirement does not contradict another requirement. **Modifiable:** Like requirements should be grouped together to allow similar requirements to be modified together in order to maintain consistency. **Correct:** The requirement meets the actual business or system need. An incorrect requirement can still be implemented resulting in a business process or system that does not meet the business needs. **Observable:** The requirement defines an aspect of the system that can be noticed or observed by a user. This is often referred to as “Implementation Agnostic” as the requirement should not specify aspects of system architecture, physical design or implementation decisions. These aspects of a system should be defined separately as constraints. **Feasible:** The requirement can be implemented within the constraints of the project including the agreed upon system architecture or other physical design or implementation decisions. **Unambiguous:** The requirement is written objectively such that there is only a single interpretation of the meaning of the requirement. **Verifiable:** It can be shown that the requirement has been met by the final solution via inspection, demonstration, test, or analysis. Requirements should be : - Clear - Testable/Verifiable - Independent - Feasible #### Re-writing client's requirements: * Maximise pickles count 🥒 and volume of mayo(mayo<not make bun soggy) 🤤, * Mayo should not touch the buns 👿, * Serve burger within 5 minutes of completion 👌 * Keep burger in heated area to maintain warmth until pickup 🥵 * Keep the burger sandwiched in your pants to keep it warm using body heat until giving it to the customer, (energy efficient and environmentally friendly) * Store in a brown paper bag, if brown is not available get another colour and paint it brown. 🎨 * 💯💯💯💯💯 pickle man 💯💯💯 😎😎😎 #### Re-writing client's requirements (for real this time): * Burger should contain extra pickle and mayo. * Mayo should not touch the buns (to not make it wet). * The burger must remain warm. * Store in brown paper bag (not necessary). --- ### DODO: - Answer 1:INVEST - Unambiguous, (no misunderstanding between customer and developer) - Testable (verifiable, being able to check if requirment is met) - Clear (concise, terse, simple, precise) - Correct (Validated by clients/stakeholders, Fits the criteria of the users) - Understandable.(Well-defined, English) - Feasible (realistic, possible) - Independent (Not heavily reliant on other modules) Answer 2: - Burger made with pickles and mayonaise (5 pickles, the mayo should cover 1/3 of the patty) - volume of mayo asymtotic behaviour to making bun soggy - Burger needs to be warm, let it rest but serve within 5 min of making it - Delivered in a brown paper bag (want not need) - Burgers should be served promptly in a paper bag within five minutes and contain no more than five pickles. The amount of mayo placed into the buns should not be dripping out. --- ### CAMEL: **Q1:** - Unambiguous: Not using 'either this or maybe that' to avoid confusion. - Testable: in terms of code, having small tasks/features that could be tested along the way - Clear and concise - Easy to understand, good words choice. - Independent: Often having independent test features will help with debugging and having a cumulative problem **Q2:** Overview: - Burger with extra pickles and mayo. - Burger needs to be in a brown paper bag, no plastic containers Mayo: - Should not make the bun wet Bun: - Needs to be warm - Needs to be made within 5 mins "I want a burger with lots of pickles and mayo but I need to make sure that the mayo doesn't make the burger bun really wet. Oh, and it needs to be warm, like, made less than 5 minutes ago warm but not so hot that I burn myself. I'm also not a big fan of plastic containers so if it could be in a paper bag that would be good. Actually, make that a brown paper bag, I like the colour of that" --- ### BEAGLE: Q1. Derived from agreed work to be completed by stakeholders, providing descriptions and contraints of a proposed system. They specify what a system should provide and do, in addition to providing any constraints to how the system will perform. Specify how the system can be tested Q2. Use numbers. Different amounts for mayo - small, medium, large something like that Burger should contain adequate - pickle and mayo, with just enough mayo the bun is still dry Burger should be served - within 5 minutes of being made - in brown paper bag --- ### EAGLE: Q1. - Specific elements that the code should provide. - Not too broad but not too detailed. - Designed from what the consumer demands / wants from the product. - Concise and states contraints. - Realistic and achievable within contraints. - Provide clear descriptions of what is to be achieved. Q2: Q. "How could we clean this up into well described requirements? "I want a burger with lots of pickles and mayo but I need to make sure that the mayo doesn't make the burger bun really wet. Oh, and it needs to be warm, like, made less than 5 minutes ago warm but not so hot that I burn myself. I'm also not a big fan of plastic containers so if it could be in a paper bag that would be good. Actually, make that a brown paper bag, I like the colour of that" - Create a burger, making sure to add a lot of pickles. - Add lots of mayo, but ensure that the burger is not too wet. - Ensure the burger is made recently so it retains its heat, but make sure it is not too hot to a point where it could harm the consumer. - Place burger in a brown paper bag and deliver to consumer. - pickles + mayo -> mayo doesn't make it too wet - made < 5 minutes ago but not too early that it burns - brown paper bag ### C. User Stories Consider the core requirements of UNSW Streams: 1. Ability to login, register if not registered, and log out 1. Ability to see a list of channels 1. Ability to create a channel, join a channel, invite someone else to a channel, and leave a channel 1. Within a channel, ability to view all messages, view the members of the channel, and the details of the channel 1. Within a channel, ability to send a message now, or to send a message at a specified time in the future 1. Within a channel, ability to edit, share between channels, remove, pin, unpin, react, or unreact to a message 1. Ability to view anyone's user profile, and modify a user's own profile (name, email, handle, and profile photo) 1. Ability to search for messages based on a search string 1. Ability to modify a user's admin permissions: (MEMBER, OWNER) 1. Ability to send message directly to a user (or group of users) via direct messaging (DM). Pick two of the above and write a series of user stories that encompass each requirement: * Discuss as a class the **potential target audience**, and use this as your type of user; * UNSW STAFF MEMBER * Write acceptance criteria for each story and discuss when to use Scenario-based and Rule-based acceptance criteria ### D. Use Cases Pick one of the above requirements you have written stories for and write a use case for the flow of interaction. ### Alpaca - Target audience: UNSW Staff member #### Ability to search for messages based on a search string: - As a UNSW staff member, I would like to be able to search messages so I can reference responses easily to students. #### Ability to view anyone's user profile, and modify a user's own profile (name, email, handle, and profile photo): - As a UNSW Staff member, I want to be able to view a student's profile to ensure they are enrolled. Acceptance Criteria: - - A list of all available users - - A way to view detailed information about a single user ### Beagle 6. Target Audience: STAFF MEMBER As a UNSW staff member, I would like to be able to (within a channel) have the ability to edit, share between channels, remove, pin, unpin, react, or unreact to a message, so that course announcements in the form of messages are up to date and be able to respond to / oranaise a class. - I would like to be able to react (correct or incorrect) to student questions without having to reply, which clutters the channel message feed ### Camel 1. Within a channel, ability to send a message now, or to send a message at a specified time in the future Target Audience: UNSW Staff Member - As a UNSW Staff member I would like to be able to send a message to students with time-stamps. I can also make sure notifications get sent to students within a scheduled time Acceptance Criteria: - ### Dodo 1. Ability to search for messages based on a search string As a UNSW staff member, I want to search messages so that I can see evidence of student teamwork and communication. As a UNSW staff member, I want to be able to search for messages sent by students so that I can look up a student's question and conversation that lead up to that question. Acceptance Criteria: - A search bar on top of web page - Includes a filter to look up messages from a specific student at a specific time frame ### Eagle Doing 7 and 8!!!! Don't steal !!!😈😈😈😈 7. Ability to view anyone's user profile, and modify a user's own profile (name, email, handle, and profile photo) Target audience: UNSW student or staff Any student or teacher will have the ablity to view any other's profile so that they can obtain some basic public information about other users. Any student or teacher can modify their profile so that they can share basic information about themselves. Only the user can modify their own profile. 9. Ability to search for messages based on a search string The teacher and students of a certain class/group can be able to search for ## Week 8 Break into groups of 3. The only rule is that no one in the group of 3 can be in your project team. In your team, you will be given 5-10 minutes to analyse the current API specification for your project, and to (as a team) propose one (or a couple) of new "route(s)" (i.e. url) to the interface to add some cool functionality to the product. Find something that you as a team get excited about. You'll be sharing your answer with the class, and will be expected to provide for each route: * A route (i.e. /this/url/name) * A CRUD method (e.g. GET) * Input parameters * Return object * Description of what it does ### Group1 fun stuff reply to messages @APP.route("/messages/reply/v1", methods=["POST"]) def message_reply_route(): data = request.get_json() token = data['token'] u_id = data['u_id'] msg_id = data['message_id'] output = messages_reply(token, u_id, message_id) return dumps(output) Description: reply to a message and notify the original sender that their message has been replied to @APP.route("/calender/v1", methods="") return dumps(calender_v1().get_json()) @APP.route("/addfriend/v1", methods="") ### Group2 Sending pictures/videos (HTTP METHOD: PUT) parameters: - link - dm_id/channel_id returns: - nothing description: @APP.route("/messages/sendpicture/v1", methods=["POST"]) def message_sendpicture_v1(): data = request.get_json() token = data['token'] message_id = data['message_id'] response = message_send_pic(token, message_id) ### Group3 route: /message/all @APP.route("/message/all", methods=['POST']) input {message, token} return {[{message_id, u_id}]} Sends indivdual message to everyone, stream owners only for annoucments etc Checks token to see if stream owner (will raise Access Error if not) Runs general checks for valid user Will return list of dictionairy containing message_id and u_id to know associated message ### Group4 - Displays a GIF after being passed link into a message chat route: /messages/sendgifs/v1 @APP.route("/messages/sendgifs/v1", methods = ['POST']) Parameters: {token, link, channel_id} return {'message_id'} Description: -check if token is valid -sends a gif to a channel ### Group5 something cool likes / dislikes for messages @APP.route("message/like", methods = ["POST"]) Input parameters: - User token - Message ID - Like/dislike ID (e.g like = 1, dislike = 0) Return: {Total net likes} Description: Similar to YouTube comments, get a general idea of each user's opinion on the message. This could be added in conjunction with reacts. call scheduling (calendar/timetable type) @APP.route("/schedulecall/", methods = ["POST"])I Input parameters: - Channel_id / dm_id - Time - User token Return: { "channel/dm_id": (id) "scheduled_time": (time) "creator": (name or user_id) } Description: Schedule a call with a dm/channel at specific time, and user must be a pre-existing member. Sends notification at time. ## Template ### Alpaca ### Beagle ### Camel ### Dodo ### Eagle

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully