Copyparty どんなデバイスもファイルサーバーに!途切れてもスムーズな転送
引用元:https://news.ycombinator.com/item?id=44711519
このツールの作者が数日前にデモ動画をアップしたんだ:https://www.youtube.com/watch?v=15_-hgsX2V0
デモのある時点で、彼がファイルをアップロードしたんだけど、途中でアップロードを中断したんだ。そしたらファイルのダウンロードを始めたんだけど、アップロードされたところまでしか進まなくて、その後ずっと止まっちゃったんだよ。で、最後に彼がアップロードを完了させたら(これはスムーズに再開した)、まだ動いてたファイルダウンロードもシームレスに完了したんだ。これ、特に感動したな。
すごい感動的だよ、特にダイヤルアップの時代に夜中にダウンロードが失敗してて朝起きた時のことを覚えてるならね。
ダウンロードをキューに入れたりスケジュールしたり、サーバーが対応していれば再開できる特別なアプリがあったのを覚えてるよ。プログレスバーをじっと見つめる退屈さに比べたら、それらは夢みたいだったな。
ほとんどのファイルはFTPで利用可能で、再開もサポートしてたよ。
DAP、Download Accelerator Plusを覚えてる人いる?あのカラフルなバーが良かったよね。ダイヤルアップでシェアウェアのWindowsゲームをダウンロードしてた、俺の子供時代の一部だよ。
なんか…BitTorrentみたいだね。
今でも同じようなことしてるアプリがあるよ、例えば:https://www.downthemall.net/
(サイトから欲しいものを全部ダウンロードできる素晴らしいアプリで、正規表現での選択とかもできるんだ。)複数の接続をして、チャンクを並行してダウンロードするから、セッションごとのアップロード速度が制限されてるサイトでもダウンロードがすごく速くなるんだ。残念ながら、最近はあまり開発されてないみたいだけどね(最終コミットは9ヶ月前だった)。
ほとんどじゃないよ。HTTPの貧弱なサーバーでは、昔も今も多くのものがロックされてたからね。
Lieroを何度も何度もダウンロードしては失敗してたのを覚えてるよ。そして一度成功したら、大事にしたっけな。フロッピーディスクにギリギリ収まらなかったんだ。
サーバーを再起動してもスムーズだったら、もっとすごいよな。
FTPじゃPPPやSLIP接続は再開できないんだよな。
特別なツールもダウンロード必要でさ。夜のダウンロードを犠牲にするか、運に任せるかだったな。最終的にFTPクライアントを手に入れて、超能力みたいだったよ。BitTorrentはAIより感動したね。ああ、古き良き時代だ。
甘いね。FlashgetやNetantsを使えば、ファイルを8分割で同時ダウンロードできたんだ。5MBのDLの終盤はスレッドに声援を送ってたな。DL再開できないサーバーとか、ファイルサイズを報告しないサーバーはホント嫌だった。
数えきれないPetabytesを転送したサーバーといえばglFTPdだよ。FXP対応で、帯域がないクライアントでもサーバー間転送できるんだ。
多くのサイトに裏にFTPサーバーがあったよ。ftp.id.com、ftp.cdrom.comとか思い出すな。ftp.tyan.comからTyanマザボの高解像度画像をDLしたっけ。SupermicroもBIOSイメージ用のFTPサーバーがあったよ。HTTPでデカいものをDLした記憶はほぼないな。画像、PDF、小さなZIPファイルがほとんどだった。
HTTP 206の魔法かな?
それはFTPの組み込み機能で、サーバーサポートは不要だよ。
出典: https://en.wikipedia.org/wiki/File_eXchange_Protocol#Technic…
1. サーバーAとBに接続。
2. BにPASV転送の受信を指示。BはIPとポートを返答。
3. Aにそのアドレスとポートへ送信指示。
これはRFC 959にも記載されてるよ。
>BitTorrentはAIより感動的だった、古き良き時代だよな。それはBitTorrentがすぐに役立って、俺たちに力を与えてくれたからだね。
ほとんどのWebサーバーは何年も前から部分DLに対応してるよ。ブラウザがアドオンなしで対応してないのはサーバーの問題じゃない。サーバー側の問題もあるけど、それは動的コンテンツで設計が悪いケースが多い。俺は”間抜けな開発者/管理者”か”ソフトウェア選択ミス”が原因だと思うね。
[1]全てではないけど、ね。
[2]wgetやcurlは対応してるよ。
BBS時代には、途中で中断されたダウンロードを再開できる転送プログラムがあったんだよ。例えばこれね:https://en.wikipedia.org/wiki/HS/Link
明らかに、当時はFTPなんて使ってなかったね、もし使ってたら、こんなコメントしなかっただろうし。
Getrightがあったね!
いや、でもFTPとかのプロトコルは、そのレイヤーを意識する必要はないよ。VPNを通してるからってVPNを意識しないのと同じ。PPPやSLIPの接続が回復すれば、FTP転送は再開できるけどね。
あー、それ覚えてるわぁ…。
Download The Mallだよ!
確か、当時LieroをホストしてたHTTPサーバーはRangeヘッダーのリクエストに対応してなかったんだよね。あと、たぶん、従兄弟のパソコンにはFlashGetも入ってなかったと思う。そのパソコンで遊んでたんだけどさ。
あと、キャッチホン切るの忘れてたでしょ!
昔のことで、俺みたいなノスタルジーを感じる古株でさえ全く恋しくないことの一つだね。
このソフト、必要ないと思ってたけど、動画がめちゃくちゃ良いから、なんとかして使い道を探してみるわ。
Doomシェアウェア版のリリースに役立つかもね。
もっとコメントを表示(1)
“Race the beam”だって? めっちゃクールじゃん。こんなの動いてるの初めて見たわ。
Copypartyはすごいソフトウェアだよ。概要を知るには最近のYouTube動画を見るのがおすすめだね[0]。開発者は友達で、俺の家では20枚限定のCopypartyディスクリリースを1枚持ってるんだぜ!
[0] https://www.youtube.com/watch?v=15_-hgsX2V0
「ファイルサーバーに」なんてのは、このツールのすごさを3桁くらい過小評価してるぜ。これは驚くべきツールだから、デモ動画を絶対見るべきだね:https://www.youtube.com/watch?v=15_-hgsX2V0
これはすべてのパワーユーザーの夢だよ。ファイルサーバーとしての機能以外にも、たくさんの機能があるんだ。
しかも10倍(いや、100倍?)のデベロッパーが作ったみたいだね。動画を作ったり編集したりするだけでも、芸術的でユーモアがあるもん。もし作者がここにいたら聞きたいんだけど、全部一人でやってるの? LLMとかエージェントは使ってる?
マジで感動したよ。
ヘイ!うん、これは97%俺がVSCodeでゴリゴリ書いてるんだ。Pylanceとデバッガーは使うけど、他は全部オフにして集中してるよ。AIやLLMを使うのは、新しい文字列を中国語に翻訳するときだけだね。それにはかなり使えるみたいだし。
残りの2%は友達が新しい使い方や機能案を出してくれたり、バグを見つけてくれたり。でもプロジェクトが予想以上に注目されちゃって、プルリクエストも来始めたから、この割合は長く続かないかもね!俺が見落としてたものに、たくさんの目が入って見つけてくれるのはマジで嬉しいよ。
Copypartyはもう2年も使ってるよ。すごい技術だね。tripflagさん、あなたの仕事に感謝するぜ!
めっちゃすごい仕事だね!
これに気づいてSMBの疑問が浮かんだんだけどさ:
「WinXPだとログインがうまくいかないけど、匿名アクセスはOK — そのためにはCopypartyの設定からすべてのアカウントを削除して」
「Win10以降だと匿名/アカウントなしでの接続はできない」
これってCopypartyの意図的な制限なの?それとも単にWindowsのバージョンによる違いなのかな?
tripflagさん、これVPSで動かすときに何か懸念点とかある?まだドキュメント見てないから、その辺りの話があったかどうかもわからなくて。
残りの1%って何なの?
これすごいね!CGNAT環境下でも使える方法が欲しいな。Starlinkや5Gデバイス使ってるからさ。Google Drive、Mega、Dropbox、GitHubなんかの既存サービスを中間ストレージにして、ファイルリストやアップロードのリクエストを文書でやり取りするアイデアはどう?統合は大変だろうけど、すごく役立つよ。GitHubのMarkdownエディターとか使えば、リクエスト文書も簡単だね。
TailscaleかYggdrasilを使えばいいんじゃない?
magic-wormholeはCGNATの裏側からでも動くのかな?
Wireguardを使ってAWSやHetznerのような別のノードを介してトラフィックを中継したらどうかな?
なんでCGNAT裏のファイルアクセスに企業へクレカ渡すんだ?AWSに勝手に高額請求されたり、サーバーを透明性なく停止されたりしたら困るだろ。Tailscaleの企業クライアントは入れたくないし、Yggdrasilも必要ない機能が多すぎて俺には合わないよ。
Headscaleをインストールすればいいよ。企業依存じゃないし、Tailscaleも完全に推奨してるんだ。
デモサーバーでANSIアートを見つけたんだけど、EfnetのANSI/ASCIIシーンに関わってたの?まだ仲間が浮遊してるよ!素晴らしいプロジェクト、良い仕事だね!
動画で作者が言ってたけど、役立つLLMが登場する前の2019年に、携帯電話でこれを作り始めたんだって。
https://github.com/9001/copyparty/blob/hovudstraum/docs/vers… にある「SeafileやNextcloudのライセンスは問題がある」って記述についてだけど、AGPLに問題なんてないよ。AGPLはユーザーと開発者を守るライセンスで、フリーソフトウェアと不自由なものを統合したい人だけが困るんだ。それは良い機能だと思うけどね!
うわ、これ嫌だと思ってたわ。リンク踏まなかったのは、オープンソースを装った怪しいライセンスだと思ったからなんだけど、実はめっちゃ普通のオープンソースのAGPLじゃん。
これはすごい特徴だね。フォークは防げないけど、企業がSaaSのために独自拡張するのを止められる。ソースコードを公開しなきゃいけないんだ。Stallmanにもメールしたよ。AGPLv3プロジェクトの独自バージョンを作る唯一の方法は、元の著作権者に独自ライセンス料を払って、開発を支援することなんだ。フォークには同じ特権はないね。
これ、すごく素晴らしいソフトウェアな上に、彼らのセルフホストデモサーバーは、最近見たウェブアプリの中で一番速いよ…しかもHNでトレンド入りしてるのに!すごいね。Syncthingプロトコルベースで似たようなアプリ作れるのかなって今考えてる。Syncthingは好きだけど、特定のファイルを簡単に仲間と共有できるバージョンがあったらいいな。
あー、それはいいね!Syncthingは好きだけど、リレーサーバーとディスカバリーサーバーがメインのSyncthingバイナリの一部になってくれたらいいのに。あと、何人かの半技術系YouTuberがこれについて動画作ってるんだけど、デフォルトでパブリックなリレーとディスカバリーサーバーを使ってるってことを言及しないことが多いんだよね(ディストリビューションによるかもしれないけど)。悪いことじゃないけど、使う前に知っておくべきことだね。
[ビデオを見始める] ふむ、ファイルブラウザね、こんなの山ほどある—
[ビデオを見続ける] なんだこれ、やべえ。
Rick-rollされるのかと思ったけど、動画は実際すごく良かったし、機能が説明通りなら、Copypartyの作者には脱帽だね。素晴らしい仕事だよ!
マジで素晴らしいソフトウェアだね、こういうのって使う機会があったらいいのにって思っちゃう。セキュリティにも真剣に取り組んでる開発者に拍手!そうそう、YouTubeのビデオもこのプロジェクトをすごくよく紹介してるよ。
あー、俺にも一つあるよ…ずっと家の前庭にソーラー駆動の“図書館”を作りたいと思ってたんだ…(あの近所の“本を借りて、本を置く”小さい図書館みたいに、デジタルのコンテンツ用だよ…適切な“ドクロとクロスボーン”の旗を掲げるんだ…)
俺もこんなことやりたいと思ってたんだけど、学校のWiFi圏内に住んでるから、誰かが“有害な”ものを置くかもしれないって心配で、結局やらなかったんだ。以前、小さなGliNetルーターでPirateBoxを作って、パブリックドメインのコンテンツを共有するつもりだったんだけど、自分でちょっといじっただけでそれ以上はしなかったね。
いまどきさ、これ使ったらすぐ違法コンテンツだらけになるって。古き良き(純粋な)時代はもう終わりで、今の社会はこんなアイデアを活かすには未熟なんだよ。
これさ、グローバルインターネットに置くって発想じゃないと思うんだけど。Wi-FiのSSIDをブロードキャストするだけじゃない?
みんな言ってるけど、これはスタンドアロンでネットには繋がらないんだ。”読み取り専用”にするか迷ったんだけど、そうするとコンテンツ管理の責任が発生するし…。それに、家の前で長時間のファイル転送のためにウロウロされたくないしね。でもさ、これ”デッドドロップ”みたいな、”市民的不服従”のため独立した箱として使えるかも。プレッパー向けのインターネットボックスの無料代替にもなるしね。
もっとコメントを表示(2)
これ見てよ。昔は一番安くて小さいLinuxコンピューターの一つだったZsunっていうデバイス。USB給電でさ、SDカードの写真をWi-Fiで共有するデバイスが、USB A給電の小型SBCになるんだ。(技術的には基板が2つなんだけどね)中国から1個6ドルくらいで大量に仕入れたよ。
https://github.com/Emeryth/openwrt-zsun
https://wiki.hackerspace.pl/projects:zsun-wifi-card-reader
それでも、これって自分の敷地内にあって、違法なコンテンツが置かれる可能性あるんでしょ?悪夢みたいに聞こえるよ。
えっと、俺カナダに住んでるんだけどさ。個人的、非商業目的でファイルを共有した場合の著作権侵害の最大罰金は、約5,000ドルって認識なんだ。高そうだけど、家族やクロスデバイス共有、長年利用してるストリーミングサービスの数を考えたら”お得”にも聞こえる。でも、もし実際に損害賠償問題になったら、その判例を作る最初の人間にはなりたくないよね。
違法性のスペクトルで考えたら、著作権侵害なんて可愛いもんで、もっと過激なことだって起こりうるよ。
そうだね。ファイル拡張子やMIMEタイプでブロックしようとしても、悪意のあるユーザーが許可された拡張子にリネームして、悪質なペイロードを仕込むのを止めるのは無理だよ。(あるいは、メディアファイル形式でマルウェアやウイルス、エクスプロイトをばらまくこともできるらしい。今調べたんだけど、そういうこともあるみたいだね -
https://cyberpress.org/cybercriminals-exploiting-media-files…)だからさ、これって実際に”ワイルド”に実装するには、ちょっと中途半端なアイデアかもね。
俺が何か勘違いしてるのかな?でもさ、これってデバイス間でファイル転送するっていう、超よくある問題(特にスマホの場合)にめちゃくちゃ役立つんじゃない?HNにはそういうツールがいつも投稿されてるけど、いつも何かしら問題が指摘されてるし。これって、自己ホスト型でオープンソースの、すごく良い解決策になるんじゃないかな?
すごくシンプルなシェルスクリプトだよ。
https://github.com/sancoderhost/ShareFiles
Termuxとpython -m http.server
でファイル共有、よく使うんだ。scpやrsync使えない時とか、特にTermux入りのAndroid端末同士で公開鍵設定済みの時はこれ便利だよ。
最近BlipがスマホとPC間のファイル転送でめっちゃ調子いいよ。iOS、Android、MacOS、Windowsは対応してるけどLinuxはダメなのが唯一の難点かな。URLはこれね:https://blip.net/
https://payload.app/Resumableを試してみて!キューやディレクトリ送信、ドラッグ&ドロップができるし、LANでもWANでも使えるよ。転送とメタデータは全部E2EEで安全。Linux、Windows、Mac、iOS、Androidに対応してるんだ。ちなみに俺が作ったんだ。
もし「localsend」をまだ試してないなら、マジでおすすめだよ!
https://pairdrop.netもあるよ。似たようなサービスだけど、これは何もダウンロードしなくていいから楽だよ。ウェブで完結するんだ。
kdeconnect-cli -d somedevice --share somefile
ってコマンドがあるよ。
Pythonって見て、最初はスタンドアロンの実行ファイルの方がシンプルじゃないかって思ったんだけど、機能がめちゃくちゃ多いね!これ他の言語で作り直すのは大変そう。すでに依存関係もないのはすごい。本当によくできたツールだよ。
ちなみに、この辺はもうhttps://github.com/9001/copyparty?tab=readme-ov-file#copypar…で解決済みらしいよ。
cosmopolitan libcを使えば、書き換えなしで本当にポータブルな実行ファイルが作れるんじゃないかな?誰かがPython 3.11.4をこれを使ってコンパイルしたみたいだよ。URLはこれ:https://github.com/jart/cosmopolitan と https://ahgamut.github.io/2021/07/13/ape-python/
俺にはちょっとヤバいプロジェクトがあってね、Python(厳格な静的サブセットだけだけど)からWebAssemblyへのコンパイラを書いたんだ。CPython内部を辿るから1:1互換だよ。さらにwasm2cでサンドボックス化して、pledgeとCosmopolitanでコンパイルして超ミニチュアなスタンドアロンを作るんだ(マジで速いぞ)。Copypartyが依存関係ゼロで純粋なPythonって聞いて、来週末にPoCとして試してみるわ。約束はできないけど、このメッセージはマジで心に響いたね。
>すでに依存関係なし
そうそう、Pythonって聞いた時、巨大な依存関係リストを覚悟したんだけど、何も無くてマジで驚いたよ。マジですごいね。いくつか“借りた”ライブラリはここにあるみたいだね:https://github.com/9001/copyparty/tree/hovudstraum/copyparty…
util.pyを見てみると、MultipartParserとかread_header()、read_socket_chunked()、html_escape()、atomic_move()、killtree(“まだ競合するけど、努力した”)、termsize()とか、手書きのコードがいっぱいあるから見てみるといいよ:https://github.com/9001/copyparty/blob/hovudstraum/copyparty…
HTTPサーバーやクライアントのファイル転送、RSSフィードとかで6k行だって。メインのリクエスト解析はdef run(self)
を見てみて:https://github.com/9001/copyparty/blob/hovudstraum/copyparty…
これ、今まで知らなかったけど、YouTubeの紹介動画を見たら、これまで見たソフトウェアの中で最高の一つかもしれないと思ったよ。広告通りに動くなら、自分でホストしてるいくつかのものを置き換えられそうだな。
紹介動画からだけど、「テレメトリーはないし、これからも絶対にない。自動アップデートすらもだ」だってさ。なのに、今まで見たプロジェクトの中で、これほど機能が満載なのは他にないね。素晴らしいよ。
これ、キッチンの古いiPadで音楽プレーヤーとして使ってるんだ。見た目はイマイチだけど、他には何も動かなかったし、開発者さんもちょっと手伝ってくれたんだよね。
子供たちにDVDをリッピングしてiPadにアップロードするのに、どれだけ苦労したか思い出すよ。VLCがファイルをデータストレージにダウンロードするために、HTTPサーバーを立てなきゃいけなかったんだ。
これ、最高だね。Readmeがめちゃくちゃ面白くて、それだけでこのソフトウェアを使いたくなったよ。r/selfhostedではNextcloudとかに対して不満ばっかり見てるから、これ試すのが待ちきれないな。
情報ありがとう、Readmeをスクロールしてマジで楽しかったよ。特にこの部分がツボって、期待値が爆上がりしたね:
>逆Linux哲学 – なんでもやる、そしてそこそこちゃんとやる