/pr/ – programming


61701617018c99c694fe2a21715d097b696c6 – ``Аддон (веб-экстеншн) своей системы букмарков для firefox''

@923d1093fada47a28fbff90d45005d72 Anonymous 2017-09-17 14:51:12
Задолбал ограниченный функционал систем букмарков в браузерах. Поэтому решил запилить свой браузер аддон для этого дела. Требования:
-теги (в блядском хроме, наверное, до сих пор нету тегов у закладок).
-наследуемость тегов. Обязательно множественная наследуемость, т.е., например, тег J.S.Bach относится и к тегу music и к тегу people; тег php относится и к тегу programming language и к тегу "зашквар".
-фолдеры не нужны, вместо них теги
-поиск по нескольким тегам
-сохранение снапшотов страниц, когда делаешь закладку, чтобы в будущем когда ссылка проебется, иметь хоть что-то
-поиск по тайтлам, поиск по содержимому, с возможностью одновременной фильтрацией по тегам, если нужно
-сортировка по всему чему только можно. Обязательно с возможностью сортировать по нескольким полям одновременно.
-отображение тегов в виде директорий как в файловой системе; возможность видеть всех парентов открытого тега где-нибудь в статус баре или еще как-нибудь; возможность видеть сколько всего букмарков принадлежит тегу; возможность видеть просто все букмарки (flat mode)
-синхронизация букмарков между разными браузерами
-импорт букмарков из firefox
@590e86c3d62e4dd495e8b25c68dadb63 Anonymous 2017-10-02 22:01:03
Вот такая модель пока получается
https://i.imgur.com/xehT21j.png
@ddfb73a6de3e4dacb8e3d38ed1906a9b Anonymous 2017-10-07 14:51:31
https://stackoverflow.com/questions/5769081/connecting-to-db-from-a-chrome-extension
You'll have to create an intermediary web app that will interface with the Database. Then you can make AJAX calls from the extension to your web app's API, which will in turn query the database and return results.
Значит, заебись, так я и думал, так и будем делать.
@d3b1b8ad9c694303b4e147cb3bd6b206 Anonymous 2017-10-07 15:38:03
Создание букмарка:
POST /api/bookmark
{
  "url": "https://example.com/",
  "title": "Example",
  "description": "example",
  "tags": ["tag1", "tag2"]
}

Как будет работать:
-проверям, что url присутствует и это валидный урл
-проверяем, что тайтл и хотя бы один тег присутствуют
-проверяем, что букмарка с таким же урлом еще нет
-добавляем букмарк в базу
-досоздаем теги, которых нет
-добавляем в bookmark_tag таблицу все теги этого букмарка
-отдаем id букмарка сервису, который асинхронно сделает снапшот и обновит shapshot_url букмарка
-отдаем id букмарка сервису, который асинхронно создаст (или найдет уже существующий) favicon и обновит favicon_id букмарка
@6b22c5246ba64ac691e16f5c61a0e55c Anonymous 2017-10-07 19:40:20
Ой, забыл еще важный момент: теги букмарка это не только переданные в массиве теги, но и еще все паренты этих тегов, паренты этих парентов и т.д. Обязательно надо учесть это перед
"-добавляем в bookmark_tag таблицу все теги этого букмарка"
Поэтому если юзер создает букмарк с тегом "J.S.Bach", то тег "music" должен подхватиться автоматически.
@bbd7b2146cd143f5ae0dc7694010c9b3 Anonymous 2017-10-08 16:41:15
Корневые теги - это теги у которых нету парента в таблице tag_arrow.
Получить все корневые теги:
GET /api/tags/roots 

Получить все чайлд теги данного тега:
GET /api/tags/{id}/children 

Получить все родительские теги данного тега:
GET /api/tags/{id}/parents 

Получить все букмарки тега:
GET /api/tags/{id}/bookmarks 

Это все для навигации как по дереву каталогов в файловой системе. Реализация запросов очевидна.

Чтобы создать связь парент-чайлд между тегами:
POST /api/tags/{id}/parents/{parent_tag_id} 

Как будет работать:
-нужно не допустить создание циклов в графе https://en.wikipedia.org/wiki/Cycle_graph#Directed_cycle_graph т.е. надо проверить, что не образуется цикл. Т.е. должен получиться https://en.wikipedia.org/wiki/Directed_acyclic_graph
-добавить связь в таблицу tag_arrow
-добавить связи в таблицу bookmark_tag: если букмарк имеет тег {id}, то добавить ему еще и тег {parent_tag_id}

Чтобы разорвать связь парент-чайлд между тегами:
DELETE /api/tags/{id}/parents/{parent_tag_id} 

