sunset lover
    • 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
    Komanda: Ariadna Ivanova Mihails Korčevskis Marks Grišajevs Andris Mačevskis Marks Rozenbergs # **Ievads** ## Problēmas nostādne Uzturvērtību skaitīšana ir sarežģīts un laikietilpīgs process, it īpaši, ja to dara ar roku uz papīra lapas un ir nepieciešams ņemt vērā uzturvielu balansu, budžetu un katra cilvēka ēšanas paradumus. Reti kurš pieņem šādu izaicinājumu, lai gan sabalansēts un atbilstošs budžetam uzturs ir svarīgs ikvienam cilvēkam. Tapēc ir nepieciešams risinājums, kurš atvieglotu šo procesu un spētu apmierināt katra lietotāja ēšanas paradumus, īpatnības un prasības. ## Mērķis Izveidot digitālu risinājumu, kurš spētu minimizēt ēdiena izmaksas, ņemot vērā cilvēku individuālās vēlmes, nepieciešamo ikdienas uzņemto uzturvielu daudzumu, produktu izmaksas un citus speciālos nosacījumus, kurus norāda pats lietotājs. # **Līdzīgo risinājumu pārskats** Meklējot risinājumus dotajai problēmai, tika konstatēts, ka ir samērā grūti atrast risinājumu, kurš atbilstu visām problēmas nostādnē definētām prasībām. Atrasto risinājumu mērķis ir izveidot pilnvērtīgu ēdienkarti, ņemot vērā kaloriju patēriņu un uzturvielu balansu, bet budžets tajos netiek ņemts vērā kā faktors; tas liecina, ka mūsu uzstādītajai problēmai šie risinājumi nav pilnībā derīgi, toties tie bija pietuvinātākie no iespējamiem. Turklāt daļa no atrastajiem risinājumiem ietver sevī maksas pakalpojumus pilnajai funkcionalitātei, kas liecina par to nepieejamību visiem lietotājiem. ## Teorētiskais pamatojums ### Algoritmu veidi Tiešsaistē tika atrasti un izpētīti šādi raksti par izvēlēto problēmu: * [Lineārā programmēšana](https://towardsdatascience.com/linear-programming-and-discrete-optimization-with-python-using-pulp-449f3c5f6e99); * [Interfeiss *Python* programmēšanas valodā piekļūšanai pie *IBM ILOG CPLEX Optimization Studio* rīka](https://pypi.org/project/cplex); * [Interfeiss *Python* programmēšanas valodā piekļūšanai pie dažādiem ārējiem rīkiem-risinātājiem](https://coin-or.github.io/pulp/index.html); * [*Gurobi Optimizer* rīka izmantošana ar *Wolfram* valodas palīdzību](https://towardsdatascience.com/using-the-gurobi-optimizer-in-the-wolfram-language-939ce585ec64); * [Bibliotēka *Python* programmēšanas valodā lineārās programmēšanas problēmu risināšanai](https://cvxopt.org/userguide/index.html). ### Novērtēšanas kritēriji Lai turpmāk varētu salīdzināt risinājumus, tika izstrādāti šādi vērtēšanas kritēriji: 1. Vai risinājums ir mērķēts uz izdevumu mazināšanu; 2. Vai risinājumā ir iespēja pievienot sev patīkamus produktus (izveidot savu produktu sarakstu); 3. Vai risinājumā ir sniegts kāds sākotnējs produktu saraksts; 4. Vai risinājumā ir iespēja apskatīt piedāvātās ēdienkartes uzturvielu daudzumu; 5. Vai risinājums ņem vērā cilvēka individuālos parametrus; 6. Vai risinājumā ir iespēja atzīmēt sev nevēlamos produktus (zivs, medus, u.c.); 7. Cik liels ir uzturvielu sarakstu, ko risinājums ņem vērā, veidojot ēdienkarti; 8. Vai risinājumam ir patīkama un saprotama saskarne. ## Līdzīgie risinājumi Līdzīgo risinājumu apskatei tika izvēlētas šādas lietotnes un tiešsaistes risinājumi: * Lifesum (lietotne); * Mealime (lietotne); * FatSecret (lietotne); * MyNetDiary (lietotne); * Eat This Much (lietotne); * [Calorie calculator](https://www.calculator.net/calorie-calculator.html) (tiešsaistes risinājums); * [Diet Problem](https://www.zweigmedia.com/RealWorld/dietProblem/diet.html) (tiešsaistes risinājums); * [Diet Problem Solver](https://neos-guide.org/content/diet-problem-solver) (tiešsaistes risinājums). --- <p style="text-align: right;">1.1. tabula</p> <div style="text-align: center;"><b>Līdzīgo risinājumu novērtējums atbilstoši izvirzītajiem kritērijiem</b></div> Risinājums | Izdevumu mazināšana | Savu produktu pievienošana | Ir produktu saraksts | Produktu uzturvielu daudzums | Cilvēka parametri | Nevelāmo produktu saraksts | Ērta saskarne | Cik liels ir uzturvielu saraksts -|-|-|-|-|-|-|-|- Lifesum | - | - | + | + | + | - | + | 0.5<sup>*</sup> Mealime | - | + | + | + | - | + | + | 0.3<sup>*</sup> FatSecret | - | + | + | + | + | - | + | 0.9 MyNetDiary | - | + | + | + | + | - | - (grūti saprotama iesācējam) | 0.9 Eat This Much | +<sup>*</sup> | + | + | + | + | + | ± | 1 Calorie calculator | - |- | + | + | + | - | - | 0.1 Diet Problem | - | - | + | + | + | + | ± (diezgan novecojusi) | 0.2 Diet Problem Solver | - | - | + | + | - | + | - (rezultāts tiek izvadīts uznirstošā logā) | 0.3 \* &ndash; ir pieejams tikai tiem lietotājiem, kuriem ir *premium* abonēšana ![](https://i.imgur.com/sI2W4xU.jpg) <div style="text-align: center;">1.2. att. <b>Līdzīgo risinājumu vidējā atbilstība izvirzītajiem kritērijiem</b></div> ![](https://i.imgur.com/5v1OEq1.jpg) <div style="text-align: center;">1.3. att. <b>Uzturvielu saraksta izmēra relatīvais salīdzinājums dažādos risinājumos</b></div> # **Konceptu modelis** Tika izstrādāts risinājuma konceptuālais modelis, kas grafiski attēlo šādu risinājuma darbības shēmu: vispirms lietotājs apskata bāzes produktu sarakstu, tad, ja nepieciešams, atlasa nevajadzīgos produktus, kā arī pievieno savus produktus atbilstoši personiskajai gaumei. Katrs lietotājs izvēlas produktus no iepriekš izveidotā saraksta un ievada savas parametru vērtības: augums, svars, vecums, personīgās īpatnības u.tml., - kuras tiek ņemtas vērā dienas ēdienkartes izveidē. Izstrādāto konceptuālo modeli var apskatīt 2.1. attēlā. ![](https://i.imgur.com/v8A0zS1.jpg) <div style="text-align: center;">2.1. att. <b>Risinājuma konceptuālais modelis</b></div> ### Prasību dekompozīcija Pēc modeļa izveides tika nodefinētas šādas prasības topošajam risinājumam: * Virslietotājs var rediģēt sākotnēji pieejamo produktu sarakstu; * Lietotāji var reģistrēties pakalpojumam, pieteikties kontā, izrakstīties no konta; * Lietotāji var skatīt savu kontu, pēc vēlēšanās dzēst to, rediģēt tā datus (kontaktinformāciju, cilvēka ķermeņa parametrus); * Lietotāji var pievienot savus produktus, rediģēt to datus (uzturvērtības); * Lietotāji var skatīt un rediģēt iepriekš izveidotās dienas ēdienkartes. # **Tehnoloģiju steks** Paredzēts, ka risinājums tiks izveidots, izmantojot *Ruby on Rails* un *Python* (*psycopg* &ndash; draiveris darbam ar datu bazu vadības sistēmu, *CVXOPT* &ndash; bibliotēka lineārās programmēšanas problēmas risināšanai), savukārt kā datu bazu vadības sistēma tiks izmantota *PostgreSQL*. # **Prototipēšana** Pirmajos izstrādes soļos, apdomājot kā mūsu komanda vēlētos redzēt gala rezultātu, *Figma* rīkā tika izstrādāts mūsu lietojuma prototips, kuru ir iespējams apskatīt [pēc šīs saites](https://www.figma.com/file/aBive4eXn208deNT70dzOC/Untitled?node-id=0%3A1). # **Risinājuma izstrāde** Risinājuma izstrādes gaita un rezultāti skatāmi [šajā *GitHub* repozitorijā](https://github.com/DungeonMaster666/rails_rtu). Tajā ir redzamas pēdējās veiktās izmaiņas, kā arī šo izmaiņu raksturs un autori. Risinājums regulāri tiek papildināts ar jaunām opcijām, līdz ar ko funkcionalitāte tiek tikai vien paplašināta. # **Risinājuma novērtēšana** Risinājums novērtēts, balstoties uz ISO&nbsp;9126 standartā minētajiem novērtēšanas kritērijiem: * Funkcionalitāte; * Uzticamība; * Lietojamība; * Efektivitāte; * Uzturamība; * Pārnesamība. ## Eksperimenta plāns ### Eksperimenta mērķi * Noteikt, vai ēdienkartes izveidošanas laiks mainās atkarībā no ēdienkartē iekļaujamo produktu skaita un, ja mainās, tad kā; * Noteikt, vai parastajam lietotājam izstrādātais risinājums ir ērts un lietojams ikdienas dzīvē. ### Eksperimenta ieejas parametri * Ēdienkartē iekļaujamo produktu skaits (objektīvs parametrs); * Lietotāju sniegtie viedokļi (subjektīvs parametrs). ### Eksperimenta novērtēšanas mēri * Ēdienkartes izveidošanas laiks (milisekundēs); * Cik vizuāli labi pārskatāmi tika izvadīti produkti; * Cik kopumā risinājums ir ērts, pārskatāms un patīkami noformēts. ### Eksperimenta rezultāti Risinājuma novērtēšanas nolūkos tika aptaujāti vairāki lietotāji, kuri izmēģināja risinājumu darbībā un novērtēja to. Eksperimenta, kas ir saistīts ar objektīva parametra izmaiņu, rezultāti ir aplūkojami 5.1. tabulā, savukārt tāda eksperimenta, kas saistīts ar subjektīvu parametru izmaiņu, rezultāti ir aplūkojami 5.1. un 5.2. attēlos. <p style="text-align: right;">6.1. tabula</p> <div style="text-align: center;"><b>Risinājuma novērtēšana</b></div> Ēdienkartē iekļaujamo produktu skaits | Ēdienkartes izveidošanas laiks jeb *Python* optimizācijas skripta izpildes laiks, ms |-|-| |90|1660| |84 (pēc noklusējuma)|1830| |80|1230| |70|1280| |60|1060| |50|456.12<sup>*</sup>| \* &ndash; tika izvadīta tukša ēdienkarte ![](https://i.imgur.com/LrMRAGm.png) <div style="text-align: center;">5.1. att. <b>Novērtēšanas rezultāti, cik vizuāli labi pārskatāmi tika izvadīti produkti</b></div> ![](https://i.imgur.com/N67xFGG.png) <div style="text-align: center;">5.2. att. <b>Novērtēšanas rezultāti, cik kopumā risinājums ir ērts, pārskatāms un patīkami noformēts</b></div> ### Eksperimenta rezultātu analīze * Līdz ar iekļaujamo produktu skaita samazināšanos ēdienkartes izveidošanas laiks samazinās; * Veids, kādā tiek izvadīti produkti, tika vidēji novērtēts 7.1 ballēs, savukārt tas, cik kopumā risinājums ir ērts, pārskatāms un patīkami noformēts, &dash; 7 ballēs. # **Risinājuma izvietošana** Risinājums ir izvietots *Heroku* lietojumprogrammu mākoņplatformā. To ir iespējams aplūkot un izmēģināt tiešsaistē, izmantojot [šo saiti](https://cool-nutrition.herokuapp.com). # **Lietotāja ceļvedis** Šajā nodaļā ir pieejamas instrukcijas risinājuma aplūkošanai. ## Nepieteikušos lietotāju iespējas Lietotājiem, kas nav pieteikušies, ir pieejama reģistrācija, kuru var veikt, izmantojot savu e-pasta adresi un paroli, kā arī galvene jeb sākumlapa, kurā ir iespējams apskatīt risinājumā sākotnēji pieejamo produktu jeb bāzes produktu sarakstu. ![](https://i.imgur.com/8PO7qqO.jpg) <div style="text-align: center;">7.1.1. att. <b>Nepieteikušos lietotāju iespējas</b></div> ## Jauna lietotāja pieteikšanās Uzreiz pēc reģistrācijas lietotājs nonāk lapā, kur viņam ir jāievada informācija par sevi: svars, augums, vecums, dzimums, dzīvesveids un vietnes lietošanas mērķis, turklāt pēdējo divu parametru gadījumā ir jāizvēlas visatbilstošākā vērtība no pieejamajām iespējām. Visa iegūtā informācija tiek lietota, lai izveidotu pēc iespējas konkrētam lietotājam atbilstošāku dienas ēdienkarti. Pēc informācijas ievadīšanas jauns lietotājs nonāk galvenē, kurā ir iespējams rediģēt sniegto informāciju par sevi, veikt vairākas darbības ar produktiem, kā arī izveidot un apskatīt ēdienkarti. ![](https://i.imgur.com/Ts3d5My.jpg) <div style="text-align: center;">7.2.1. att. <b>Jauna lietotāja pieteikšanās</b></div> ## Profila rediģēšana Nospiežot uz sava e-pasta uzraksta, atvēras izvēlne, kurā, nospiežot pogu *Rediģēt profilu*, var pāriet uz profila rediģēšanas lapu. Šajā lapā ir iespējams izdzēst profilu, kā arī nomainīt paroli. Pēdējā darbība ir jāapstiprina, ierakstot uz šo brīdi esošo paroli. ![](https://i.imgur.com/lRnj6Bu.png) <div style="text-align: center;">7.3.1. att. <b>Profila iestatījumu rediģēšana</b></div> ## Darbības ar produktiem ### Produkta izslēgšana Nevēlamo produktu saraksts ir nepieciešams, lai lietotājs spētu iepriekš izslēgt kādu produktu no turpmāk veidojamās ēdienkartes. Kad kāds produkts tiek pievienots šajā sarakstā, ēdienkartes izveides procesā visi produkti no šī saraksta netiek ņemti vērā un nebūs iekļauti izveidotajā ēdienkartē. Nospiežot uz pogas *Nevēlamie produkti*, lietotājam tiek parādīts viņa paša izveidotais nevēlamo produktu saraksts. Šajā paša lapā ir iespēja atrast nevēlamo produktu no piedāvāto produktu saraksta un uzreiz pievienot to nevēlamo produktu sarakstam. Kā arī ir iespēja pašam ierakstīt produkta nosaukumu, kurš tiks pievienots nevēlamo produktu sarakstam. Šī opcija ir domāta gadījumiem, kad lietotājs ir pievienojis produktu patstāvīgi, bet konkrētās dienas ēdienkartē nevēlas to iekļaut. ![](https://i.imgur.com/fF9NYiq.jpg) <div style="text-align: center;">7.4.1.1. att. <b>Nevēlamo produktu saraksta rediģēšana</b></div> ### Produkta pievienošana un rediģēšana Pārejot uz produktu pievienošanas un rediģēšanas lapu, lietotājam ir redzami produkti, kuri tiks ņemti vērā ēdienkartes izveides procesā. Šajā lapā ir iespējams dzēst pievienotos produktus un rediģēt to uzturvērtības, kā arī pāriet uz jauna produkta pievienošanas lapu. ![](https://i.imgur.com/LEkwvej.png) <div style="text-align: center;">7.4.1.2. att. <b>Produktu saraksta rediģēšana</b></div> ### Jauna produkta pievienošana Kā redzams, produktu pievienošanas un rediģēšanas lapā atrodas arī poga *Pievienot savu produktu*, kuru nospiežot, lietotājs pāriet uz jauna produkta pievienošanas lapu. Tajā ir jānorāda pievienojamā produkta nosaukums, produkta uzturvielu daudzumus uz 100 gramiem, produkta cenu par 100 gramiem, kā arī produkta minimālo un maksimālo daudzumu ēdienkartē, turklāt minimālā un maksimālā vērtība ir jānorāda veselos gramos. Kad visi lauki ir aizpildīti, ir jānospiež poga *Pievienot*, un produkts tiks pievienots sarakstam. ![](https://i.imgur.com/hNTfO57.jpg) <div style="text-align: center;">7.4.1.3. att. <b>Jauna produkta pievienošana</b></div> ### Produkta uzturvērtību rediģēšana Lietotāja pievienotie produkti tiek rediģēti, pievienoto produktu sarakstā nospiežot uz pogu *Rediģēt* pretī tam produktam, kura uzturvērtības ir jārediģē. Lai labotu "iebūvēto" produktu, tad vispirms no produktu saraksta jāizvēlas šāds produkts un jāpievieno produktu sarakstam. Kad produkts atradīsies produktu sarakstā, tad lietotājs spēs to rediģēt. Rediģēt ir iespējams visu informāciju par produktu, izņemot nosaukumu. Lai izmainītu to, ir jānodzēš produkts no produktu saraksta un jāpievieno jauns. "Iebūvēto" produktu nosaukumus izmainīt tāpat nav iespējams. ![](https://i.imgur.com/tfqjw9A.jpg) <div style="text-align: center;">7.4.1.4. att. <b>Pievienojamā produkta uzturvērtību iestatīšana</b></div> ## Ēdienkartes izveide un pārskatīšana Ēdienkarti var izveidot no profila galvenās lapas, nospiežot pogu *Izveidot un apskatīt ēdienkarti*. Uzreiz pēc pogas nospiešanas tiek izveidota ēdienkarte, ņemot vērā visus vēlamos un nevēlamos produktus, kā arī lietotāja sniegto informāciju par sevi. Ēdienkarte izskatās kā tabula ar 2 kolonnām: produkta nosaukuma un šī produkta daudzuma gramos, cik ir nepieciešams apēst dienas laikā. Ja lietotājs nav apmierināts ar kāda produkta piedāvāto daudzumu ēdienkartē, tad viņš var izmainīt šī produkta minimālo vai maksimālo vērtību pēc savas gaumes un pēc tam atkārtoti izveidot ēdienkarti pēc iepriekš minētajiem soļiem. ![](https://i.imgur.com/wBr3t1u.jpg) <div style="text-align: center;">7.5.1. att. <b>Izveidotās ēdienkartes pārskatīšana</b></div> ## Ēdienkartē iekļautā produkta sīkāka pārskatīšana Kā redzams, izveidotajā ēdienkartē katrā rindā atrodas poga *Apskatīt*, uz kuru nospiežot, ir iespējams ne tikai vēlreiz apskatīt konkrētā produkta nepieciešamo daudzumu, bet arī rekomendāciju no *Barbora* tiešsaistes veikala &dash; konkrētā produkta piemēru un tā cenu. Nospiežot pogu *Pirkt*, var pāriet uz attēlotā produkta lapu *Barbora* tiešsaistes veikalā. ![](https://i.imgur.com/7XSpTnq.png) <div style="text-align: center;">7.6.1. att. <b>Ēdienkartē iekļautā produkta sīkāka pārskatīšana</b></div> ## Izrakstīšanās Lai izrakstītos no sistēmas, izvēlnē, kura atvēras, uzspiežot uz e-pasta uzraksta, ir jānospiež poga *Iziet*. Lai pierakstītos sistēmai atkārtoti, ir jāievada savs e-pasts un parole. ![](https://i.imgur.com/rskuBbr.jpg) <div style="text-align: center;">7.7.1. att. <b>Izrakstīšanās no sistēmas</b></div> # **Risinājuma pabeigšana** ## Prezentācijas plakāts Izstrādāto prezentācijas plakātu var apskatīt *Miro* vietnē pēc [šīs saites](https://miro.com/app/board/uXjVOYXIU_4=/?moveToWidget=3458764516177263306&cot=14), kā arī 8.1. attēlā. ![](https://i.imgur.com/c97il1s.jpg) <div style="text-align: center;">8.1. att. <b>Prezentācijas plakāts</b></div> ## Prezentācija Pirmdien, 2022.&nbsp;gada 10.&nbsp;janvārī, studiju kursa "Projektēšanas laboratorija" lekciju laikā komandas kanālā *Microsoft Teams* platformā tika rādīta risinājuma prezentācija, kurā tika pastāstīts par risinājuma izstrādes procesu, izstrādē sastaptajiem šķēršļiem, risinājuma funkcionalitātēm un darba secinājumiem. # **Secinājumi** Risinājuma izstrāde ir ļoti ilgs un sarežģīts process. Lai tikt no pirmām idejām līdz taustāmam rezultātam ir jāiegulda smags un laikietilpīgs darbs. Izstrādes laikā nācās saskarties ar vairākiem izaicinājumiem, bet neviens no tiem neizrādījās nepārvarāms. Mēs sapratām ka pirms, veidot risinājumu kādai problēmai, ir maksimāli jāiedziļinās tās būtībā un jāizanalizē tā no visiem iespējamiem skatapunktiem.

    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