SkillAgentSearch skills...

Somewhere

A tag based file management system. Archived as of 2022; Deprecated as of 2025-01-13 in favour of new design as part of Divooka Platform.

Install / Use

/learn @Charles-Zhang-Somewhere/Somewhere

README

(THIS PROJECT IS DEPRECATED, ALL DEVELOPMENT IN THIS GITHUB ORGANIZATION HAS CEASED; FUTURE UPDATES WILL BE PUBLISHED OFFICIALLY ON http://methodox.io/ or on my personal website: https://www.totalimagine.com/)

(This documentation is still work-in-progress)

YouTube Link

Notes

  • (Development, Proposal) Notice the whole concept will be re-developed in Qt for cross-platform support. As a redesign and in accordance with new KMD specification, we will drop support for unreasonable names, drop support for file meta, and maybe use simple (master) Path/Name based database scheme instead of using a real database. And there will be no need for a "repository". It's purely text-based, file-system based, name-based, convention-based non-intrusive minimal-application-specific data. ¶The whole abstraction should be re-designed and current Somewhere should go deprecated with Somewhere-CLI extracted as a standalone option.
  • (Todo, Urgent, Scenario) VLC can't even do something as simple as "rename" files. That's a bit ridiculous given its (underlying) tremendous power. Evidently Somewhere is a great interface to solve such lame problems.

Overview

Welcome to Somewhere, a simple program that enables you to tag your files in a designated "Home folder". it's my best wish that this tool can come handy to you!

Features

  1. (Code Design) Free, open source, dedicated (in terms of scope), cross-platform, SQLite based, almost 0 dependency (except SQLite, YAML, CSV, .Net Core Runtime and if Windows version is used, WPF, NTFSReader, Markdig.WPF and WindowsAPICodePack);
  2. (Implementation Design) Non-intrusive, File system friendly (existing FS based meta-layer), designed for custom files and decent interoperability with existing hierarchical structure;
  3. (Repository Design) Heavily documented including methodology;
  4. (Market Design) Cutting Edge technology, C#.Net Core/Standard based, last for another 100 years, will migrate to .Net Core 3.0 when it comes out;
  5. (UI Design) Dark mode, B/W color scheme, custom color scheme configuration (will be available in the future);
  6. Comments are files!
  7. Journals: Active version control! Not super optimized yet, but it works!
  8. Exhaustive Functional Units: import Tiddly Wiki json and CSV exports.
  9. (Concept Design) Item based, first-class tags, (custom, attemptive) theory backed;
    • Absolutely self contained;
    • Long and expressive item names as you like - even something like this (notice each line is real):
This is /my file/ in Somewhere so I should be able to do <anything> I want with it \including "!!!!????**********"
This is /my file/ in Somewhere so I should be able to do <anything> I want with it \including "!!!!????**********"
This is /my file/ in Somewhere so I should be able to do <anything> I want with it \including "!!!!????**********"
This is /my file/ in Somewhere so I should be able to do <anything> I want with it \including "!!!!????**********"
This is /my file/ in Somewhere so I should be able to do <anything> I want with it \including "!!!!????**********"
This is /my file/ in Somewhere so I should be able to do <anything> I want with it \including "!!!!????**********"
This is /my file/ in Somewhere so I should be able to do <anything> I want with it \including "!!!!????**********"
This is /my file/ in Somewhere so I should be able to do <anything> I want with it \including "!!!!????**********"
This is /my file/ in Somewhere so I should be able to do <anything> I want with it \including "!!!!????**********"
This is /my file/ in Somewhere so I should be able to do <anything> I want with it \including "!!!!????**********".txt

However, names like that is not really recommended - you should name your file whatever way you wish but keep it succinct and meaningful so you can easily find it.

Who should use it

(I will change the tone below when I get a chance, doesn't sound very cool)

This app is absolutely intended for personal use; By design it's not tested for inter-network usage, e.g. between enterprise shared drives. Sharing files on network drive might be OK but it's definitely not intended for multi-user simultaneously editing. The key use case is for heterogeneous file management - (which is defined as) the more diverse the files, the more specific the file, the better this system can work. If you have tens of thousands of photos for very specific circumstances then you are OK or even better just stick with regular folders, but if you have a few thousand pictures that you refer to regularly and each contains a very different subject (much like my own Pinterest boards - which is deficient despite the variety because Pinterest's board based management approach is absolutely arcane - but well it's functional because "there is no better (I.e. tag based) solutions yet" (for me)), then this system will be much more efficient. Besides, you can mix the two as mentioned below.

  1. Those who have been bothered by note and file organization
  2. Those who enjoy tags in other platforms
  3. Those who want to explore new ways to organize their documents
  4. Those who are really into extreme organization yet find a custom database too much for the purpose of daily uses
  5. Developers should all use this
  6. Serious everyone who have kept very diverse information on their computer and always had trouble retrieving and backup those data
  7. This is NOT for those who never bothered organizing files or giving proper names to files - unless they are seeking a change
  8. Those who do not trust cloud and specialize in local file management with sophisticated multi-disk backup plans

How to Install It

  1. Download the corresponding version of zip file for your computer and unzip it;
  2. Add application folder to environment PATH;
  3. Run somewhere or sw to see help;
  4. Have fun tagging!
  5. Optionally, if you are using Somewhere Desktop, you can set default program for openning Home.somewhere files as the SomewhereDesktop.exe
  6. For Somewhere Desktop, vc++2015 redistributable is also needed.

Optional Download: It's recommended for CLI to be used with Cmder (better for Unicode display, nicer colors and better overall experience); Notice Cmder is available on Windows only.

To get the latest nightly build for Win_x64 (which contains commits from all branches), use this link.

Treatments

An effective software is not just a tool, it's also a method. A good software should enable people to think differently.

(This section will be moved to Somewhere - A Concept Design article on my portfolio)

Definitions

  1. (Field Attribute) Name: an identifying string for a particular item.
  2. (Object) Item: Anything that contains information or data, this corresponds to a "File" entry in the File table, however in practice, and as in most operating system, "Files" can also denote "Folders", so "item" is used to avoid confusion.
    • Folders are names (path) with trailing seperator;
    • Files are just files;
    • Knowledge are notes doesn't have a name;
    • Notes have Contents
    • Bookmark are notes that contains an url address
  3. (Object) Physical Folder: a folder is a file.... and item...
  4. (Object) Virtual Note:
  5. (File Meta) Remark:
  6. (Object) Repository/Home: each Somewhere home is a repository, managed by SQLite database, contains all tagging information.

Terminology

  1. TBFS: Tab based file system
  2. SD: Stands for "Somewhere Desktop", it's a GUI interface Windows desktop window application, WPF based.
  3. SW: Stands for "Somewhere", Specifically refers to Someowhere's CLI interface application.
  4. SA: Stands for "Somewhere App" in general, mostly refers to the concept of Somewhere - I.e. tag based file management.

Concepts

  1. Strictly item based - not for managing tags (just like bookmark ninja). Operations are focused around specific items. All commands in generally universally apply to all those items.
  2. Tag with efficiency: tagging is only so useful when we spend less time organizing stuff and more easily receive stuff, when it's much faster to assign (as mentioned above) multiple tags than deciding which single folder to put something - a proper command line interface is one step, but it's subject to typos - an efficient GUI (like Bookmark Ninja) is thus especially important .
  3. Let me put it this way: there are at least N (N>3) ways to tag a file while there is only one way to put it under a folder - you can see the limit of traditional hierarchical based systems. This applies both in terms of organization and retrieval.
  4. Virtual file/note/resource: in the command only notes are supported. Files that exist directly (and only) in database are called "virtual files", in terms of the contents it contains - if it contains text file, it's "virtual note", otherwise for binary it's terms "virtual resource". Filenames are required to be unique among all managed files, no matter whether it's virtual or not. (idea) "Virtual file as resource".. bookmark ninja as notes, OneNote....Evernote...... (virtual note are those that content is not null, including resources and temperaty editing results in UI)
  5. Home.Somewhere: The idea of using a dedicated home folder for managing all the files originated in MULTITUDE, and is partially inspired by Git which have the idea of a root repository folder - but in this case we are flattenning files by exploiting the capability of underlying disk FS.
  6. Flat Physical FS: I used to have layers of layers of folder structures, making sure each layer is semantically meaningful, but then t

Related Skills

View on GitHub
GitHub Stars27
CategoryData
Updated2mo ago
Forks1

Languages

C#

Security Score

80/100

Audited on Jan 22, 2026

No findings