pollen performance and folders #34

Open
opened 4 years ago by jestarray · 12 comments
jestarray commented 4 years ago (Migrated from github.com)

Coming from little experience with web dev, pollen is great!
I have a few questions:
1: What is causing pollen take some time to generate pages since js based tools do it instantaneously?
2: I'd like to separate my pages into folders but I'm not sure how to write a directory down in the .ptree which is located at the root. Does every folder need it's own .ptree file?

Coming from little experience with web dev, pollen is great! I have a few questions: 1: What is causing pollen take some time to generate pages since js based tools do it instantaneously? 2: I'd like to separate my pages into folders but I'm not sure how to write a directory down in the .ptree which is located at the root. Does every folder need it's own .ptree file?
mbutterick commented 4 years ago (Migrated from github.com)
  1. A comparatively more gluttonous (but also more powerful) evaluation model.

  2. Subfolders can have their own pagetree files, but they’re not required. I suggest you work backward from how you want to build your project, and let that dictate where the pagetree files are. For instance, for Beautiful Racket, I have one pagetree at the top, but it dynamically collects pages from subdirectories too. (And it can do this because a pagetree source is a self-contained program, etc.)

1. A comparatively more gluttonous (but also more powerful) evaluation model. 2. Subfolders can have their own pagetree files, but they’re not required. I suggest you work backward from how you want to build your project, and let that dictate where the pagetree files are. For instance, for *Beautiful Racket*, I have one pagetree at the top, but it dynamically collects pages from subdirectories too. (And it can do this because a pagetree source is a self-contained program, etc.)
jestarray commented 4 years ago (Migrated from github.com)

ahh. wait, so how would I grab the file of a subdirectory?

#lang pollen
--
 
burial.html
chess.html
sermon.html
./Chapter_1/Part1.html //relative and absolute paths don't work.

edit: ohh wait.. so I have to use (string->path) ?
EDIT2: i dont know why i didnt seek to look in the module reference documentation lol. reading it now

ahh. wait, so how would I grab the file of a subdirectory? ``` #lang pollen --   burial.html chess.html sermon.html ./Chapter_1/Part1.html //relative and absolute paths don't work. ``` edit: ohh wait.. so I have to use (string->path) ? EDIT2: i dont know why i didnt seek to look in the module reference documentation lol. reading it now
mbutterick commented 4 years ago (Migrated from github.com)

See Nesting pagetrees for one approach.

See [Nesting pagetrees](https://docs.racket-lang.org/pollen/Pagetree.html?q=nesting%20pagetree#%28part._.Nesting_pagetrees%29) for one approach.
jestarray commented 4 years ago (Migrated from github.com)

@mbutterick so how would i generate a table of contents? i'm unsure how to import index.ptree

@mbutterick so how would i generate a table of contents? i'm unsure how to import index.ptree
mbutterick commented 4 years ago (Migrated from github.com)

If you want to import ALL the data, you can just (require "index.ptree") into the table of contents page. Every .ptree file, including index.ptree, exports a doc variable with the pagenodes in it.

You can also selectively call pagetree helper functions like children and pass index.ptree as the pagetree source.

If you want to import ALL the data, you can just `(require "index.ptree")` into the table of contents page. Every `.ptree` file, including `index.ptree`, exports a `doc` variable with the pagenodes in it. You can also selectively call pagetree helper functions like `children` and pass `index.ptree` as the pagetree source.
jestarray commented 4 years ago (Migrated from github.com)

Got it! One more question(sorry, a little new to racket), how do I flatten out a nested list?

'((ul
   (li (a ((href "00-Intro/00-Overview.html")) "00-Intro/00-Overview.html"))
   (li (a ((href "00-Intro/01-Language.html")) "00-Intro/01-Language.html"))
   (li (a ((href "00-Intro/02-Boolean_Logic.html")) "00-Intro/02-Boolean_Logic.html"))
   (li (a ((href "00-Intro/03-Optimization.html")) "00-Intro/03-Optimization.html"))
   (li (a ((href "00-Intro/04-NAND_HDL.html")) "00-Intro/04-NAND_HDL.html"))
   (li (a ((href "00-Intro/05-Multibit_buses.html")) "00-Intro/05-Multibit_buses.html")))
  (ul
   (li (a ((href "01-ALU/01-BinaryNumbers.html")) "01-ALU/01-BinaryNumbers.html"))
   (li (a ((href "01-ALU/02-BinaryAddition.html")) "01-ALU/02-BinaryAddition.html"))
   (li (a ((href "01-ALU/03-ALU.html")) "01-ALU/03-ALU.html"))))

