PlicTalk

Personal Local Image Collection Talk

[ Printer-friendly ]
[ PlicTalk Language ]
[ DropTagger ]

PlicTalk is short for Personal Local Image Collection Talk. PlicTalk features an innovative 3-pronged approach to delivering web content, including image collections hosted by Dropbox, static web pages coded in BraceyTalk (a simplified version of HTML), and dynamic web pages coded in BraceyTalk and PlicTalk (a dialect of Python with Lisp-like syntax). The code handling the image collections is written in Python and uses Flask. The code handling static/dynamic web pages is written in JavaScript and uses Node. Throughout this website, the PLIC acronym refers to the image collections of PlicTalk users. Both BraceyTalk and PlicTalk languages are implemented as open source projects.

Business Model

All web content is classified as either for private or public consumption. Private web content can only be viewed by the author and those included in the author's circles (a circle is a group of "friends", or followers of a given author). Public web content can be viewed by anyone. Only subscribers, who pay a subscription fee of $10 per year, are allowed to generate public web content. Subscribers who are power users pay a certain amount for every new-node event and megabyte of disk space which exceeds the respective quotas (event counts and disk space). All PlicTalk code resides in RAM-based nodes, and each node consists of approximately 16 bytes of memory.

PLIC Modes

  • Folder - Display full path to current folder at top of screen, and list of sub-folders below that
  • Super-grid - Display grid of first image in each sub-folder (folder name ends with underscore)
  • Grid - Display grid of thumbnail images
  • Mono - Display single image
  • Slide - Display zero or more images, side-by-side
  • Split-screen:
    • Upper half - Display current image
    • Lower half - Display zero or more images in current slide, side-by-side
    • DocSlide Mode - Cells in slide can be merged/split, horizontally or vertically

PLIC Commands

  • Right arrow/swipe:
    • Folder - Next
    • Grid - Next Grid Page
    • Mono - Next Image or First Slide
    • Slide - Next Slide or First Image
    • Split-screen:
      • Upper - Next Image
      • Lower - Next Slide
  • Left arrow/swipe:
    • Folder - Previous
    • Grid - Previous Grid Page
    • Mono - Previous Image or Last Slide
    • Slide - Previous Slide or Last Image
    • Split-screen:
      • Upper - Previous Image
      • Lower - Previous Slide
  • Enter, Down swipe:
    • Folder - Grid/sub-folder
    • Super-grid - no action
    • Grid - Mono
    • Mono, Slide - Split-screen
    • Split-screen - Toggle Upper/Lower (Upper is default)
  • Up arrow/swipe:
    • Folder, Grid - Parent
    • Mono, Slide - Grid
    • Split-screen - Mono
  • Click:
    • Grid - Mono/sub-grid
    • Mono - Edit tags/filename
    • Slide - Mono
    • Split-screen:
      • Upper - Insert
      • Lower - Select
      • Lower - Delete (already selected)
      • DocSlide Mode:
        • Forward Slash - Split cell horizontally
        • Backward Slash - Split cell vertically
        • Hyphen - Merge cells
        • Delete - Delete cell
    • Origin (near upper left corner):
      • Mono, Slide - First Image/Slide
    • Caption area (near bottom of image):
      • Toggle - Display caption on/off
      • Slide (multiple cells):
        • Off - Display caption
        • On - Display all captions (some are off)
        • On - Hide all captions (all are on)
  • Search:
    • Folder - Perform Search

PLIC File Format

  • File name: plic.json
  • Location: every folder in the image tree (root folder name = plicroot)
  • Special props: caption, firstname, lastname
  • Special tags:
    • nsfw - Any file/folder with this tag is hidden publicly, by default
    • priv - Not for public consumption
  • Sample contents:
    {files: [
        {
            filename: "myimage.jpg" / "myfolder",
            props: [ "fldname1", "val1", "fldname2", "val2", ... ],
            tags: [ "tag1", "tag2", ... ]
        } ...
    ],
    slides: [
        [0, 5, 18],
        [6, 7],
        ...
    ],
    cells: [  DocSlide: enable nested cells
        { width: 100, height: 60, image: "", cells: [3, 6, 12] },
        { width: 40, height: 25, image: "myimage.jpg", cells: [] },
        ...
    ]}

