Filsystems interface til blog

Tags:    nfs filsystem

Hej Udviklere,

Jeg har for nyligt skitseret en idé der går ud på at lave et interface til en blog i form af en mappe på administratorens maskine. Indholdet skal være formateret som markdown, og derfor det ville være lækkert at kunne sidde med en almindelig markdown editor. Der er selvfølgeligt nogen problemer i forhold til meta-data, men lad det ligge for nu.

Jeg har to grove idéer til hvordan det kunne implementeres:

Løsning 1) Den komplicerede og elegante:
En NFS(1)-implementation, som har adgang til en SQL database som indeholder markdown-indholdet, og som serverer dem som et netværksdrev med markdown-filer i. Fordelen er at den ville kunne mountes på min OSX maskine, og give fornemmelsen af at sidde med deciderede filer, som direkte repræsenterede indholdet på hjemmesiden. Men det er samtidigt også et ret omfattende projekt...

Løsning 2) Den mindre komplicerede og mindre elegante:
En løsning byggende på rsync(2). Rsync står for remote sync og kan synkronisere to mapper på to forskellige maskiner. Vha FSEvents(3) kunne en lille app på desktop maskinen overvåge mappen med indhold, og på fil ændringer køre rsync. På serveren kunne man evt have en inotify-baseret app der overvågede modtage mappen, og som smed filerne i en database. Alternativt kunne man bruge markdown-filerne til at servere indholdet fra og ikke bruge databasen.


Jeg havde egentlig forventet at der var en opensource løsning der kunne klare det for mig, men jeg har ikke kunnet finde noget. Hvis i kender til nogen løsninger, så giv lyd!

Ellers ville jeg bare gerne høre hvad i mener og have lidt generel feedback på idéen...

(1) NFS: Network File System - http://en.wikipedia.org/wiki/Network_File_System
(2) rsync: http://en.wikipedia.org/wiki/Rsync
(3) FSEvents http://en.wikipedia.org/wiki/FSEvents
(4) inotify: http://en.wikipedia.org/wiki/Inotify



7 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 13 karma
Sorter efter stemmer Sorter efter dato
Umiddelbart virker et system der opdaterede din blog, så snart du ændrer i en fil lidt for aggressivt efter min smag. Det ville betyde at du ikke kunne forlade den halvt færdige fil, uden at den ville blive opdateret?
På samme måde mangler du "author" og "tags" i POSIX filsystemet, jeg ved at det ikke er et krav og jeg ved også at author på sin måde er understøttet i ejerskab o.lign. men det bliver en smule for statisk på den måde.

Git understøtter diverse hooks der ville kunne gøre server og klient flowet en del lettere og umiddelbart ville jeg synes at det er den rette vej at gå. Hvilke fordele synes du selv en NFS implementering og en Node.js server ville have over for en genereret statisk blog side?



Ah, ægte minimalist stil - lækkert!

Der findes skam mange lignende projekter, men som regel med et git repositoire som grund. Jeg synes personligt at en git (eller andet rev. system) baseret løsning er at foretrække da den er mobil, simpel og ikke mindst versions-styret!

Ang. metadata bruger de implementeringer af et lignende system jeg har set ofte YAML og nogle få bruger JSON indlejret i filen.

Jeg kommer umiddelbart i tanke om:
https://github.com/mojombo/jekyll - Jekyll (Ruby)
og https://github.com/cloudhead/toto - Toto (Rack)

Men der findes flere som jeg ikke lige kan huske navnet på.



Cool nok, jamen hvis du lave et system som ikke bruger git (forståeligt nok), så synes jeg at din idé med at have en node.js server kørene, som modtager og parser filerne for metadata og dernæst gemmer dem, som et spændende projekt. Din klient kunne du lave til en NPM pakke (også serveren for den sags skyld), og installere den med -g (global) flag og derefter have adgang til din klient i hele dit lokale filsystem. Det lyder som et udmærket projekt at bruge sin fritid på.. :)



