Peter Krauß
    • 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
    AP1: Fabric, Roles AP2: LSDF Speicher angeboten AP3: Beratung/research, mehr nicht AP4: Fabric Kram en detail, Schnittstellen im Frontend/Backend, HPC-> Delayed AP4.1.4: OAI-PMH AP5: .2 und .3 erledigt dank Nicole, .4 ist ungeklärt, .5 delayed//Probleme beschreiben, .6 Webformular das was generiert. AP6: - AP7: Versionierung --> Pierre AP8: - AP9: Chemotion-Edu AP10: - AP11: Felix schreibt ExU, Chemotion-as a Service, Service Team AP12: bwsync share, Nicole. # Teil 2.8 Bedarfe wäre gut # AP2: Modulentwicklung Bereits bei Projektstart war geplant, den Online-Speicher der Large Scale Data Facility (LSDF) am SCC zu benutzen. Im bisherigen Projektverlauf wurden Bedarfe untersucht, die sich für den effizienten Betrieb des Chemotion-ELN mit dieser Infrastruktur ergeben. Folgende Punkte wurden adressiert: - Zugriffsprotokolle: Bisher ist der Zugriff auf Daten, die auf der LSDF gespeichert sind für MoMaF-Services lediglich über SSH-FS und SFTP möglich. Es wurden alternative Protokolle diskutiert, die zu den Zugriffsmustern des Chemotion-ELN besser passen. Es zeigte sich, dass Zugriffe ausschließlich auf Dateiebene erfolgen und Block-level-Zugriffe nicht notwendig sind. Ebenfalls muss nicht vollständige POSIX-kompatibilität gewährleistet werden. Es erscheint somit sinnvoll, auf das für Dateizugriffe optimierte SMB-Protokoll zu wechseln. Dies erfordert die Kooperation mit dem Betreiberteam des Dienstes. Grundsätzliche Machbarkeit wurde signalisiert, allerdings bisher nur im Testbetrieb implementiert. - Erweiterte Remote-Dienste: Es wurde festgestellt, dass bestimmte Daten-Operationen ausschließlich auf dem Speicherbackend passieren. Dies sind beispielsweise Kopier-, Transkodier oder Archivierungsvorgänge. Im Projekt haben wir untersucht, wie wir diese Vorgänge beschleunigen und effizienter umsetzen können. Im Ergebnis soll ein Dienst entstehen, der nahe beim LSDF-Speicher betrieben wird und der aufgrund der Lokalität von einer höheren Bandbreite profitieren kann. Ziel ist es, dass das Front-End (hier das ELN), lediglich einen API-Aufruf für eine solche langlaufende Aufgabe durchführt und der neugeschaffene Dienst diesen dann im Auftrag erledigt. Diese Überlegungen sollen im weiteren Projektverlauf weiter verfolgt und auf der MoMaF-Infrastruktur umgesetzt werden. - Versionierung der ELN-Historie: Um eine bessere Nachverfolgung von Forschungsvorhaben zu gewährleisten, wurde ein Weg gesucht, um bestimmte Vorgänge des ELN zu dokumentieren. Hierbei geht es in erster Linie darum, Forschenden die Möglichkeit zu geben, die eigenen aber auch die Änderungen Dritter an Datensätzen über einen bestimmten Zeitraum einzusehen. Wir erwarten, dass dies besonders bei Berichten, Publikationen und Auswertungen hilfreich sein wird. Technisch soll diese Komponente als Erweiterung des ELN behandelt werden und die Kernfunktionalität in einen Mikro-Service augelagert werden. Somit soll stetige Skalierbarkeit und Modularität zur unabhängigen Entwicklung gewährleistet werden. Im bisherigen Projektverlauf ist ein erster Demonstrator entstanden, dessen Funktionalität bereits einige Use-Cases abbildet. Der Demonstrator basiert auf einer HTTP-basierten Schnittstelle und einer Redis-Datenbank. Die Implementierung ist in Python realisiert. Für die Implementierung mittels HTTP spricht, dass dieses Protokoll einfach an das Chemotion-ELN angebunden werden kann, aber dies auch für andere Anwendungen möglich ist. Redis wurde aufgrund der sehr hohen Geschwindigkeit und Skalierbarkeit gewählt. Beide Eigenschaften sind notwendig, sobald MoMaF von einer Vielzahl an Nutzern gleichzeitig benutzt werden soll. <!----> > TODO: Versionierungsdienst mehr ausbauen? # AP3: > TODO: Über Aktivitäten in verschiedenen Gruppen und Gremien, beispielsweise dem Research Data Management-Service-Team # AP4: <!-- AP4.1 - Schnittstellen AP4.1.1 - Schnittstellen von ELNs zu Repositorien (IAM, IOC) AP4.1.2 - Schnittstellen von ELNs und Repositorien zu Speicher- bzw. Archivierungsdiensten (SCC) AP4.1.3 - Schnittstellen zwischen ELNs und Big Data-Analyseumgebungen wie HPC, DIC für daten- oder rechenintensive Analyseaufgaben (SCC, IOC, IAM) AP4.1.4 - Schnittstellen der Repositorien untereinander AP4.2 - Ressourcenanbindung AP4.2.1 - Datenspeicher- und Auswertungsmanagementsystem (SCC, IOC, IAM) AP4.2.2 - Anbindung von Speicher- und Archivierungsdiensten (SCC) AP4.2.3 - Asynchrone Datenbereitstellung und -auswertung (SCC) AP4.2.4 - Integration der Datenbereitstellungsmechanismen in die Arbeitsumgebung (SCC) AP4.2.5 - Integration mit Big Data (DIC) und HPC-Analyseumgebungen zur Datenauswertung (SCC, IOC, IAM, AIFB, BIB) --> Ausgehend von der Architektur des Antragsdokument (siehe [Antragsdokument], Abb. 3) haben wir die MoMaF-Infrastruktur in mehrere Bereiche gegliedert: - MoMaF-ELN als primärer Einstiegspunkt für Forschende: das Chemotion-ELN bildet das Front-End um u.a. Daten zu importieren und zu verwalten, Experimente zu dokumentieren und Daten auszuwerten. - MoMaF-Repositorien: Das MoMaF-SDC bindet mehrere verschiedene Repositorien ein und erlaubt den direkten Datenaustausch zwischen ELN und Repositorium. Hierdurch soll die Veröffentlichung von Daten und deren Anreicherung mit Metadaten vereinfacht werden. - Externe Ressourcen: Neben den von MoMaF selbst betriebenen Diensten wird es möglich und notwendig sein, Dienste anderer Anbieter zu integrieren. Dies soll über bestehende und neu geschaffene Schnittstellen geschehen. Beispiele hierfür sind diverse Speicherdienste, wie bwDataArchive oder bwHPC. - Unterstützung der Prozesse durch maschinelles Lernen: Daten- und Prozessbeschreibungen sollen durch neue Recommender-Funktionen, beispielsweise bei der Auswahl passender Metadaten, verbessert oder beschleunigt werden. ![Abb. 3](2020-12-20-14-18-55.png) Diese Ansicht zeigt, welche Komponenten und Schnittstellen zu Beginn des Projekts als notwendig identifiziert wurden. Im bisherigen Projektverlauf hat sich ein ausdifferenziertes Konzept mit teilweise abweichenden Komponenten und Schnittstellen ergeben. Dies betrifft vor allem den Teil, der in der Abbildung grob mit "Interfaces" überschrieben ist. So ist beispielsweise eine direkte Anbindung von "ELN" zu "HPC" oder von "Repositorium" zu "Online-Speicher" nicht möglich, sondern es wird jeweils eine Middleware zur Übersetzung von Zugriffen benötigt. Ziel ist es dabei, die Funktionalitäten der spezifischen externen Dienste (in Abb. 3 unter dem Begriff "Ressourcen" subsummiert) zu vereinfachen, vereinheitlichen, abzusichern und gegebenenfalls zu erweitern. Die Gesamtheit dieser Middlewares inklusive der benötigten Managementfunktionalitäten wird nachfolgend als Fabric bezeichnet. Im Rahmen dieses Zwischenberichts sollen die bisher untersuchten Aspekte der ursprünglichen Architektur und des Fabric beschrieben werden. Es ist zu erwarten, dass weitere konzeptuelle Anpassungen im Projektverlauf notwendig werden. ## AP4.1 - Schnittstellen <!-- Hier haben wir offiziell erst ~5PMs daran gearbeitet. sollten wir hier auch wiederspiegeln. Z.B.: Es wurde damit begonnen, die identifizierten Schnittstellen konzeptuell zu modellieren. Hierzu wurde... --> ### AP4.1.1 - Schnittstellen von ELNs zu Repositorien (IAM, IOC) > Nicole? ### AP4.1.2 - Schnittstellen von ELNs und Repositorien zu Speicher- bzw. Archivierungsdiensten (SCC) > TODO: LSDF/Archivanbindung ### AP4.1.3 - Schnittstellen zwischen ELNs und Big Data-Analyseumgebungen wie HPC, DIC für daten- oder rechenintensive Analyseaufgaben (SCC, IOC, IAM) > TODO: HPC Anbindung ### AP4.1.4 - Schnittstellen der Repositorien untereinander > TODO: hm ... Repo mach die Metadaten, die Daten liegen auf bwArchive. Wir regeln das staging und den export? ## AP4.2 - Ressourcenanbindung ### AP4.2.1 - Datenspeicher- und Auswertungsmanagementsystem (SCC, IOC, IAM) ### AP4.2.2 - Anbindung von Speicher- und Archivierungsdiensten (SCC) Zum Speichern von Daten, auf die regelmäßig zugegriffen werden soll (sog. "hot data"), bietet das SCC Zugriff auf die Large Scale Data Facility (LSDF) an. Der Zugriff erfolgt über gängige Protokolle, aktuell kommen primär SSH-FS und SFTP zum Einsatz. Diese Protokolle sind weit verbreitet, allerdings in einigen Anwendungsfällen weniger leistungsfähig als andere Protokolle. Wie bereits im Obigen erläutert, arbeitet das SCC eng mit dem Team der LSDF zusammen, um in MoMaF das für unsere Anwendungen besser geeignete SMB-Protokoll anbieten zu können. Mit Blick auf die Ziele des Projekts hinsichtlich Interoperabilität ist es notwenig, das Rechtesystem auf SMB-kompatible Access Control Lists (ACL) zu übertragen. Dabei handelt es sich um Beschreibungen für Dateizugriffsberechtigungen basierend auf einem systemspezifischen Benutzer-Namensraum. Es besteht dabei die Möglichkeit einer Kollision von Benutzer-Identifikatoren, da der Namensraum der MoMaF-Plattform grundsätzlich größer sein kann, als der von dem Service unterstützte. Diese Problematik ergibt sich bei jedem Dienst, ist allerdings in den meisten Fällen theoretischer Natur, da selbst einfache Services viele tausend verschiedene Identifikatoren erlauben. Trotzdem wird es unerlässlich sein, einen Übersetzungsdienst zwischen verschiedenen Namensräumen zu betreiben: Eine Nutzerkennung folgt in vielen Fällen unterschiedlichen Regeln, die nicht zwingend mit denen der MoMaF-Plattform eins zu eins übereinstimmen. Hier ist dann eine Konversion nötig. Für die Anbindung an den Online-Speicher LSDF wird somit das SMB-Protokoll für reine Datenoperationen zum Einsatz kommen, zur Authentifizierung allerdings ein vereinheitlichtes Benutzermanagement, welches MoMaF-SDC-Benutzer in den Kontext des Speicherdienstes übersetzen kann. Die Authentifizierungsmethode verhält sich beim Archivdienst ähnlich: Wieder sind die Benutzer dienstspezifisch und müssen vom MoMaF-Namensraum übersetzt werden. Hier sind wir allerdings flexibler, da bwDataArchive ein programmierbares Benutzerinterface anbietet. Aus Gründen der Konsistenz wird dennoch der oben genannte Übersetzungsdienst eingesetzt, allerdings mit einer angepassten Backend-Schnittstelle. Zum Transfer von Daten wird beim Archiv SFTP eingesetzt. Dieses Protokoll ist für diese Anwendung geeignet, da sich die Zugriffsmuster von denen auf Online-Speicher stark unterscheiden: Es werden lediglich große Dateien geschrieben und es wird selten mit Änderungen zu rechnen sein. Das Protokoll ist hierfür aufgrund der Einfachheit geeignet, da es dadurch weit verbreitet ist und weniger potenzielle Sicherheitslücken bietet als komplexere Protokolle. ### AP4.2.3 - Asynchrone Datenbereitstellung und -auswertung (SCC) In einige Anwendungsfällen ist es notwendig, Daten in einer anderen Umgebung, beispielsweise dem HPC-Cluster zu analysieren oder zu verarbeiten. In diesen Fällen müssen die Daten in diese Umgebung übertragen werden. Um diesen Vorgang möglichst reibungsfrei zu gestalten, möchten wir in MoMaF asynchrone Datentransferdienste einsetzen. Die Aufgabe dieser Dienste ist es, Daten zu kopieren, ohne dass hierfür Benutzerinteraktion notwendig ist. Für den Datentransfer an sich gibt es bereits eine Vielzahl an Software-Lösungen, die produktiv einsetzbar sind und Zusatzfunktionen wie Verschlüsselung auf dem Übertragungsweg oder Integritätsprüfung bieten. Es wird allerdings notwendig sein, eine zusätzliche Schnittstelle bereit zu stellen, über die Datentransfers beauftragt werden können. Es ist dabei darauf zu achten, dass bei bestimmten Systemen (beispielsweise asynchronen Speichern wie Bandsysteme oder langsamen Netzwerktransfers über das Internet) möglicherweise ein Zwischenschritt, das sog. Staging, nötig sein wird. ### AP4.2.4 - Integration der Datenbereitstellungsmechanismen in die Arbeitsumgebung (SCC) ??? ### AP4.2.5 - Integration mit Big Data (DIC) und HPC-Analyseumgebungen zur Datenauswertung (SCC, IOC, IAM, AIFB, BIB) ??? # AP5 AP5.1 - Übergreifendes Rechtemanagement AP5.2 - Integration Rechtemanagement Arbeitsumgebungen/ELNs AP5.3 - Integration Rechtemanagement Repositorien AP5.4 - Daten-Authentizität (SCC, AIFB, IOC, IAM) AP5.5 - Integration des Rechte- und Rollenmanagements eingebundener Speicherdienste und HPC- bzw. DIC-Umgebungen (SCC) AP5.6 - Vereinheitlichung und Zusammenführung der Zugangs- und Beantragungssysteme (SCC, BIB) # AP5.5 - Integration des Rechte- und Rollenmanagements eingebundener Speicherdienste und HPC- bzw. DIC-Umgebungen (SCC) Auf Infrastrukturebene ist lediglich die Rolle des Administrators vorgesehen. Benutzern dieser Rolle ist es möglich, weitere Benutzer anzulegen und diesen beliebige Zugriffsberechtigungen zu erteilen. Zur einfachen Handhabung sind Berechtigungsgruppen vorgesehen. Es bleibt somit einem Administrator selbst überlassen, ob er weitere Benutzer anlegt und wenn ja, welche Rollen er für diese vorsieht. Mit diesem Konzept lehnen wir uns an bekannte Konzepte des Cloud-Umfelds an. Durch dieses Konzept ist es möglich, sowohl übliche Service-Benutzer (z.B. für Monitoring-Aufgaben oder zeitgesteuerte, nicht-interaktive Tasks) anzulegen, als auch Berechtigungsmodelle zu erlauben, die noch nicht von Anfang an geplant waren oder sich aus dem Kontext der Benutzer-Domäne ergeben. Ein derartiges Konzept wird jedoch nicht für jeden beteiligten Service implementierbar sein. Aus diesem Grund haben wir in der bisherigen Projektphase mit den Experten der AARC-Community[1] zusammengearbeitet, um derart komplexe Berechtigungssysteme auch auf weniger flexiblen Umgebungen zu ermöglichen. Daraus ist ein Demonstrator entstanden, welcher Token-basierte Authentifizierung auf Linux/Unix-Plattformen über ein PAM-Modul[2] ermöglicht. In ersten Implementierungen wurde dies für SSH-Logins eingesetzt. Diese Technologie ist die Basis für spätere Anwendung auf HPC-Clustern. Der AARC-Authentifizierungs-Blueprint[3] wird auch in einer Vielzahl anderer Großprojekte wie beispielsweise HIFIS oder NFDI diskutiert und verwendet. Wir erhoffen uns durch den Einsatz einer weit verbreiteten Lösung, dass der Quellcode als auch das Konzept durch das Viele-Augen-Prinzip ein größeres Maß an Sicherheit ermöglicht als eine Insel-Lösung, die ausschließlich in MoMaF zum Einsatz kommen würde. Außerdem verspricht diese Lösung eine maximale Kompatibilität mit zukünftigen Diensten und auch eine nachhaltig gesicherte Weiterentwicklung. [1]: https://aarc-project.eu/ [2]: https://de.wikipedia.org/wiki/Pluggable_Authentication_Modules [3]: https://aarc-project.eu/architecture/ # AP 5.6 Bei einigen Diensten der MoMaF-Plattform, die von Drittanbietern angeboten werden, ist es notwendig, vorab einen Zugang zu beantragen. Unsere Recherche ergab, dass es in vielen Fällen ausreicht, ein Online-Formular auszufüllen. Es zeigte sich weiter, dass viele Informationen (Name, Projektbeschreibung, etc.) mehrfach ausgefüllt werden müssen. Wir möchten Forschende hierbei unterstützen, z.B. indem wir ein vereinheitlichtes Online-Formular anbieten, das sämtliche Informationen einmalig abfrägt und anschließend Antragsformulare für Drittanbieterdienste generieren kann. Wir sehen hier noch Potenzial zur Verbesserung: Ein erster Schritt wäre, die generierten Formulare automatisch an eine entsprechende Kontaktadresse des Drittanbieters zu versenden. In einer zweiten Verbesserungsiteration könnte versucht werden, mit Drittanbietern einen automatisierbaren Weg der Datenübermittlung auszuhandeln und gemeinsam ein Gesamtkonzept zur vereinheitlichten Antragstellung zu erarbeiten. # AP7.4 Wie bereits erwähnt wurde im Projekt ein Demonstrator zur Versionierung der ELN-Historie entwickelt. Durch ein geeignetes Interface können diese Informationen Forschenden helfen, die eigenen Experimente nachzuvollziehen und gegebenenfalls Änderungen an Datensätzen, die zusammen mit anderen genutzt und bearbeitet werden, zu identifizieren und nachzuvollziehen. Weiter kann sich ein Wissenschaftler auch überlegen, seine Arbeitshistorie zusammen mit den Ergebnissen zur besseren Nachvollziehbarkeit und größeren Glaubwürdigkeit zu publizieren. Dies könnte einen besonderen Mehrwert für Review-Prozesse mit sich bringen. Der Demonstrator soll im weiteren Projektverlauf optimiert werden und als eine Komponente des Dienstbetriebs ausgebaut werden. # AP9 Zu Lehrzwecken wurde eine Instanz des Chemotion-ELN/-Repo inklusive des Chemspectra-Analyse-Services auf einem virtuellen Server des SCC aufgesetzt. Diese Lehrinstanz dient primär zu Demonstrationszwecken. Es hat sich allerdings als effizient herausgestellt, auf Basis dieser Installation eine einfach zu handhabende Container-Installation zu entwicklen. Es ist hierdurch möglich, die Installation stets mit wenig Aufwand in den Ursprungszustand zu versetzen (beispielsweise nachdem ein Lehrvorgang abgeschlossen wurde) oder komplett unabhängige, neue Kopien des ELN als separierte Arbeitsumgebung zu erzeugen. Wir sehen hierin einen wichtigen Baustein, um das Chemotion-ELN und Repositorium skalierbar zur Verfügung stellen zu können, da die Komplexität der Installation und des Managements während des Betriebs stark verringert wird. # AP11 Ähnlich zur Chemotion-ELN Instanz zu Lehrzwecken (siehe AP9) kann ein "Chemotion as a service" auch zur einfachen Etablierung in der Forschung beitragen. Das Konzept der Containervirtualisierung erlaubt ein einfaches und flexibles Aufsetzen von Dienstinstanzen, die von unterschiedlichen Forschergruppen genutzt werden können. Diese Instanzen können außerdem auch für Schulungen zur Nutzung von ELN durch das Serviceteam RDM@KIT (https://rdm.kit.edu) genutzt werden, um Forschenden die Funktionen zu erklären. Hierzu werden Szenarien in Kooperation mit den Forschenden und dem Serviceteam RDM@KIT erarbeitet. Eine im Rahmen der Exzellenzuniversitätsvorhaben zu Forschungsdatenmanagement am KIT entwickelte ELN-Variante kann von diesen Arbeiten profitieren und eine Nutzbarkeit des ELN auch für weitere wissenschaftliche Communities ermöglichen, wodurch ggfs. Synergien zu erwarten sind. # AP12 Sourcen auf Gitlab?

    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