-удалить связь в таблице tag_arrow
-удалить связи в таблице bookmark_tag: если букмарк имеет и тег {id}, и тег {parent_tag_id}, то отвязать второй
@2d9730dc943d49e9acb5c6ff4c535f47 Anonymous 2017-10-08 17:02:29
>если букмарк имеет тег {id}, то добавить ему еще и тег {parent_tag_id}
Опять забыл, еще парентов этого парента и т.д.
@2b2708d2cdba4da2b0aef5bd398a8ff0 Anonymous 2017-10-08 17:12:53
>если букмарк имеет и тег {id}, и тег {parent_tag_id}, то отвязать второй
тут тоже не всё так просто. Надо отвязать еще парентов этого парента и т.д. Но нельзя отвязывать других парентов, грандпарентов и т.д. тега {id}. Т.е. отвязать всех, кроме этих.
@f0c98b280a2747a7bf092cebe2c8a163 Anonymous 2017-12-12 06:45:45
Тут будут исходники https://github.com/odrnk/bookmarkext
@5901350dd4f3460eab0cdbaea6d3ac2d Anonymous 2021-04-07 08:23:37
Надо бы возобновить этот проект. Но не хочу на хаскелл продолжать его писать. Собственно из-за хаскелля впал в лютую прокрастинацию. Не по кайфу мне хаскелл. Вот думаю теперь что выбрать: OCaml, F# или может Clojure обмазаться.
@c91cc380324b4eefaf639ec7f815fac9 Anonymous 2021-04-07 08:39:33
@923d1@923d1093fada47a28fbff90d45005d72 Не проще ли хранить ссылки с тегами построчно в текстовом файле и искать по нему grepом?
@f17735be10224fb88e6b4ecf4067167c Anonymous 2021-04-07 08:45:48
@c91cc@c91cc380324b4eefaf639ec7f815fac9 Нет, не проще. Тем более я уже написал все нужные процедуры.
@bdcd7c96637a4bffbd5999e70999c141 Anonymous 2021-04-07 08:46:45
@677c10bb759c409d8cb1e8a7fcd81505 Anonymous 2021-04-07 10:24:15
@f1773@f17735be10224fb88e6b4ecf4067167c Ну, если так нравится плодить излишние сущности...
@b205e88eab744eff826bc80c13731fd4 Anonymous 2021-04-07 10:34:26
@677c1@677c10bb759c409d8cb1e8a7fcd81505 Хующности. Извини, я не хочу тратить время на объяснение очевидного.
@c671f0ebbfdf445f84b266de7d300a87 Anonymous 2021-04-07 10:44:23
@@bdcd7@bdcd7c96637a4bffbd5999e70999c141 KISS на вас всех не хватает. Использовать целую базу данных (!!!) ради хранения пары сотен записей - полный пиздец.
@d6f1d39e493a4ab8b4bacb6e2d136d68 Anonymous 2021-04-07 10:49:11
@b205e@b205e88eab744eff826bc80c13731fd4 Действительно. Зачем объяснять причины возникновения хипстоты и синдрома технокаргокультизма?
@987fa76d91b84fcb91e4eeffb1d63868 Anonymous 2021-04-07 10:49:36
@c671f@c671f0ebbfdf445f84b266de7d300a87
@41a8b69a0f0243fb86eb89833693a1ea Anonymous 2021-04-07 10:49:53
@c671f@c671f0ebbfdf445f84b266de7d300a87 @d6f1d@d6f1d39e493a4ab8b4bacb6e2d136d68 ok
@4e187e4440e249058d4d7798f12315a9 Anonymous 2021-04-07 16:37:31
Добавь ещё tag aliases.

Кстати, в качестве бакенда можно юзать HFS с сим- и хардлинками.
@ef1d6b099fdd42c5bf7f3d813638961f Anonymous 2021-04-07 16:43:31
@59013@5901350dd4f3460eab0cdbaea6d3ac2d
> Не по кайфу мне говно. Вот думаю теперь что выбрать: наркоманское говно, наркоманское говно поверх CLR или может игорями обмазаться.
@e06291291ff345cc9d6b7f4f5eadbe2e Anonymous 2021-04-07 16:56:58
@ef1d6@ef1d6b099fdd42c5bf7f3d813638961f Хипсторы любят в говне ковыряться. А что бы говна всегда было в избытке - превращают в него всё до чего могут дотянуться.
@d855af1646b54abcba4198a5ab77a1b3 Anonymous 2021-04-07 17:30:06
@ef1d6@ef1d6b099fdd42c5bf7f3d813638961f
@8458a688e0f64c449d7679777604dd06 Anonymous 2021-04-07 17:32:27
@ef1d6@ef1d6b099fdd42c5bf7f3d813638961f @e0629@e06291291ff345cc9d6b7f4f5eadbe2e Так, нахуй-ка из треда идите. Не надо тут своим говном про хипстеров засирать всё.
@62fcb3f100d14166bb5e22b6f0b2c291 Anonymous 2021-04-07 19:26:17
@59013@5901350dd4f3460eab0cdbaea6d3ac2d Попробуй Idris.
@49cbb33d1d4e4a2cb9cda672327a7740 Anonymous 2021-04-07 19:36:17
@8458a@8458a688e0f64c449d7679777604dd06 Но ведь они правы. Ты пытаешься сделать себе удобно, пересаживаясь с одной бомжацкой картонки на другую. А надо пересесть на стул. Но беда в том, что стульев в твоём мире нет. Поэтому и о комфорте и уж тем более о кайфе говорить глупо. Вот если бы ты сказал, что на хачки ты уже физически не можешь писать и хотел бы выбрать что-то, от чего ты не блюёшь до истощения, тогда бы был разговор.
@645522b6e8df4f09950ff7ba7306d9dd Anonymous 2021-04-07 19:37:45
Ящитаю, тебе стоит сначала сделать теговую файловую систему. А потом можно будет просто WebDAV навернуть поверх директории с закладками.
@0d28af765544467cb470704cd31d8334 Anonymous 2021-04-07 19:38:48
@49cbb@49cbb33d1d4e4a2cb9cda672327a7740 На этих ваших "стульях" я и так сижу по 8 часов каждый день.
@e534941263aa4388b9265805aaefdbfa Anonymous 2021-04-07 20:19:58
@0d28a@0d28af765544467cb470704cd31d8334 Весьма весомая причина пересесть на бомжатские картонки.
@a6a9f21d7077472aa0879b1efc74e788 Anonymous 2021-04-08 19:14:58
@59013@5901350dd4f3460eab0cdbaea6d3ac2d кложа максимально противоположна х-лю, остальное те же яйца, только протухшие