I've been doing (car l) and (car (cdr l)) and this isn't going to scale well..

Got it! One more question(sorry, a little new to racket), how do I flatten out a nested list? ``` '((ul (li (a ((href "00-Intro/00-Overview.html")) "00-Intro/00-Overview.html")) (li (a ((href "00-Intro/01-Language.html")) "00-Intro/01-Language.html")) (li (a ((href "00-Intro/02-Boolean_Logic.html")) "00-Intro/02-Boolean_Logic.html")) (li (a ((href "00-Intro/03-Optimization.html")) "00-Intro/03-Optimization.html")) (li (a ((href "00-Intro/04-NAND_HDL.html")) "00-Intro/04-NAND_HDL.html")) (li (a ((href "00-Intro/05-Multibit_buses.html")) "00-Intro/05-Multibit_buses.html"))) (ul (li (a ((href "01-ALU/01-BinaryNumbers.html")) "01-ALU/01-BinaryNumbers.html")) (li (a ((href "01-ALU/02-BinaryAddition.html")) "01-ALU/02-BinaryAddition.html")) (li (a ((href "01-ALU/03-ALU.html")) "01-ALU/03-ALU.html")))) ``` I've been doing `(car l)` and `(car (cdr l))` and this isn't going to scale well..
MichaelMMacLeod commented 4 years ago (Migrated from github.com)

match from racket/match is a good tool for this:

(match '((a b) (c d) (e f))
  [(list (list first second) ...)
   second])
; ==> '(b d f)

See the docs on match
https://docs.racket-lang.org/reference/match.html?q=match#%28form._%28%28lib._racket%2Fmatch..rkt%29._match%29%29
for more information

There's also flatten from racket/list
https://docs.racket-lang.org/reference/pairs.html?q=flatten#%28def._%28%28lib._racket%2Flist..rkt%29._flatten%29%29,
but match would probably work better for you here.

On Wed, Apr 15, 2020 at 7:22 PM jestarray notifications@github.com wrote:

Got it! One more question(sorry, a little new to racket), how do I flatten
out a nested list?

'((ul
(li (a ((href "00-Intro/00-Overview.html")) "00-Intro/00-Overview.html"))
(li (a ((href "00-Intro/01-Language.html")) "00-Intro/01-Language.html"))
(li (a ((href "00-Intro/02-Boolean_Logic.html")) "00-Intro/02-Boolean_Logic.html"))
(li (a ((href "00-Intro/03-Optimization.html")) "00-Intro/03-Optimization.html"))
(li (a ((href "00-Intro/04-NAND_HDL.html")) "00-Intro/04-NAND_HDL.html"))
(li (a ((href "00-Intro/05-Multibit_buses.html")) "00-Intro/05-Multibit_buses.html")))
(ul
(li (a ((href "01-ALU/01-BinaryNumbers.html")) "01-ALU/01-BinaryNumbers.html"))
(li (a ((href "01-ALU/02-BinaryAddition.html")) "01-ALU/02-BinaryAddition.html"))
(li (a ((href "01-ALU/03-ALU.html")) "01-ALU/03-ALU.html"))))

I've been doing (car l) and (car (cdr l)) and this isn't going to scale
well..


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/mbutterick/pollen-users/issues/34#issuecomment-614376270,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AEIDEVDM2R4DENEW2MJUN23RMZTVRANCNFSM4K72IMUA
.