BraceyTalk Format

  • Heading:   ==, ===, ...
  • Bold/Italics/both:   '', ''', ''''
  • Numbered List:   #, ##, ...
  • Bulleted List:   *, **, ...
  • Container Tag:   { ... | ... }
  • Table/Grid/Tag:   { ... }
  • Open Row:
    • { row
    • { row fld=val
  • Close Row:   }
  • Open Column:
    • ||
    • | fld=val |
    • | f1=v1;f2=v2;... |
  • Vert. Grid Line:   \|
  • Horiz. Grid Line:   underscore (_)
  • Grid Intersection:   plus (+)
  • Escape Char.:   backslash (\)
  • PlicTalk Code:   {% ... %}
  • PlicTalk Expr.:   {{ ... }}
  • Tags:
    • table, row, grid
    • dtab ( use <div> for table )
    • super, sub, text, pre, br, hr, img, a, ch
    • input, radio, checkbox
    • styles, include, h1..h5, b, i, u, ol, ul, meta
  • Fields:
    • width=50/0.5 (pixels/ratio)
    • pad=50/0.5
    • x, y = 50/0.5
    • height = n (pixels)
    • topb=1 (pixels)
    • bottomb, leftb, rightb, midb = 1
    • color=FF00FF (rgb)
    • fcolor=00FF00 (text)
    • bcolor=000000 (borders)
    • colspan, rowspan = n
    • just="L/C/R"
    • b, i, u (bold, italics, underline)
    • same (same as previous)
    • vis (visible)
    • coldefs
    • rows, cols = n (grid size)
    • id="mynode", id="mytag"

PlicTalk Language

PlicTalk is a statically typed Python work-alike (with some features of Java), but has Lisp-like syntax. All program code in memory is stored in 12- to 20-byte nodes (3 fields: numeric header, optional numeric/string/object, next object). Integer part of header between 0 and 65,535. Optional fractional part extracted by multiplying it by 4.3 billion, or 65,536 squared. BraceyTalk includes tags enclosed in brace brackets. The tag name (and any optional arguments) is terminated by an optional vertical bar ( | ) followed by body text. Some tags include multiple blocks of body text separated with vertical bars (the left vertical bar of each block is preceded by another vertical bar followed by optional arguments). PlicTalk is used for both client-side and server-side code (client-side code is converted to JavaScript at compile time, and BraceyTalk is converted to HTML at run time).

About Me

I am Mike Hahn, the founder of PlicTalk.com. On August 9, 2014 I began working on Basyx.org (a tutoring website). I started developing Lyvathon.org (a new programming language) on January 4, 2015, after dabbling in its precursors (sporadically) since the mid 90s. On January 24, 2015 I resumed working on Basyx.org, and resumed working on Lyvathon on May 9, 2015. I started designing Lyspio.com (the master website of all Lyvathon apps) on November 16, 2015. I began working on Lyspio in its current incarnation on December 15, 2015, and started PlicTalk on January 13, 2016.

I was previously employed at Brooklyn Computer Systems as a Delphi Programmer and a Technical Writer (I worked there between 1996 and 2013). Just prior to starting Lyvathon I quit my job as a volunteer tutor at Fred Victor on Tuesday afternoons, where for 5 years I taught math, computers, and literacy. I'm now a volunteer computer tutor at West Neighbourhood House. My hobbies are reading the news at cbc.ca and going for walks in my neighbourhood. About twice a year I get together with my sister who lives in Victoria. She comes here or I go out there usually in the summer. At those times I'm much more active, but most of the year I tend to lie on the couch a lot, and not be very active. I do, however, visit my brother once a month or so and listen to or visit my disabled friend (she has schizophrenia and talks to me on the phone).

Contact Info

Mike Hahn
Founder
PlicTalk.com
2495 Dundas St. West
Ste. 515
Toronto, ON  M6P 1X4
Canada

Phone: 416-533-4417
Email: hahnbytes (AT) gmail (DOT) com
Blog: lyvathon.blogspot.ca

[ Back to Top ]