Hi, I’m now using DT3 pro to manage a large conference. I have a database dedicated to this “program” and under it several groups, naming a presentation group, a visual materials group (subgroup including pictures, videos, documents, etc.), an online group (where I store collaborative bookmarks). Here is the structure:
Conference (Database)
Presentation
Dec 12th
Dec 13th
Dec 14th
Dec 15th
Materials
Videos
Pictures
LOGOs
Portraits
Documents
Of course, this is pretty simplified, I just want to know if you guys have further advice on my organization, especially on any additional feature I can leverage to simplify my management workflow.
Looks good. The good thing about DEVONthink is that the structure of Groups doesn’t really matter to DEVONthink very much. All down to what you, the user, sees as a structure that meets your view of how your work is structured. DEVONthink does not work like a paper filing cabinet, or macOS Finder, for that matter, where there must be a choice where the document is placed.
You can always change the structure when your needs or perceptions change.
At a very first glance the only thing I’d probably do if for no other reason than to simplify and to exploit a DEVONthink feature is have one Group for “Presentations” and make “Smart Groups” for the presentation dates based rules which look at meta data (or contents) of the presentations.
I know this is just a “turn of a phrase”, but I hope that DEVONthink is not “managing” your project. It’s storing documents related to your project, but there are so many other things involving a project to manage a large conference (after having been there done that with other large projects).
Note: In the second dialog you’ll have to set the end date to your desired end date plus one day.
-- Create custom date register (with time)
-- Date Format Patterns: https://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns
-- Examples:
-- "yyyy/yyyy-MM/yyyy-MM-dd" --> 2021/2021-03/2021-03-01
-- "'Random string' yyyy/'Test' yyyy-MM/yyyy-MM-dd" --> Random string 2021/Test 2021-03/2021-03-01
-- "yyyy/yyyy-MM/dd. MMMM yyyy" --> 2021/2021-03/01. März 2021
-- "yyyy/QQQ yyyy/yyyy-MM/yyyy-MM-dd" --> 2021/Q1 2021/2021-03/2021-03-01
-- "YYYY/'KW' ww YYYY/YYYY-MM-dd, E" --> 2021/KW 09 2021/2021-03-01, Mo.
-- "e EEEE/yyyy-MM/yyyy-MM-dd" --> 1 Montag/2021-03/2021-03-01
-- Note: If you use a slash "/" make sure to escape it "\\/"
use AppleScript version "2.4"
use framework "Foundation"
use scripting additions
property createGroups : true -- set to false while testing
property theDateFormat : "LLL d/LLL d - HH':'mm" --> Dez 5/Dez 5 - 01:00
property theMinutesToAdd : 60 -- 1 hour
set theCalendar to current application's NSCalendar's currentCalendar()
set theCalendarOptions to current application's NSCalendarMatchNextTime
set theDefaultStartDate to current application's NSDate's |date|()
set theDateComponents to current application's NSDateComponents's alloc()'s init()
set theDateComponents's |day| to 1
set theDateComponents's |month| to 1
set theDefaultEndDate to theCalendar's nextDateAfterDate:theDefaultStartDate matchingComponents:theDateComponents options:theCalendarOptions
set theDateFormatter to current application's NSDateFormatter's alloc()'s init()
set theDateFormatter's timeZone to (current application's NSTimeZone's timeZoneWithName:"GMT")
set theDateFormatter's dateFormat to "yyyy-MM-dd"
tell application id "DNtp"
try
if not (exists viewer window 1) then error "Please open a window"
activate
set theStartDate to missing value
repeat while theStartDate = missing value
set theStartDate to theDateFormatter's dateFromString:(display name editor "Create Register" info "Start Date:" default answer ¬
(theDateFormatter's stringFromDate:theDefaultStartDate) as string)
end repeat
set theEndDate to missing value
repeat while theEndDate = missing value
set theEndDate to theDateFormatter's dateFromString:(display name editor "Create Register" info "End Date:" default answer ¬
(theDateFormatter's stringFromDate:theDefaultEndDate) as string)
end repeat
on error error_message number error_number
if the error_number is not -128 then display alert "DEVONthink" message error_message as warning
return
end try
end tell
set theNSOrderedAscending to current application's NSOrderedAscending
if (theStartDate's compare:theEndDate) ≠ theNSOrderedAscending then set {theStartDate, theEndDate} to {theEndDate, theStartDate}
set theDateComponents's |month| to 0
set theDateFormatter's dateFormat to theDateFormat
set thisDate to theStartDate
set theDateStringArray to current application's NSMutableArray's arrayWithArray:{theDateFormatter's stringFromDate:theStartDate}
repeat
if theMinutesToAdd > 0 then
repeat
set theDateComponents's |day| to 0
set theDateComponents's minute to theMinutesToAdd
set thisDate to (theCalendar's dateByAddingComponents:theDateComponents toDate:thisDate options:theCalendarOptions)
if (theEndDate's compare:thisDate) ≠ theNSOrderedAscending then
(theDateStringArray's addObject:(theDateFormatter's stringFromDate:thisDate))
else
exit repeat
end if
end repeat
end if
set theDateComponents's |day| to 1
set theDateComponents's minute to 0
set thisDate to (theCalendar's dateByAddingComponents:theDateComponents toDate:thisDate options:theCalendarOptions)
if (theEndDate's compare:thisDate) ≠ theNSOrderedAscending then
(theDateStringArray's addObject:(theDateFormatter's stringFromDate:thisDate))
else
exit repeat
end if
end repeat
if createGroups = true then
script s
property theLocations : missing value
end script
set s's theLocations to theDateStringArray as list
tell application id "DNtp"
try
set theDatabase to current database
set theGroup to current group
if theGroup ≠ root of theDatabase then
set theGroupName to name of theGroup
if theGroupName contains "/" then set theGroupName to my escapeSlash(theGroupName)
set theGroupLocation to location of theGroup & theGroupName & "/"
else
set theGroupLocation to "/"
end if
set theContainerName to "Register"
if exists record at theGroupLocation & theContainerName in theDatabase then
set theDateFormatter's timeZone to current application's NSTimeZone's localTimeZone()
set theDateFormatter's dateFormat to "yyyy-MM-dd HH.mm.ss"
set theContainerName to theContainerName & space & ((theDateFormatter's stringFromDate:(current application's NSDate's |date|())) as string)
end if
show progress indicator "Creating Register... " steps (count (s's theLocations)) as string with cancel button
repeat with thisLocation in s's theLocations
step progress indicator thisLocation as string
create location theGroupLocation & theContainerName & "/" & thisLocation as string in theDatabase
end repeat
hide progress indicator
on error error_message number error_number
hide progress indicator
if the error_number is not -128 then display alert "DEVONthink" message error_message as warning
return
end try
end tell
else
set theDateStringList to theDateStringArray as list
return item 1 of theDateStringList
end if
on escapeSlash(theText)
set d to AppleScript's text item delimiters
set AppleScript's text item delimiters to "/"
set theTextItems to every text item of theText
set AppleScript's text item delimiters to "\\/"
set theText_escaped to theTextItems as string
set AppleScript's text item delimiters to d
return theText_escaped
end escapeSlash
My issue with the current management workflow is that I don’t know where to put those raw materials, especially those come with various naming conventions and delivered in a galaxy of file types.
I haven’t tried running a conference this way, but I quite often use DT to plan attendance and then take and organise notes during the conference itself, which presents some of the same challenges. Among features which could be useful:
Tags are particularly useful for creating a navigable document hierarchy independent of the hierarchy of Groups. You might find that tagging documents in your Materials group with dates and session timeslots is a good way to navigate materials by where they fit in the programme.
Replicants are a useful fallback solution when you have items which clearly need to be in more than one Group.
It can be really helpful to have either a Sheet or (my current preference) a Markdown table of the overall programme in a timetable grid, each cell of which can embed a link to a master document (e.g. in Markdown) collecting all the document links needed for that session with whatever additional notes you need. This could be a single document with links to different locations within it, or a separate document for each session; in the latter case, you can transclude them all in an overall host document to keep track of them.
But there are lots of ways to do this; the key thing is just to evolve a system and a workflow that you feel comfortable with, which may well include none of the above…
I find your suggestion strongly useful. Especially your advice on adding “date” tag to my conference files. I regret I don’t meet you before. In terms of the hierarchy, do you have any other suggestions, I don’t know if I’m over worrying, but I feel like my hierarchy is still kind of redundant.
Yea, my hunch is that you are over-worrying this and the hierarchy may be redundant. Or not. You can use tags. You can use groups. You can use smart groups that filter based on tags, meta-data, or content. You can use some or all. Try a few things and then see if you can extract back out from your document store what you need/want. If not, adjust.