`match` from `racket/match` is a good tool for this: ``` (match '((a b) (c d) (e f)) [(list (list first second) ...) second]) ; ==> '(b d f) ``` See the docs on match <https://docs.racket-lang.org/reference/match.html?q=match#%28form._%28%28lib._racket%2Fmatch..rkt%29._match%29%29> for more information There's also `flatten` from `racket/list` <https://docs.racket-lang.org/reference/pairs.html?q=flatten#%28def._%28%28lib._racket%2Flist..rkt%29._flatten%29%29>, but `match` would probably work better for you here. On Wed, Apr 15, 2020 at 7:22 PM jestarray <notifications@github.com> wrote: > Got it! One more question(sorry, a little new to racket), how do I flatten > out a nested list? > > '((ul > (li (a ((href "00-Intro/00-Overview.html")) "00-Intro/00-Overview.html")) > (li (a ((href "00-Intro/01-Language.html")) "00-Intro/01-Language.html")) > (li (a ((href "00-Intro/02-Boolean_Logic.html")) "00-Intro/02-Boolean_Logic.html")) > (li (a ((href "00-Intro/03-Optimization.html")) "00-Intro/03-Optimization.html")) > (li (a ((href "00-Intro/04-NAND_HDL.html")) "00-Intro/04-NAND_HDL.html")) > (li (a ((href "00-Intro/05-Multibit_buses.html")) "00-Intro/05-Multibit_buses.html"))) > (ul > (li (a ((href "01-ALU/01-BinaryNumbers.html")) "01-ALU/01-BinaryNumbers.html")) > (li (a ((href "01-ALU/02-BinaryAddition.html")) "01-ALU/02-BinaryAddition.html")) > (li (a ((href "01-ALU/03-ALU.html")) "01-ALU/03-ALU.html")))) > > I've been doing (car l) and (car (cdr l)) and this isn't going to scale > well.. > > — > You are receiving this because you are subscribed to this thread. > Reply to this email directly, view it on GitHub > <https://github.com/mbutterick/pollen-users/issues/34#issuecomment-614376270>, > or unsubscribe > <https://github.com/notifications/unsubscribe-auth/AEIDEVDM2R4DENEW2MJUN23RMZTVRANCNFSM4K72IMUA> > . >
mbutterick commented 4 years ago (Migrated from github.com)

Also look at the functions in txexpr (included with Pollen) for when you’re dealing with X-expressions. For instance, if you wanted a flat list of the li elements from the above, you could do:

(append-map get-elements your-list)
Also look at the functions in [`txexpr`](https://docs.racket-lang.org/txexpr/index.html?q=txexpr) (included with Pollen) for when you’re dealing with X-expressions. For instance, if you wanted a flat list of the `li` elements from the above, you could do: ``` (append-map get-elements your-list) ```
jestarray commented 4 years ago (Migrated from github.com)

So every page I have has a <time>4/19/20</time> tag and I want to grab all of them and create a TOC with the dates next to the title of pages.

Doing (select 'time path) gives me:

make-directory: cannot make directory
  path: /usr/share/racket/pkgs/errortrace-lib/errortrace/compiled/drracket/
  system error: Permission denied; errno=13

Is this the correct way to grab dates from every page?

So every page I have has a `<time>4/19/20</time>` tag and I want to grab all of them and create a TOC with the dates next to the title of pages. Doing `(select 'time path)` gives me: ``` make-directory: cannot make directory path: /usr/share/racket/pkgs/errortrace-lib/errortrace/compiled/drracket/ system error: Permission denied; errno=13 ``` Is this the correct way to grab dates from every page?
mbutterick commented 4 years ago (Migrated from github.com)

That should work, though the error doesn’t make sense — it seems to be a file-permissions error triggered by something DrRacket is doing, not by Pollen per se. (Try running the same file from racket on the command line to see if the error is different.)

You can also store a time value in the metas table and extract it that way (could be faster in certain circumstances).

That should work, though the error doesn’t make sense — it seems to be a file-permissions error triggered by something DrRacket is doing, not by Pollen per se. (Try running the same file from `racket` on the command line to see if the error is different.) You can also store a time value in the `metas` table and extract it that way (could be faster in certain circumstances).
jestarray commented 4 years ago (Migrated from github.com)

Same error... I'm calling it correctly right? (select 'time 'chapter1/test.html) , I also tried: (select 'time (build-path (current-directory) "chapter1" "test.html")) ?
I do actually have write permissions on the drive.. (make-directory) works fine.

Same error... I'm calling it correctly right? `(select 'time 'chapter1/test.html)` , I also tried: `(select 'time (build-path (current-directory) "chapter1" "test.html"))` ? I do actually have write permissions on the drive.. (make-directory) works fine.
sorawee commented 4 years ago (Migrated from github.com)

I feel it's going to be a back and forth conversation with little information gain to help you debugging if we just keep doing this. Do you have a link to your project? Or can you provide us a minimal template file / pollen.rkt and the problematic source file?

I feel it's going to be a back and forth conversation with little information gain to help you debugging if we just keep doing this. Do you have a link to your project? Or can you provide us a minimal template file / `pollen.rkt` and the problematic source file?
This repo is archived. You cannot comment on issues.
No Milestone
No project
No Assignees
1 Participants
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: mbutterick/pollen-users#34
Loading…
There is no content yet.