- hn.unlurker.com बनाते समय लिखे गए HN API client में सभी items को क्रम से प्राप्त करने वाला
scan फीचर जोड़ा और Hacker News का पूरा डेटा लोकल में डाउनलोड किया
hn scan --no-cache --asc -c- -o full.json चलाते समय डाउनलोड कुछ बार रुका, लेकिन resume हो सकने वाले scan की वजह से कुछ घंटों बाद 20 GiB की JSON file मिल गई
- DuckDB के
read_json_auto से JSON को table में बदला, फिर text ILIKE और 12-week moving average SQL के जरिए Python, JavaScript, Java, Ruby, Rust के mention ratios निकाले
- सिर्फ
grep से भी पता चला कि “correct horse battery staple” वाक्यांश Hacker News पर 231 बार आया है, और DuckDB इस पैमाने की one-off analysis के लिए काफी उपयुक्त लगता है
- पूरा डेटा लोकल में होने पर Hacker News के पुराने content का कई तरीकों से analysis किया जा सकता है, लेकिन यह project यहीं समाप्त होता है और अगला कदम किसी और के आगे बढ़ाने के लिए बचा है
Hacker News के सभी items डाउनलोड करना
- hn.unlurker.com बनाने के लिए HN API client लिखा
- पहले से कई clients मौजूद थे, लेकिन नए project में latest Go features और linters आज़माना चाहता था
- HN API में comments और stories को item कहा जाता है
- client active items और item lists आदि ला सकता है
- असली project में सिर्फ recent items की जरूरत थी, लेकिन completeness के लिए
scan फीचर जोड़ा
scan items को 0 से latest तक या उल्टी दिशा में क्रम से डाउनलोड करता है
- पूरा डाउनलोड दसियों हजार GiB नहीं, बल्कि कुछ दर्जन GiB JSON के आसपास होने का अनुमान था, इसलिए कोशिश की
hn scan --no-cache --asc -c- -o full.json
- डाउनलोड कुछ बार रुक गया और
CTRL-C से रोकना पड़ा, लेकिन scan resume हो सकता था, इसलिए कुछ घंटों बाद पूरा हो गया
- परिणाम Hacker News पर हुई सारी सामग्री वाला 20 GiB JSON file है
- वही command फिर चलाने पर इसे latest data से फिर भर सकते हैं
DuckDB से local data का analysis करना
- शुरुआत में सिर्फ
grep से search किया
- इसके बाद DuckDB से analysis करने की कोशिश की
- DuckDB एक embeddable, तेज analytical execution engine है और command-line tool के रूप में भी उपलब्ध है
- नए UI की वजह से beginners के लिए भी इस्तेमाल करना आसान था, और LLM ने SQL queries लिखने में मदद की
- JSON data को DuckDB में इस तरह import किया
CREATE TABLE items AS
SELECT *
FROM read_json_auto('/home/jason/full.json', format='nd', sample_size=-1);
- example query items को weekly basis पर group करती है और सभी items में किसी खास word के शामिल होने का ratio calculate करती है
python, javascript, java, ruby, rust को text ILIKE से search किया
- हर ratio के लिए 12-week moving average calculate किया
- इसी तरीके से database-related words को भी visualize किया
- example graph में
mysql, postgres, mongo, redis, sqlite के 12-week moving average mention ratios शामिल हैं
- DuckDB इस size के dataset का analysis करने के लिए बहुत अच्छा लगा
- पूरे Hacker News content की local copy मिल गई, लेकिन project को यहीं खत्म करने का फैसला किया
1 टिप्पणियां
Hacker News की टिप्पणियाँ
मुझे ऐसे दो डेटाबेस पता हैं जिनमें अपडेटेड Hacker News टेबल हैं, जिन पर पहले डाउनलोड किए बिना ही analysis चलाया जा सकता है
BigQuery के लिए Google Cloud account चाहिए, और queries शायद free tier में चल जाएँगी;
bigquery-public-data.hacker_news.fullइस्तेमाल करेंClickHouse में sign up की ज़रूरत नहीं है और browser से सीधे query चला सकते हैं: https://play.clickhouse.com/play?user=play#U0VMRUNUICogRlJPT...
clickhouseको भी ढूँढ निकालता है: https://play.clickhouse.com/play?user=play#U0VMRUNUICogRlJPT...ClickHouse HN database के बारे में जानने से पहले ही मैंने पूरा JSON डाउनलोड करने का काम खुद करके देखा था
पहले @fesshole Twitter/Bluesky account के साथ कुछ ऐसा ही किया था। पूरा archive डाउनलोड किया और model को fine-tune करके उससे और भी ज्यादा पागलपन भरे confessions बनवाए
उस पर काफी गर्व था, लेकिन आखिरकार समझ आया कि मैंने बस एक भोली-भाली machine को masturbation और divorce सिखाया था
यह SF फिल्मों के उस scene जैसा था जहाँ aliens या superintelligent AI मानव इतिहास को बहुत तेज़ी से देखकर तय कर लेते हैं कि हम बचाए जाने लायक नहीं हैं
अगर उस data का बाहरी दुनिया से कोई connection बिल्कुल नहीं है, तो कोई इंसान या model कैसे जान पाएगा कि उस pendrive में masturbation और divorce से जुड़ा data है?
मेरे हिसाब से दोनों कुल मिलाकर positive हैं, और मैं आभारी हूँ कि मैं ऐसे समाज में रह सकता हूँ जहाँ ऐसी चीज़ें normalised हैं
Java query में JavaScript के सारे मामले भी शामिल हो जाते हैं, इसलिए Java over-sampled है
trust,antitrust,frustrationजैसे ढेर सारे शब्द शामिल हो जाएँगेHacker News पर हुई हर चीज़ वाली 20GiB JSON फ़ाइल मौजूद थी—यह सोचकर कि यह सिर्फ़ टेक्स्ट वाली साइट है, यह आकार हैरान करने वाला बड़ा लगता है
क्या इसका मतलब है कि HN के 18 साल के अस्तित्व में लोगों ने 20 अरब bytes से ज़्यादा टेक्स्ट पोस्ट किया? औसतन रोज़ 2MB से ज़्यादा, यानी लगभग 7.5KB प्रति सेकंड
ऊपर से, उसमें से काफ़ी हिस्सा शायद इंसानों का नहीं होगा।
/newestbot spam से भरा रहता हैइसमें JSON की metadata और syntax भी शामिल है, इसलिए वास्तविक टेक्स्ट की मात्रा उससे भी कम होगी। “रोज़ 2MB से ज़्यादा” वाला हिसाब सही था
[0] दरअसल हिसाब ChatGPT ने किया था, लेकिन सही लगता है: https://chatgpt.com/share/68124afc-c914-800b-8647-74e7dc4f21...
उसका बड़ा हिस्सा कचरा है, लेकिन खासकर 2018–2019 में ज़्यादा चतुर bots आने से पहले का शुरुआती data देखने लायक हो सकता है
Facebook से पहले के मानकों से HN एक काफ़ी बड़ा social network रहा होगा, और इसका size ठीक-ठाक व सक्रिय moderation होने की वजह से इसकी value भी अच्छी है
2019 में Google+ बंद होने पर मैंने model किया था कि उस site पर contribute किया गया text data कितना होगा
यहाँ text data से मतलब images, audio, video जैसे media और HTML skeleton, CSS, JS जैसे अतिरिक्त page elements को छोड़कर है
engagement बहुत कम था और औसत post करीब 120 characters की थी, इसे देखते हुए करोड़ों active accounts का 7 साल का record भी बस कुछ GiB ही था। registered profiles 4 अरब से ज़्यादा थीं, लेकिन वास्तविक activity कहीं कम थी
Archive Team ने Internet Archive के साथ सहयोग करते हुए, लेकिन अलग से, Google+ preservation project किया था, और नतीजे मिले-जुले थे। बहुत content बचा, लेकिन उससे कहीं ज़्यादा छूट गया; comments लगभग नहीं बचे; threads हाल की लगभग 10 entries तक काट दिए गए; और search न होने से वह कुल मिलाकर कम उपयोगी रह गया। random hash के बजाय चुने हुए account name इस्तेमाल करने वाले “vanity accounts” की accessibility और भी खराब थी
इसके अलावा, पूरी pages scrape करके online दिखने वाला रूप दोबारा बनाने की कोशिश में storage requirement बहुत बढ़ गई, जबकि site को सच में दिलचस्प बनाने वाली कई चीज़ें छूट गईं
बड़ी आबादी के text contributions को store करना हो, तब भी storage requirement काफ़ी modest होती है। जैसे, अगर औसत online time रोज़ 45 मिनट, typing speed 45wpm, और online time का आधा हिस्सा पढ़ने के बजाय लिखने में मान लें, तो भी प्रति व्यक्ति रोज़ लगभग 1,000 words, यानी करीब 6KiB होता है। 1,000 लोगों पर 6MiB, 10 लाख लोगों पर 6GiB, और 1 अरब लोगों पर करीब 6PiB
वास्तविक आंकड़े लगभग निश्चित रूप से इससे कम होंगे। लिखने का समय ज़्यादा आंका गया है और असल में वह शायद 10% के करीब होगा; mobile input speed भी संभवतः 20–30wpm के आसपास होगी। मसलन Facebook पर रोज़ लगभग 2.45 अरब “content pieces” आते हैं और उनमें से आधे video होते हैं। अगर प्रति post 120 characters मानें, तो text data रोज़ 300GiB से काफ़ी कम—हैरानीजनक रूप से छोटी मात्रा—होगा
मौजूदा data collection और surveillance capitalism systems का ज़्यादातर हिस्सा location, video, online interactions, commerce जैसे data से आता है, जिसे इंसान सीधे type नहीं करते
HN download करते समय netiquette क्या होगी? server पर load डालने से पहले dang से पूछना चाहिए?
या मान लें कि अब अरबों डॉलर वाली tech companies यह पहले ही कई बार कर चुकी होंगी, इसलिए यह ध्यान में भी नहीं आएगा?
https://console.cloud.google.com/marketplace/product/y-combi...
मैंने कुछ ऐसा ही किया था। BigQuery dataset इस्तेमाल करने की एक तरकीब अपनाई; किसी वजह से वह लगातार update हो रहा था, और data को Parquet में export करने के बाद download करके DuckDB से query किया
“अब जब Hacker News का सारा कंटेंट लोकल पर डाउनलोड कर लिया है, तो सैकड़ों LLM-आधारित bots को ट्रेन करके contributor के रूप में चला सकते हैं, और अतीत को हमेशा गूंजाते और recycle करते रहने वाले Chinese room vibrator के output से धीरे-धीरे, अनिवार्य रूप से, हर human text को replace कर सकते हैं”—यह मज़ाक है, लेकिन डर है कि किसी दिन कोई सच में ऐसा करने की कोशिश करेगा
उम्मीद है ऐसा न हो, लेकिन अगर हुआ तो क्या हम उसे रोक पाएंगे?
हल करने के लिए कई समस्याएं हैं, और privacy भी उनमें से एक है। connections को user के सामने उजागर करने की ज़रूरत नहीं है, लेकिन naïve implementation में वे server पर रह जाएंगे
distrust paths को negative weights के रूप में भी जोड़ा जा सकता है। अगर आप सीधे या indirectly किसी पर distrust करते हैं, तो मेरे और उस व्यक्ति को जोड़ने वाली trust chain की value कम हो जाए
चूंकि यह एक network है, system को manipulate करने की कोशिशों के खिलाफ यह खुद adjust हो सकता है, लेकिन यह कितना robust होगा, यह अब भी सवाल है
लंबे और content वाले comments आम तौर पर पहचाने जा सकते हैं, लेकिन 1–2 साल पहले की तुलना में यह बहुत कठिन हो गया है। छोटे एक-दो sentence वाले comments के लिए, मुझे लगता है LLM अब इतना अच्छा हो गया है कि इंसान जैसा pass हो सके
इसके उलट HN के कई comments average popular thinking से हटकर काफी unique insights होते हैं। अगर LLM इसकी नकल करने की कोशिश करे, तो वह बस nonsense देगा
अगर उस nonsense पर ऐसा filter लगा दें जो केवल rational और समझ में आने वाले answers pass करे, तो जवाब boring हो जाएंगे और फिर भी nonsense के करीब ही रहेंगे
answers को accurate, precise और unique बनाना है तो LLM के अलावा किसी चीज़ का इस्तेमाल करना होगा
site के karma और rate heuristics flashy machine learning की तुलना में crude हैं, लेकिन community Reddit या Twitter की तुलना में छोटी है और moderators सीधे intervene करते हैं, इसलिए वे काम करते हैं
LLM fake accounts के झुंड को human text “replace” करना है तो उन्हें लगातार ऐसी posts करनी होंगी जो लोगों को सच में interesting लगें। वरना वे बहुत पहले ही limit हो जाएंगे या चुपचाप हटा दिए जाएंगे
कुछ AI accounts को जिंदा भी रखें तो marginal cost बड़ी है। 24 घंटे दर्जनों नए threads पर inference चलाना free नहीं है, और output को आम SEO garbage में फिसलने से बचाए रखना भी हैरानी की हद तक कठिन है
revenue भी असल में नहीं है। HN traffic को monetize नहीं कर सकते, और karma bot operators के लिए बहुत खराब currency है
क्या resource वाला persistent bad actor रोका जा सकता है? शायद हां, लेकिन countermeasures वही होंगे जो अभी हैं: strong rate limits, नए accounts की caps को कड़ा करना, human operators की review, और शायद कुछ stylometry
legitimate नए users के लिए यह annoying होगा, लेकिन fatal नहीं। आखिर HN इसलिए बचा है क्योंकि यहां मौजूद इंसान दूसरे इंसानों की लिखी चीज़ें पढ़ना चाहते हैं। अगर comments stochastic parrots जैसे लगने लगें, तो readers उन्हें ignore या flag करेंगे, और bots आपस में बात करते रह जाएंगे
GPT-3o ने लिखा
“Metal Gear Solid 2 में Hideo Kojima की ambitious script को कभी-कभी postmodern video game का पहला उदाहरण माना गया, और यह भी कहा गया कि उसने post-truth politics, fake news, echo chambers और alternative facts जैसी concepts की पहले से कल्पना कर ली थी”
[0] https://en.wikipedia.org/wiki/Metal_Gear
[1] https://en.wikipedia.org/wiki/Dead_Internet_theory
मुझे लगता है कि अगले कुछ सालों में कई APIs सिर्फ DuckDB file लौटाने का option देना शुरू कर देंगी
अगर वैसे भी JSON को database में load करना है, तो response के रूप में database ही क्यों न लिया जाए
कृपया stacked charts का इस्तेमाल न करें। मुझे लगता है कि reader की impression को distort न करना लगभग असंभव है
noise में किसी खास data point की height का अंदाज़ लगाना बहुत मुश्किल होता है, और यह शायद मौजूद न होने वाली dependency का संकेत देता है
अगली बार मैं region के हिसाब से केवल एक series वाले कई line graphs को align करके stack करने का तरीका सोच रहा हूं
https://flowimmersive.com/ का काम देखें
[1]: https://atlas.web.cern.ch/Atlas/GROUPS/PHYSICS/PUBNOTES/ATL-...
मैंने पहले एक बनाया था, और https://github.com/ashish01/hn-data-dumps काफी मज़ेदार था
इसे implement करने के लिए एक बढ़िया feature यह होगा कि यह बात reflect हो कि हाल के items समय के साथ ज़्यादा बार update होते हैं, इसलिए हाल में download किए गए items, पुराने items की तुलना में जल्दी stale cache बन जाते हैं
मैंने staleness तय करने के लिए age-based function इस्तेमाल किया। शुरुआत में creation के 1–2 मिनट बाद से इसे stale मानता है, फिर कुछ दिनों तक अक्सर refresh करता है, और पहले हफ़्ते के बाद तेज़ी से कम करता है ताकि करीब 2 हफ़्ते बाद इसे immutable treat किया जाए
// DefaultStaleIf marks stale at 60 seconds after creation, then frequently for the first few days after an item is// created, then quickly tapers after the first week to never again mark stale items more than a few weeks old.const DefaultStaleIf = "(:now-refreshed)>" +"(60.0*(log2(max(0.0,((:now-Time)/60.0))+1.0)+pow(((:now-Time)/(24.0*60.0*60.0)),3)))"https://github.com/jasonthorsness/unlurker/blob/main/hn/core...