はてなキーワード: RegExとは
これを改善してってお願いした。何書いてあるかわからないけど動いたよ。
https://anond.hatelabo.jp/20240125203115
// ==UserScript== // @name 増田ミュート(白塗り版) // @namespace http://tampermonkey.net/ // @version 2024-06-26 // @description ミュートワードを含む最小限の範囲を白塗りにする // @author You // @match https://anond.hatelabo.jp/* // @icon https://www.google.com/s2/favicons?sz=64&domain=hatelabo.jp // @grant none // ==/UserScript== (function() { 'use strict'; const muteWords = [ "弱者男性", "弱男", "弱者", "婚活", "男", "女", "年収", "下方婚", "発達障害", "発達", "ハッタツ", "ハッタショ", "ハッタショ", "競プロ", "競技プログラミング", "AtCoder", ]; function whiteoutElement(element) { element.style.backgroundColor = 'white'; element.style.color = 'white'; element.style.textShadow = 'none'; element.style.cursor = 'default'; element.style.userSelect = 'none'; // テキスト選択を防止 element.style.borderBottom = '1px dashed #ccc'; // 枠線を追加してテキストがあることを示す // リンクの場合、クリックを無効化 if (element.tagName === 'A') { element.style.pointerEvents = 'none'; element.removeAttribute('href'); } // 子要素にも適用 Array.from(element.children).forEach(child => { child.style.backgroundColor = 'white'; child.style.color = 'white'; child.style.textShadow = 'none'; }); // ツールチップを追加 element.title = 'この内容にはミュートワードが含まれています'; } function shouldMute(text) { return muteWords.some(word => { const parts = word.split(''); const regex = new RegExp(parts.map(char => `${char}92;92;s*`).join(''), 'i'); return regex.test(text); }); } function findSmallestMuteableElement(element) { if (element.nodeType === Node.TEXT_NODE) { return shouldMute(element.textContent) ? element.parentElement : null; } if (element.tagName === 'PRE' || element.tagName === 'CODE') { return shouldMute(element.textContent) ? element : null; } for (let child of element.childNodes) { const result = findSmallestMuteableElement(child); if (result) return result; } return shouldMute(element.textContent) ? element : null; } function processElement(element) { const muteableElement = findSmallestMuteableElement(element); if (muteableElement) { whiteoutElement(muteableElement); } } function processAllElements(root = document.body) { const walker = document.createTreeWalker( root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT, null, false ); let node; while (node = walker.nextNode()) { if (node.nodeType === Node.ELEMENT_NODE) { processElement(node); } else if (node.nodeType === Node.TEXT_NODE && node.parentElement) { processElement(node.parentElement); } } } function handleClickEvent(event) { setTimeout(() => { processAllElements(event.target); }, 100); } // 初回実行 processAllElements(); // クリックイベントの監視 document.body.addEventListener('click', handleClickEvent); // DOM変更の監視 const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { if (mutation.type === 'childList') { mutation.addedNodes.forEach(node => { if (node.nodeType === Node.ELEMENT_NODE) { processAllElements(node); } }); } else if (mutation.type === 'characterData') { processElement(mutation.target.parentNode); } }); }); observer.observe(document.body, { childList: true, subtree: true, characterData: true }); })();
はてブのホットエントリ(総合)で月内に数多く[あとで読む]タグを集めたエントリ
590あとで/4204users 【詳しすぎる2週間】親の死亡後にまずやること(行動チェックリスト付) | まごころ相続コンシェルジュ
291あとで/1560users Google製のJavaScript教育ツール「Grasshopper」は基礎から学べて初心者に優しい!【どれ使う?プログラミング教育ツール】 | 窓の杜
272あとで/1859users 無料コーディング練習所 | 未経験からWebデザイナーへ!
220あとで/1327users 【翻訳】Googleのエンジニアがソフトウェア開発する時に必ず書くドキュメント「Design Docs at Google」 - BppLOG
201あとで/1017users 30 分でわかる!アルゴリズムの基本 | E869120 | SpeakerDeck
191あとで/1365users Wi-Fiトラブルの解決に便利! Windowsの隠れ便利機能「Wlan Report」を活用しよう【イニシャルB】 | INTERNET Watch
175あとで/888users Web開発者はもっと「安全なウェブサイトの作り方」を読むべき - Flatt Security Blog
171あとで/2593users (追記あり) 10億円資産ができたときに知っておいたほうがいいこと | anond.hatelabo.jp
164あとで/849users AWS初心者向けの教材まとめ、AWS日本法人が公開 | ITMedia
162あとで/1231users 【試し読み】書店員さんから大反響! 精神疾患を抱えた妻の介護と仕事…約20年にわたる苦悩の日々を綴った傑作ルポ『妻はサバイバー』|朝日新聞出版さんぽ|note
159あとで/935users 機械学習が独学できる日本語Youtube難易度別まとめ - Qiita
152あとで/961users 8時間を0.01秒に短縮 「アルゴリズムの素晴らしさが2分で分かる動画」が今すぐ勉強したくなる分かりやすさ | ねとらぼ
142あとで/889users 文春オンラインの記事分析を支える爆速ダッシュボードを作るまで|Shota Tajima|note
141あとで/2006users さよなら絵梨 - 藤本タツキ | 少年ジャンプ+
140あとで/1138users 新電力の中の人です。すべてをお話しします | anond.hatelabo.jp
136あとで/1094users 『ゴールデンカムイ』全話無料! | ヤンジャン!
135あとで/780users Docker創始者らが開発、ビルド/テスト/デプロイの自動化をポータブルにするツール「Dagger」登場。そのままローカルでもGitHubでもCircleCIでも実行可能に | Publickey
132あとで/575users フロントエンドエンジニアが知るべきキャッシュを理解する | カーーズ | Zenn
132あとで/1232users みんなが知ってる『ちょっとのコツでめっちゃ美味しくなる、楽になる』みたいなの教えて→全然知らなかった有益な情報が集まる | Togetter
131あとで/679users 【個人開発】正規表現を学ぶ狩りに出ませんか?モンスターを倒しながら正規表現が学べるゲーム「Regex Hunting」を作りました - Qiita
124あとで/1217users 先輩に「何かタメになる話してくださいよ〜」と無茶振りしたら『Language Reactor』という2言語字幕を同時表示できるChromeの拡張機能を教えてもらった | Togetter
124あとで/1254users 育休中に相方がめちゃくちゃ売れた|酒寄さん|note
120あとで/1114users Google Analytics(UA)が使えなくなるのはどのくらいヤバくて、いつまでに何をしたら良いのかの話。 - フジイユウジ::ドットネット
120あとで/598users 電子情報学特論:Chromiumのアーキテクチャを解き明かす | Kentaro Hara | Google Slides
119あとで/1242users 僕がたどり着いた最強パリパリチキンの焼き方→上手に焼くポイントも「鶏肉好きとしては是非とも取り入れたい」「最高のライフハック」 | Togetter
118あとで/866users 「全クリエイターに広まってほしい」文化庁が質問に答えるだけで『著作権契約書』が作れる超便利なツールを作っている | Togetter
116あとで/897users ちょっと触ったら休日が丸2日消失した 個人的2022年ベストゲーム「TUNIC」を全力で推したい | ねとらぼ
115あとで/798users 結局UMLとかシーケンス図とかAWSの図とかどれで描くと良いのよ?と思ったときの選択肢 - Qiita
112あとで/494users 『良いコード/悪いコードで学ぶ設計入門 』を出版します|ミノ駆動|note
109あとで/522users 予防に勝る防御なし - 堅牢なコードを導く様々な設計のヒント / Growing Reliable Code PHPerKaigi 2022
109あとで/1047users (続き)10億円資産ができたときに知っておいたほうがいいこと | anond.hatelabo.jp
こんばんは。27歳のニートです。
ひょんなことからエロサイトを作ったら結構デカいサイトになったのでそのことについて書きたいと思います。
巨乳動画ストリーム
http://kyonyudouga.com/
さすがにニート生活にも飽き、何かやりたいなと考えた時にアフィリエイトを思いつく。
実はアフィリエイトについては以前から知っていて実際にやったこともありました。
しかしその時は全く稼げず、またその時は他にやることもあった為すぐにやめてしまいました。
腰を据えてやったらどうなるだろうと思い、再度アフィリエイトを始めることにしました。
どんなサイトを作ろうかと考えた時に真っ先思いついたのがエロサイトでした。
アダルトサイトはアクセスを集める手法としてアクセストレードと呼ばれる
他のアダルトサイトと相互にアクセスを送り合う手法が主流です。
そのため他サイトの画像リンクが増え、とても使いにくいものになっています。
画面をずっとスクロールさせないとコンテンツに辿り着けなかったり、ひどいところは騙しリンクもあります。
当初は私もアクセストレードメインで集客をしており、サイトは画像リンクだらけ。
ごちゃごちゃしていてコンテンツの位置もわかりにくいというお世辞にも良いサイトとは言えませんでした。
そしてアクセストレードというのは結局のところ自サイトのアクセス数により送れるアクセス数に限界があるため、ある程度のところでアクセス数が頭打ちになります。
実際のところ私のサイトも1日3万PV程度で頭打ちになりました。
そのためやる気を無くし半年程放置して2ちゃんまとめブログを始めました。
そこで2ちゃんまとめブログ運営で得たノウハウをエロサイトの方で実行したことろこれが上手くいきました。
これは一般サイトでは当たり前のことなのですがエロサイトは大手サイトでさえ非常にわかりにくい構成のサイトが多いです。
一方で2ちゃんまとめブログは大手サイトほど他サイトへのリンクも少なくわかりやすい構成になっていました。
なので思い切って画像リンク等を全て外し、わかりやすいデザインに変更しました。
②多更新にする
そこで私もエロサイトに多更新を取り入れ1日に1~3回更新だったのを1日24回、1時間に1回更新というスタイルに切り替えました。
③表示速度の改善
エロサイトはとにかく重たいところが多いです。
それは①で書いた通り画像リンクが異様に多いからというのもあるのですが動画共有サイトを利用したエロサイトは誰でも簡単に作れるため
その辺りがかなり適当なところが多いのです。
CSSspriteの使用やCSS,JSファイルのminify等ページの表示速度に関する施策を行っていないところがほとんどです。
無料ブログで運営しているエロサイトはスマートフォンページをしっかり作っていないところがほとんどです。
ほぼ広告ページとしてしか使用しておらず、コンテンツと紛らわしい広告を載せていたり、
コンテンツがあっても共有サイトのプレーヤーのサイズをスマホの画面サイズに合わせていないなど
そこで私はスマートフォンページのテンプレもしっかり作り込み最適化させました。
これらを実行した結果、ページ数が増えるに従い検索からのアクセスが右肩上がりで増え
PCページ40万PV/日、スマホページ20万PV/日というサイトに成長しました。
アクセスが増えた後いくつかの動画配信サイトとサンプル配信提携をすることが出来ました。
これには凄く驚きました。こんなことがあるのかと。
SEO施策はググれば出て来るような基本的なことしかやっていません。
SEO業者も利用していませんし、今のところこのサイトしか持っていないので自演リンクも一切やっていません。
SEOについてもエロサイトは基本すら出来ていないところが多いのでそれだけでライバルと差をつけることが出来ます。
ちなみに私のサイトはビッグキーワードでアクセスを集めているのではなく(一応「巨乳」で4~7位くらいですがそのワードでの流入は少ないです)
ロングテールってやつですね。
ロングテールは検索順位の変動にビクビクせずに済むので良いです。
やはり無料ブログでは出来る事に限界があり、エロサイトとはいえ良いサイトにしたいという思いがあったからです。
wordpressでの運営経験もなくサーバー関係のスキルもないので移転にはかなり苦労しました。
我ながら良いサイトに仕上がったことと移転を期に今までの足跡を残そうと日記を書きました。
jwplayer
Sidr(スマホ)
001 Prime Strategy Translate Accelerator
Contact Form 7
Count Per Day
Exec-PHP
Head Cleaner
Infinite Scroll
Multi Device Switcher
Quick Comments
Search Everything
Search Regex
WP-PageNavi
WP-PostRatings
WP-PostViews
多分これが一番気になるところだと思います。
アフィリエイトという観点からもスマホページの重要性がわかりますね。
あとcookieを利用したブックマーク機能も実装したいです。
エロだけじゃなくて一般サイトやWEBサービスも作りたいと色々模索しております。
どうしようもないクズニートでも頑張ったらこれぐらいのことは出来ました。
ニートでも頑張れば出来るんだ!と思って頂けたら幸いです。
-----------------------------------------
03:59追記
たくさんのブックマークありがとうございます!
とても嬉しいです。
確かに見やすくて使いやすいな。
けどリンク切れ報告フォームはなくていいの?実際他のサイトでそれが有効に使われてるのかはよくわからないが…
カテゴリ分けがシチュエーション別とかもあるといいなーと思ったけどこれ以上多くすると大変かな。あまり項目を多くするとまた見にくくなるかもしれないし。
リンク切れ報告フォームは以前は置いていたのですがあんまり報告してくれないんですよねw
自動でリンク切れをチェックするシステムを導入する予定なのでそちらで行います。
シチュエーション別もFC2の時はタグを利用してリストを作っていたのですが
FC2はタグをエクスポート出来ないのでwordpressではなくしちゃいました。
出来ないことはないのですが手作業でタグを登録し直さなければならないので…
それだけのスキルを身につけたらどこかに就職できそうだw
WordPressテーマは何を使っているんだろう?
-----------------------------------------
25日02:13追記
えーと下の方でステマだとおっしゃっている方がおりますがそのサイトの製作者と私は別人です。
私はRubyなんて使えません。
こういう事を書くと余計に怪しいと思われてしまうのでしょうけども。
ステマというのは運営者や製作者、その関係者が”利用者のフリをして”モノやサービスを薦める行為の事です。
運営者や製作者自身が「こういうのやってるんですけどどうですか?作ったんですけどどうですか?」と紹介するのはステルスではないただの宣伝です。
上でも書きましたが我ながら良いサイトに仕上がったので見てもらいたいなと思ったのです。
見てもらって感想を聞きたいなと。
エロ動画サイトってアクセスが多くてもコメントもほとんど付かないし感想を聞く機会がほとんどないんですよ。
でもFC2ブログだとさすがに恥ずかしいのでね。
wordpressならまぁ見せても恥ずかしくはないんじゃないかと思いまして。
この日記はたくさんブックマークされましたけどサイトの方はほとんどブックマーク増えてません。
.
本記事末尾のローカルなkey mappingを実現するコードを改良してプラグインにしました。
↓
Vimperatorでローカルなkey mappingを実現するプラグイン local_mappings.js を書いた。
http://anond.hatelabo.jp/20080826124641
2008-07-14 - やぬすさんとこの日記
http://d.hatena.ne.jp/janus_wel/20080714
→n秒後/前に移動するkey mappingも忘れずに!
Re: autocmd が分からない - hogehoge
http://d.hatena.ne.jp/teramako/20080731/p1
のコードをいじった。
" --- autocmd --- " nicovideo " cでコメント入力、Cでコマンド入力、sでシーク、lでボリューム調整、 " pで停止/再生、mでミュートのon/off、vでコメの表示トグル、zでズーム。 javascript <<EOM liberator.plugins.nicomap = function(){ // no args var list=[ ["p","nicopause"], ["m","nicomute"], ["v","nicomementvisible"], ["z","nicosize"], ["s","nicoseek"], ]; // has args var list2=[ ["c","nicomment"], ["C","nicommand"], ["l","nicovolume"], ["s","nicoseek"], ]; if(buffer.URL.indexOf("http://www.nicovideo.jp/watch") == 0){ for (var j=0; j<list.length; j++){ let i = j; liberator.mappings.addUserMap([1],[list[i][0]],list[i][1], function(){ liberator.execute(list[i][1]); },{ rhs:":"+list[i][1]+"<CR>" } ); } for (var j=0; j<list2.length; j++){ let i = j; liberator.mappings.addUserMap([1],[list2[i][0]],list2[i][1], function(){ liberator.execute('normal :'+list2[i][1]+'<Space>'); },{ rhs:":"+list2[i][1]+"<Space>" } ); } } else { for (var i=0; i<list.length; i++){ liberator.mappings.remove(1,list[i][0]); } for (var i=0; i<list2.length; i++){ liberator.mappings.remove(1,list2[i][0]); } } }; liberator.autocommands.add('LocationChange','.*','js liberator.plugins.nicomap()'); EOM
http://d.hatena.ne.jp/nokturnalmortum/20080802#1217633913
.
現在のマウスカーソル位置でクリックイベント発生するkey mappingを設定できればより快適なんだが・・・。
(「コメントする」ボタンのDOMノードが取得できれば、dispatchEventでいけそうだけど)
" ************* local key mappings **************** javascript <<EOM (function(){ function setlocalmap(obj){ var list = obj.list; var list2 = obj.list2; var exp = obj.exp; if(list.constructor != Array || list2.constructor != Array){ echr("invalid argument: array argument required");return; } if(exp.constructor != RegExp){ echr("invalid argument: regex argument required");return; } if(exp.test(liberator.buffer.URL)){ for (var j=0; j<list.length; j++){ let i = j; liberator.mappings.addUserMap([1],[list[i][0]],list[i][1], function(){ liberator.execute(list[i][1]); },{ rhs:":"+list[i][1]+"<CR>" } ); } for (var j=0; j<list2.length; j++){ let i = j; liberator.mappings.addUserMap([1],[list2[i][0]],list2[i][1], function(){ liberator.execute('normal :'+list2[i][1]+'<Space>'); },{ rhs:":"+list2[i][1]+"<Space>" } ); } } else { for (var i=0; i<list.length; i++){ liberator.mappings.remove(1,list[i][0]); } for (var i=0; i<list2.length; i++){ liberator.mappings.remove(1,list2[i][0]); } } } /** * Add Key Mappings to Specific Web Pages * @param obj : has following properties * list : commands that take no args * list2 : commands that take args * exp : target page's URL (regex) * @see Re: autocmd が分からない - hogehoge * http://d.hatena.ne.jp/teramako/20080731/p1 */ liberator.plugins.addLocalUserMap = function(obj){ liberator.plugins[obj.name + "MapSetter"] = function(){ setlocalmap(obj); } liberator.autocommands.add( 'LocationChange', '.*', 'js liberator.plugins.' + obj.name + 'MapSetter()' ); }; // nicovideo // cでコメント入力、Cでコマンド入力、sでシーク、lでボリューム調整、 // pで停止/再生、mでミュートのon/off、vでコメの表示トグル、zでズーム。 var nicovideo = { name : 'nico', exp : /^http:\/\/www.nicovideo.jp\/watch/, list : [ ["p","nicopause"], ["m","nicomute"], ["v","nicomementvisible"], ["z","nicosize"], ["s","nicoseek"], ], list2 : [ ["c","nicomment"], ["C","nicommand"], ["l","nicovolume"], ["s","nicoseek"], ], }; liberator.plugins.addLocalUserMap(nicovideo); })(); EOM
諸君、私はC++が好きだ
諸君、私はC++が好きだ
諸君、私はC++が大好きだ
テンプレートが好きだ
STLが好きだ
Boostが好きだ
FC++が好きだ
Macで
BSDで
演算子の意味が変わり、直感的なコードが書き下せる時など心がおどる
動的言語の優位性を語っている奴等にそれを見せた時など胸がすくような気持ちだった
Boostが好きだ
Boost::lambdaを使って(_1 + _2)と二つの引数を足算した結果を返す無名関数を定義した時など感動すらおぼえる
Boost::regexで正規表現を書く時などもうたまらない
Boost::shared_pointerでオブジェクトが自動的に解放されるのは最高だ
納期に追われて急いで書かなければならないパーサを
Boost::spiritでBNFを記述して書いた時など絶頂すら覚える
そんなC++が複雑だと思われているのはとてもとても悲しいものだ
テンプレートが好きだ
諸君 私に付き従うC++好きの諸君 君たちは一体何を望んでいる?
更なるC++を望むか
糞の様なC++を望むか?
BoostやFC++によってさらに変態的になっていくC++を望むか?
よろしい ならばC++だ
だが、LL全盛の時代の陰でもはや組み込みかHPCぐらいでしか使われないという中傷に耐え続けて来た我々には
ただのC++ではもはや足りない!!
我々はわずかに小数
Perl、PHP、Python、Ruby、JavaScriptに比べれば物の数ではない
だが諸君は一騎当千のBinarianだと私は信じている
ならば我らは諸君と私で総兵力100万と1人のコンピュータサイエンティスト集団となる
我らを忘却の彼方へと追いやり、インタプリタしか知らない連中を叩きのめそう
髪の毛をつかんで引きずり下ろし 眼(まなこ)をあけて思い出させよう
連中にインタプリタでは実用的なプログラムが書けないということを思い出させてやる
C++には奴らの哲学では思いもよらない書き方がある事を思い出させてやる
1000人のBinarianの集団で 世界を変態的なコードで埋め尽くしてやる
逝くぞ 諸君