Примітка: Архітектура знаходиться в активній еволюції: події через Кафку, байти через Media Gateway в MinIO, аналітики в ClickHouse, і тонкий Read API для GUI. Ingest пише WARCs; підсумки - це бічні об'єкти, завантажені точним текстовим хеш. Цей пост відстежує великі ідеї; тонкі теми (теми / схеми, функції оцінки, RBAC, DLQ) приземляться, як вони стабілізуються. БіллзТехнологія Багато разів в житті ми повинні зробити щось не тому, що це легко, а тому, що це важко. Я перебуваю в одному з тих просторів. Моя мрія: будувати програму для отримання і співвідношення технологічних новин. Зацікавлені в наступному жанрі збільшеної реальності? BillsTechDeck може допомогти вам знайти інформацію про це! Світ широко відкритий для типів гаджетів і технологічних оголошень, які ви можете отримати з корельованого джерела, щоб оцінити технологічні тенденції і, можливо, отримати загальну картину, яка може уникнути вас з енергійним гуглінг. Це проблема, на яку я потрапив, дивлячись на інформацію про Vision Pro від Apple або коли я чекав нових новин про Switch 2. Давайте почнемо з огляду на систему, показуючи діаграм потоку (грубий). Деякі міркування: всі стріли, що вказують назад до повідомлення, протікають в різні черги. Також, розглянемо кожну підсистему, щоб бути в контейнерах Docker і оркестрована K8 і в трубопроводі CI / CD (я не включав його в графік, тому що це було б занадто зайнятим). Basically I want news, trends, sources, analysis, summaries in one place to build a coherent volume of data which I can understand the zeitgeist of tech news, gadgets and trends. Я намагаюся зробити щось послідовне: Тепер я просто хобіст. Так що я не роблю ніяких претензій, що я знаю що-небудь. я веселяюся, що є справжньою радістю. Давайте взяти високий огляд зануритися в цю систему. Я переробив це much sooooo Давайте розбиваємо кроки (виходячи з Пов'язані з цим кроки): Кафка Harvester бере вклад з IngressOrca, який базується на інформації з FeedbackService. Він використовує MinIO як спосіб об'єднати WARC і також мати можливість обробляти багаті медіа поширеним способом. Медіа зберігається в кластері MinIO (Media Cluster), який працює на клавішах sha256 і sha1 (у випадку WARC, але вони також матимуть sha256 хеш-ключі для сумісності системи) Sanitizer отримує робочі місця в черзі від Harvester і тягне медіа з медіа-ворота для санітарії. Якщо його брудно ми все ще тримаємо його, щоб виконувати судову експертизу в контрольованому середовищі OCR працює на багатих медіа на основі робочих місць з Кафки spaCy (NER) працює на всьому. spaCy подає підключену роботу до spaCy санітарного перевізника, і якщо він здоровий, він надсилається до служби оцінки, щоб вирішити, чи є автоматичне резюме phi4 виправданим, якщо він не виправданий, він просто надсилається до кореляційного двигуна. Якщо божевільний, проте, дані надсилаються до InsanityHandler (не показані для короткочасності) для використання як аналітики або отримання людської перевірки. gets run on specific pieces of data either warranted by the scoring service or user initiated. ПІ4 Корреляційний двигун працює на всьому Кожна підсистема буде мати надійний аудит і подає черги до журналів, які будуть оброблятися LogHandler і в LogSilo/ElasticSearch Підсистеми/провайдери, які потребують доступу до медіа, будуть взаємодіяти з кластером MinIO через спокійний дзвінок через MediaGateway. Різні обробники розмовляють з GUIHandler, який відображає GUI. GUIHandler може подавати ControlEvents (запитують про phi4 резюме, налаштування речей) FeedbackService розмовляє з HistoricalHandler, щоб витягнути з HistoricalSilo для підготовки моделі, яка дасть кращу інформацію для IngressOrca (Orchestrator), щоб краще вибрати, коли, де і як ми можемо витягнути кращу інформацію, щоб скоротити витрачені ресурси на групу даних Всі дані зберігаються в кластері MinIO (MediaCluster) і доступ через спокійні дзвінки Заклики до ГУІХандлера робляться заспокійливими дзвінками Всі підсистеми контейнеруються і оркеструються компанією Kubernetes. Гарвард Вступник Послуги Feedback санаторій Гарвард ОКР Світлодіодний (NER Божевільна торгівля ПІ4 Кореляційний двигун Логіст LogSilo / Еластичне пошук Медіабізнес Медіа кластер Медіабізнес ГУХІДЛЕР ГУХІДЛЕР ControlEvents Послуги Feedback Історична торгівля Історичний Вступник Медіакластер ГУХІДЛЕР I'm sure I left out some detail, but that's the gist. Для урожаю: Збір даних Збір даних Як ми збираємо наші новини про сліпий Pixel Fold 3? Ми повинні витягнути його з Інтернету! Різні джерела вимагають різних методів збору даних. Всі сайти також мають конкретні структури (як складно).На щастя, ми маємо неймовірну екосистему за збору даних. Виявлення ботів, фільтрація DDoS, Captchas, неправильна інформація Python є Мова використовується для цієї мети і має жваве співтовариство, яке старанно працює, щоб допомогти хобістам, як я, захопити важливу інформацію про технічні специфікації Steam Deck 2 та інші чати про це (як неймовірно). Неймовірний Recon What is the site structure? What is the site's flow? What tricks are companies like Akamai pulling to impede my ability to get my precious tech snippets? What values change and where? When does my cookie become invalid depending on an abnormal flow? Does the javascript try to fool me? Is it dynamic, obfuscated or check for tampering? Are my user agents okay and when do I rotate them? How do I handle headers? How do I handle TLS Fingerprinting? This list is getting long so I'll just add "heuristics" Це дуже зацікавлений процес і вимагає великої кількості уваги, тому цілі, щоб отримати мої технологічні новини, повинні бути обговорені загалом і розглянуті. and Збирати цінну інформацію про сайти та їх евристику важливо. Падіння Створення Proxy CAPTCHAs *: image recognition tasks* Tradition CAPTCHAs *: Machine learning looking at user behavior to determine bot behavior* ReCAPTCHA *: pesky things that run in the background by grumpy site admins looking to stop me* Invisible CAPTCHAs Традиційна CAPTCHA Реабілітація Невидимі CAPTCHA Хоча список невеликий, це, безумовно, величезна перешкода і жодним чином не вичерпний список. Всі рішення цих проблем вимагають складних рішень. Я міг би продовжити, але я вважаю, що додати такі речі, як використання респектабельних житлових проксі, мобільних проксі, обмеження тарифів, визнання і пом'якшення відбитку пальця пристрою і, нарешті, м'ясорубки. останнє, що мені потрібно, це витрачати ресурси на марні м'ясорубки! Отже, ми повинні мати різні рівні підходу: Стратегія Crawling Response "Випробуйте з пістолетом, ескалація до Ордену, якщо це fubar'd ". "Випробуйте з пістолетом, ескалація до Ордену, якщо це fubar'd ". : Level 1 Pellet Gun aiohttp scrapy Use for static pages, public APIs, or weakly protected endpoints. Low noise, low cost. : Level 2 Scoped Rifle Playwright + stealth plugins Use for JS-rendered sites, light bot defenses, simple captchas. Mimics real users, simulates browser behavior. Level 3: Ordinance Crawl4AI / Nodriver , heavyCAPTCHA solving , Mobile proxies Use when you hit: invisible captchas, anti-bot JavaScript puzzles, DOM obfuscation, or flow control defenses. Heavy but necessary for hard targets. Пістолет пелет Scoped Rifle розпорядження Чому це має значення Ефективність: Не спалюйте цикли Playwright, коли працює Curl. Стелс: Уникайте непотрібного підняття тривоги. Довговічність: бігти місяцями без заборон, а не тижнями. Хоча зараз ми вводимо складність, яка добре. На початку ми матимемо дуже прості правила. стає більш міцним, ми можемо робити кращі виклики в кращі місця, оскільки ми і шаблони, які нас направляють. Історичний Історичні дані Історичний Ця частина системи, мабуть, є і буде той, який потребує постійного оновлення через гру кішки і миші між сайтами, що працюють, тримаючи мене від моїх солодких, солодких новин Samsung. Найважливіше Я придумав план, щоб бути в змозі вживати, вживати, вживати і бути в змозі перевірити, перш ніж мені дійсно доведеться турбуватися про витягування даних в реальному часі. Бути асинхронним і не блокувати. Інтернет-архів Python Wrapper Якби я тільки почав витягувати багато актуальних даних, я б не мав гарної впевненості, що мої кореляції означають що-небудь. Цей підхід дозволяє мені поглинати і зосередитися на решті системи, не будуючи краулера, який вимагатиме багато змін. No data should be trusted: Мистецтво людей, які хочуть отруїти вашу систему Мистецтво людей, які хочуть отруїти вашу систему What's the problem with taking data from the internet? Ну, будь-хто, хто був в інтернеті протягом будь-якого часу, знає про брудних тролів. Актори, які виходять, щоб вигнати вас і вашу благородну мету, щоб отримати нову інформацію про смартфон. Через те, що люди хочуть вигнати вас, ви повинні припустити найгірше. Let's highlight some concerns (not an exhaustive list, just a taste) Malice in action Javascript Payloads (XSS, Embedded goodness, etc) Worry about data exfiltration Browser Exploits Redirection and Phishing PDF Macros and Embedded Object Can do spooky things like "remote code execution" Info disclosures Initiate connections to scary C2's Handling various filetypes Office Document macros EXE/DLL (less of a concern since they'd be filtered Malicous archive files that contain executables and path traversals Image/Media file: hiding stegonagraphy or utilizing dirty dirty codecs Data Integrity Tampered data Spoofed sources People looking to poison my system with generally bad data So how do we deal with this? Some things I left off this list (like servers trying to DDoS my harvester by serving up tons of unnecessary data to hurt my feelings). We first off want to isolate and contain all data we haven't vetted. A separate black box that either resides on a different network system or is Поки Це відбувається, це має бути зважено з застереженнями, які приходять з повітряним розривом (якими я нікого не буду носити). Повітряні пропуски VLAN Хопінг Один рівень працює rules on a file. Which is fine, and a great starting point. We have tools for macro analysis. We have an analysis tools. We can verify files are what they are (making sure the dirty trolls aren't hiding exe's). We have . We check hashes against threat feeds. YARA PDF Статичний аналіз коду Ми також маємо at the other extreme. It Наступна статтяЯк дістатися до сторінки «Інтернет-архіви» Він забезпечує динамічний аналіз, поведінкову звітність, виявлення загроз... , Some dirty files can detect sandbox environments. Others can escape them. It is resource intensive and has a complex setup. It is too resource intensive and complex for a while. Cuckoo не буде реалізовано significant Але it can be thwarted! it can be thwarted! Lastly, we have to worry about data poisoning. I don't have a clear path on how to handle this. There is a breadth of research papers I am going to go through to better understand the problem and approaches. No one said . I write this not a definitive writing of what I'm doing. More so highlighting the amount of ways bad hombres can me and my system. safety is easy Стагнація компроміс I have yet to see a lock that can't be picked. I can only make it as complicated as I can. With that in mind, I am designing this part with . Performance, memory safety and I just like it a lot. This will be a job. Media will be fetched and posted to the to interact with the (MinIO cluster) Rust Tokio MediaGateway MediaCluster Медіабізнес MediaCluster У підсумку: In conclusion: In conclusion: For the majority of time, are for . The further I can put the sweet, sweet apples up the tree and the better. bad actors Дивлячись low hanging fruit minimize my attack surface Якщо дані шкідливі, ми карантинуємо їх, щоб ми могли аналізувати їх, ми документуємо їх і зберігаємо аналітику, що обертається навколо них. . Історичний Історичний Phi4-medium: summarizing for busy people like me summarizing for busy people like me come with a lot of challenges. Resource wise, content wise. However, they also have the ability to give us cogent summaries of potentially lengthy pieces of information. That's why I'm using (needed something more robust). LLM's Phi4-medium Чому я б вибрав це? Goldilocks size and performance Medium is bigger than mini. Medium has 14 billion parameters. Competitive enough with larger models but more efficient Optimized for my use cases Підходить для місцевого використання Цінова ефективність (оскільки я низькокалорійний фермер) Гнучкість у розміщенні I need something local and powerful and it fits the bill. Having it being its own docker image makes it easy. Another positive is my ability to fine tune it (for my greedy need for information on the new iPhone). Попереджаємо ! Hallucination Tis the cost of doing business. For this I may have to implement and RAG system. My own guys are working against me! *sigh* English In the end this is not an overall large deal since I'm not multilingual. Though it adds complexity should I want to expand data sources to places I can't understand I'm pigeonholing myself into consuming English. My own guys are working against me! English So what does a Як я роблю? Фермерська капуста Headstrong Медичні перевірки . Things like volume yields : Checks if the summary's length is reasonable. Meaning Did Phi-4 produce a 150-word summary as requested, or did it return a single sentence or a 10-page novel? . Cardinality or categorical value checks : Checks if the entities (people, places, etc.) in the summary are a valid subset of the entities in the original article. Primary defense against hallucination. Meaning Does the summary mention 'Germany' when the source text only ever mentioned 'France'? . Completeness and fill rate checks Checks for the omission of critical information. Meaning: The original article mentioned three key companies, but the summary only includes one. Is the summary missing vital information? Uniqueness checks Checks for repetitive or redundant content within the summary. Meaning: Did the model get stuck in a loop and repeat the same sentence three times? . Range checks Checks if numerical data in the summary is factually correct based on the source. Meaning: The source text says profits were '$5 million,' but the summary says '$5 billion.' Is this a catastrophic numerical error? Presence checks The most basic check: did the service return anything at all? Meaning: Did the Phi-4 service time out or return an empty string instead of a summary? Data type validation checks. Checks if the summary adheres to the requested structure. Meaning: I asked for a JSON object with a 'title' and 'key_points' array. Is the output valid JSON with those exact keys? Consistency checks The deepest check for factual grounding and logical contradiction. Meaning: The source text says 'the project was cancelled,' but the summary implies it's ongoing. Does the summary contradict the facts of the original article? Things like volume yields Cardinality or categorical value checks Перевірка повноти та заповнення ставки Унікальні перевірки Range checks Presence checks Перевірка типу підтвердження даних. Consistency checks Цей список може швидко стати таким, як Бенджамін Буфорд Блакитна назва використовується для креветки, тому я збираюся перевершити його там. This will be auto-run based on the scoring service or manually requested by . moi Grabbing Entities with spaCy: ТІ грабіж pertinent things грабіж pertinent things Ми знаходимося на Секція . spaCy Which model do I choose? пропонує різноманітні попередньо підготовлені моделі, всі з власним використанням. Як вийти з коробки . I will likely need to fine tune a custom and add . At the start I will need to annotate data to train my model (there are open source tools to somewhat automate this process). This will also encompass training it to . Простір Загальний контент WEB Вона не буде розпізнавати техногенний жаргон NER model custom components recognize entity types I will need to be ( та ). I to go in and do та (i.e. "Apple" the company and "apple" the fruit). With that comes the possibility of building a custom entity linking component or external tool integration (hopefully not). fluent У відповідності з правилами matcher EntityRuler Буде потрібно Суб'єкт зв'язку disambiguation Оскільки я турбуюсь тільки про англійську на даний момент, я благословенний, що не знаю про виявлення мови. Past that I will need to consider performant things like and . When not in use turn it off! batch processing component disabling With the consideration possible running with I'll have to consider based models and based models, and also have to consider considerable RAM utilization. Паралельні процеси ПІ4 CPU GPU There's . The use of custom attributes will be a must. I will have to plan for out-of-domain text which I will inevitably run into and is crucial for me to know how to handle. pre-processing, post-processing and possibly integrating external logic and models Lastly, and almost most importantly: Медичні перевірки . Схема валідації Перевірка правильних типів даних Особлива увага приділяється поведінці навколо критичних полів Defining expected data types Establishing acceptable ranges with things like dates and word counts Визначення допустимих значень Define completeness thresholds Розгляд правил крос-полевої послідовності A lot of the above mentioned sanity check stuff applies here, but in a more granular sense dealing with entities. The list goes on, and again, it becomes listing uses for shrimp to Forrest Gump. Я відчуваю себе добре щодо повноти цього розділу. Data correlation: making sense of things Зробити сенс речам in this system is important. I need a language that can provide me some memory guarantees as well as stop me from making newbie mistakes. I drifted towards at first. I thought it through and arrived back at . I'm simply not an experienced programmer and would likely implement things that would hose my system. Кореляція даних incredibly C++ Rust C++ Basically, takes entities from and connects the dots. It will utilize два Мені потрібна якась реальна гранулярність і функціональність для статистики в кореляції.Раніший проект включав RocksDB, який не був достатньо міцним з недавніми розробками. відпочинок spaCy ClickHouse читати / читати / читати pertinent things So stats will be important (yay!). А спосіб кодування є ключовим, і мені доведеться бути дуже обґрунтованим з тим, що я роблю, чому я роблю це і як я реалізую речі. У цій частині, оскільки у мене буде багато I / O процесів, що говорять про . idomatic Tokio ClickHouse We basically take all entities and На них порівнюють . run rich analysis Історичні дані Я розглядаю наступні речі: Чи статистично значимі ці відносини? Is this correlation more than just "chance"? Is this significance worth creating a graph relationship with? Is there factual backing to put emphasis on this specific relationship? Потрібно зробити такі речі, як створити for connections. It'd also be a good idea to establish , міра, яка оцінює, наскільки більш ймовірно, що дві істоти з'являться разом, ніж випадково. де високі і негативні оцінки говорять мені великі речі про кореляцію. p-value Pointwise Mutual information Using stats is essential for filtering out noise. For instance, the entities та З'явиться разом тисячі разів, але це зв'язок та particularly insightful. Statistics help us prove that a rarer connection, like a specific tech company and a government agency, is far more significant even if it only appears a few times. Also, thinking of the Його because it's a . 'Apple' 'iPhone' Очевидна not Whitehouse not Значущі Біла будівля Past getting into some concepts I feel out of the scope of this overview, I'll leave it at that. Data: the backbone the backbone So what do I do with all this data about hot new tech items? Я його зберігаю. Буде багато баз даних (PostgreSQL, ClickHouse, Neo4j, MinIO) Всі операції з інформацією будуть здійснюватися через . One will handle operations, one який буде використовуватися для зберігання артефактних даних , two will be ( та ). Its a lot, but each DB has its own strength and I believe a simple would have significant drawbacks. data handlers Нео4J PostgreSQL (в основному метадані реєстру) ClickHouse Історичний Кореляція "SQL Server for everything" Історичний CorrelationSilo структури даних, tables and primary keying will be tantamount in ( Комплекс among other things). The will be significantly easier, though will definitely require a lot of care. It will be a source of much contemplation, tears and frustration. A good design will pay off in spades. I'm approaching this later since I feel I'll have a much better idea of what I need the further in the system I get. good Клінічний Зберігані процедури Артефакти Артефакти Є ще одна звіра.Я відчуваю, як довго моє У ньому повинно бути painless (famous last words). My feelings are that I essentially want to try and make it as dumb as possible. I want to be able to point to point to my correlation engine and understand the If I started adding layers of complexity and correlation logic the data becomes more coupled and detracts from the value of my correlation engine Нео4J Коррелятор не телефонний відносно «Чому?» ТІ Буде а DB have a lot of granular data from things like: HistoricalSilo Клінічний Історичний Де ми отримуємо хороші дані Які пошукові запити дають найкращі дані Які методи збору працювали найкраще для якого джерела даних Where/when and potentially why we got dirty data Аналіз цих брудних даних Їх, мабуть, набагато більше, і я їх знайду, коли прийду до цього пункту. ТІ кластер буде набагато менш болючим для реалізації, ніж інші. я все ще потрібно переконатися, що все є пояс і підвіски. Мінус База даних буде інтенсивним досвідом. Буде тон більше. GUI: Webapp час! ТІ will be a Спочатку я збирався зробити це настільний додаток. я зрозумів, що в кінцевому підсумку я хочу, щоб більше людей, щоб використовувати його. Це не буде великим варіантом. ГУІ Вебап Пейзаж6 Using a Я отримую доступ до такої широкої різноманітності бібліотек.У мене є неймовірний доступ до інформації, яка може бути недоступна, якщо я використовую GUI. , мої цілі були дуже різні. Я чесно просто не хотів писати грі в Python. У мене немає ніяких хороших причин, чому я не роблю. Це чудово здатне. Це було лише особистим уподобанням. Вебап Pyside6 Маючи це гниле відчуття в моєму кишечнику, я шукав інший варіант грі. Щоб додати до цього, знайти хороші приклади того, що люди побудували з бібліотеками грі, було важко, якщо не не неможливо. я міг би, звичайно, просто поштовхнувся вперед, але я не хотів використовувати щось, а потім поставив на роботу і прийшов до розуміння, що моє бачення неможливе з певним грі. LOT So I went with a Є багато переваг для цього, але тепер мені доведеться дійсно бути на вершині безпеки. Однак, мені не доведеться турбуватися про цю складність, поки я не вірю, що я готовий показати свій проект, і, можливо, до того часу я міг би знайти деякі круті хлопці, щоб кодувати з. webapp В основному, ГРІ розмовляє з який розмовляє з , , і контролювати події, такі як можливість керувати певними роботами. will have to be locked down and deliberate in how it puts jobs into . ГУІГАНДЛЕР Логіст Артефакти Історична торгівля Контрольовані Кафка GuiHandler Логіст Артефакти Історична торгівля Контрольовані Нам доведеться вміти обслуговувати всі види багатих медіа. Більш обережно робити тільки веб-апп. Останні слова : Останні роздуми Останні роздуми Я не все покривав. Єдине, що я хочу додати, це мій вибір. . Це був не мій початковий вибір. Однак, я потрапив в занепокоєння під час розробки, коли мій початковий вибір став нестійким. Це місце, де я приземлився. Ця стаття зараз закривається на 4.5k слів Kafka Кафка Кафка Додатковий бонус полягає в тому, що він добре виглядає на резюме. Я завжди намагаюся стати розробником. Якщо . Я не буду Але це буде виглядати добре. Попереду у мене є багато роботи, щоб вдихнути життя в мою любов до технологічних тенденцій. До І Зробити будь-яке з цього? потребують No. Я просто думаю, що це неймовірно весело. All architecture and flow choices are subject to change. On this blog I will not be providing code (I'll save your eyes). There are tradeoffs everywhere. Коли можна скасувати Кафку? Чи буду я впроваджувати оркестратор ресурсів, щоб я не спалював свою установку? Наскільки гранулярно я отримую з визначенням «цінних» даних? Що робити в системі, щоб очистити непотрібні дані? Чи потрібні мені пізні нічні сеанси спалювання дарт? Що робити, якщо буде компроміс? Як компенсувати отруєння даними? Вегетація . Вегетація . Незважаючи на це, у мене є Час і жодного боса, щоб їздити мені про невдачу. Таємна зброя Це займе роки. І це добре. Цей проект може бути зовні божевільним і амбіційним для читача. Я достатньо свідомий, щоб це визнати. Хоча я хочу сказати, що я неймовірно зацікавлений у всіх областях знань в самій системі. Це не 100-метровий спринт. . Довгий марафон Трохи за трохи Трохи за трохи Я хочу залишити урок, який я навчився від . Spruce is a man who changed the UPS headquarters address to his own, an apartment in Chicago. This was allowed for months where Mr. Spruce was able to deposit ~$65k in cash to his account that was earmarked for UPS. Містер Спрайз Як це підходить? Урок, який я дізнався з цієї історії: . To have a complete disregard for a logical ceiling in what is possible. Mr. Spruce did not worry himself with questions about whether or not he could indeed change the address of the world's largest logistics company to his own apartment. He just did. . Сміливість And it worked Сміливість І це спрацювало Хоча я відчуваю, що я точно можу скинути відсутність контролю над імпульсом пана Спруса і відсутність упередження, я можу всередині сміливості спробувати.Маючи повне і повне неповагу до того, що консенсус може вважати "можливим", я можу вступити в подорож навчання, не пов'язане з традицією, зануреною в розум, який однозначно говорить "ви не можете". Можливо, я не можу.Я б скоріше провалився, ніж не спробував.Для цього, я повинен втілити підхід пана Спруса повністю не давати біса. Якщо ви потрапили в цей блог, я сподіваюся, що ви чомусь навчилися. Багато любові, Білл «Чарівник» Андерсон