Indlæg senest redigeret d. 29.02.2012 22:30 af Bruger #11328
At lave det med versionsstyring er jo en tredje løsning. Evt paret med FSEvents med git commit -a -m "blabla". Det virker noget simplere. Jeg vil helst ende med en løsning som ikke kræver andet end at jeg ændrer i filerne før de går live - derfor tænkte jeg uden om versionstyring og fit i første omgang. Drømmen er jo et NFS som interface til en database implementeret i Node.js - meeen - det er måske lidt meget at lægge i et hobby projekt.

Forslag til meta-data er cool. Både YAML og JSON er solide værktøjer. Men jeg har faktisk en anden idé.

Titlen på filen, kunne indeholde titlen på dokumentet.

Filer på posix systemer har allerede metadata om sidste ændring af filen (mtime/ctime) som nemt kan tilgås (fx filemtime() i php) - der mangler bare en måde at finde oprettelses dato, og så er der faktisk al den meta info jeg har brug for...

Men oprettelses dato er ikke standard i posix - OSX tracker det, FreeBSD 5.0 gør også - men min vps kører debian, og der gør den vidst ikke. I hvert fald ikke som default... Nogen idéer?

Edit: Den nemme løsning er at lægge creation date i fil navnet. Så syntaxen er noget lig dato i unixtimestamp - titel.md Men det er jo ikke elegant og automatisk. Det kunne lægges ind i FSEventet som skulle committe og pushe ændringerne - så det tjekkede for filer der ikke startede med unixtimestamp og tilføjede et.

Edit 2: Man kunne også bare droppe det med automatisk synkronisering. Og det åbner jo for at man bare bruger git. Men det er for nemt. Så endnu et alternativ, for at gøre det endnu mere mobilt: En app som tjekker indholdet af mappen, og sender filer, som ikke allerede er sendt, til serveren. På serversiden skal der så være en lille catch-app, som lægger filerne i en database eller noget lignende. Evt kan man så kopiere git og give hver fil 2 hashs, et hash for selve filen, og det hash filen havde før sidste ændring... Så er man ikke engang afhængig af at have shell adgang til serveren :-)



Indlæg senest redigeret d. 29.02.2012 22:15 af Bruger #17015
I virkelighedens verden, så er jeg helt enig med dig. Men som jeg skrev i den sidste edit (som du nok ikke nåede at se) så er git næsten lidt for nemt. Netop pga hooks osv.

Fordelen ved et hjemmehacket node.js NFS er nul. Men det kunne være spas :-) I første omgang er det her primært et underholdningsprojekt - så det behøves ikke være det rationelt rigtige.

Du har dog en god pointe i at det ikke nødvendigvis er hensigtsmæssigt at alle saves bliver pushet direkte til serveren. Og meta data som author og tags- og ikke mindst et draft-flag er kæmpe mangler i mit originale forslag.

Den rigtige måde at gøre det på er git. Og evt med et git-push-til-ftp plugin. :-)



Tak for bidrag til brainstormen :-) Og andre bidrag er selvfølgeligt stadig velkommne!

Hvis jeg vælger at realisere dette projekt, så bliver det nok i form af et lille python-push script og i første omgang en php-catch på serveren. Grunden til at jeg ikke vælger node.js er at man som regel har shell adgang og derved adgang til at bruge git, når man kan køre node.



Indlæg senest redigeret d. 29.02.2012 23:33 af Bruger #17015
Det lyder sku som et meget spændende projekt du har gang i gustav. Jeg har set lignende implementeringer udført ved hjælp af Dropbox. http://droppages.com/ er et eksempel som minder meget om det du vil lave, men selvfølgelig lavet igennem Dropbox.

Jeg er selv gået igang med, at kigge lidt på Node.js. Jeg har fremskaffet en bog. Og umiddelbart lyder det utroligt spændende, er sku fedt nok, at kunne kode samme sprog serverside og frontend.



t