はてなキーワード: Trueとは
少額の金(初期装備)からスタートする「『テレビ』のリサイクル券」獲得RTAのルート案です。本番向け。
Any%とTrue Endingカテゴリそれぞれ解説します。
Any%:とにかく近所のショップへ一直線。脳筋です。ロット毎のランダムマップなので、ルート取りのイメトレ・自主練は必要です。
True:お祈り要素あり。。遠くてもできるだけデカい店舗に行きます(安テレビに出会う確率を上げる)。
大手ショップが近隣にあるマップであればまず「下調べ」を選択し、次のターンでショップに向かってもOKです。安定派はこちらで。
マップの引きが悪すぎる、または「下調べ」の進捗があまりにも悪かった場合については
「通販」選択ルートでカバーしましょう。本来リセットですが、持ち時間が決まってる場合の奥の手として。
Any%:テレビを購入後、その場で即売ります。ヤバい人パラメータが限界ギリまで上がりますが耐えます。
ここでは店員さんとの会話で確実に良客になり、ヤバい人パラの上昇を抑えることが肝です。店内のコース取りも重要。
本ルートでは"町の変人"称号を取らずに進むため、会話フェーズを飛ばすとパラが上がりきって警備員が来ます。必ず良客でいましょう。
True:帰り道に別のリサイクルショップに持ち込みます。会話コマンドは安定さえ取れればOKです。
帰りの道中に立ち寄ることを優先に、できれば大きいショップに寄りましょう(リサイクル券を発行してもらえないバグ防止)。
大きいショップだと買い取りがスムーズなのでタイム短縮が狙えます。
③帰宅
コース取りに気をつけつつウイニングランです。他カテゴリと同様、自宅玄関を開けた瞬間にタイマーストップです。
以下補足です。
・購入するテレビですが「PC」「モニター」等はNGです。また引っかけで「車載テレビ」やその他特殊なテレビも引き取ってもらえません。
現実のものですが、こちらの区分が大変参考になります。https://www.rkc.aeha.or.jp/recycleticket/target_items.html
・本ゲーム初心者で見極めが不安な方は、テレビ売り場近くの店員さんに話しかけ「これ繋いだらニュース映りますか?」を選びます(ヒントが出る)。
まずは情報の正確な把握に努めましょう。その後の雑談では無難に回答し、むやみにヤバい人パラを上げずに完走を試みてください。
、、余談ですがこの選択肢、現実でこんなこと言いますかね?笑 要は確実にヒントが出るようなアホ質問ということなんでしょうがw
現実ならギリでも「テレ朝映ります?」「TBS見れます?」とかになりそう。少し前なら「手越復帰のイッテQをリアタイしたくて…」とか?笑
・財布スコアを捨てて早く済まそう!というコンセプトです。「引き取りを依頼」「リサイクル施設に持参」ルートは考案しておりません。
上記ルートで「引き取りを依頼」すると財布がマイナス→アルバイトに突入するのでRTAとして破綻します。俗に言うタイミーさん化。
「リサイクル施設に持参」は行動自体に財布の増減はありませんが、ほとんどのマップで施設がバカ遠く、交通費もかかるので微妙です。。
というか、そもそも施設持参はマップ依存すぎて現在100%カテ以外では各大会ローカルでレギュ違反となっています。元は暗黙の了解でしたね。
今後を考慮して一応書きましたが、今んとこ個人配信で盛り上がる分にはよいですね(真Any%とか神マップRTAと称されることが多いです)。
以上、お役に立ちましたら幸いです。
ここ数日で2文見て気付いた
(数十年前に英検3級。大学入試とかで6割ちょいぐらいの苦手科目。そこからさらに衰えてるが最低限の文法や単語は思い出せたりするぐらい)
夢が真実になる、夢がかなう ぐらいの意味か。バンドしか出てこない
Back to the Future
未来へ戻る? 未だにタイムスリップするぜ ぐらいの意味で捉えてる
洋楽、洋画のタイトルや頻出歌詞で単語も単語の並びも知ってるが意味まで考えたことないのが多そう。慣用句とかレベルじゃなしに(そうであったり、何かのもじりかとかでもわからない
All You Need Is Kill は大人になってから読んで、内容も加味してなんか「ただ殺すだけ」という意味と繋がっている
気が付くと朝4時になっていた。
なんか動くところまで出来たので貼っておく。
import pdfplumber import re #クリーンアップ def cleanuptext(text): #決算書の合計値を太字にしたことでpdfplumberが暴走するケースへの対処 #例 流動資産 -> 流流流流流動動動動動資資資資資産産産産産 #誤爆が怖いので、これが起きている時だけ補正します if "流流流流流動動動動動資資資資資産産産産産" in text: text = re.sub(r'(.)92;1{4,}', r'92;1', text) #△をマイナスに。 数字中のカンマを消して結合する text = re.sub(r'△([0-9])', r'-92;1', text) text = re.sub(r'▲([0-9])', r'-92;1', text) text = re.sub(r'([0-9]),([0-9])', r'92;192;2', text) #たまに、煽り屋みたいに文字の後にスペースが入る嫌がらせを修正する #例: 投 資 有 価 証 券 -> 投資有価証券 text = re.sub(r'(?<=[92;u4E00-92;u9FFF92;u3040-92;u30FF])92;s(?=[92;u4E00-92;u9FFF92;u3040-92;u30FF])', '', text) return text #今期の勘定科目の数字を取得 def get_AccountName(text, need): pattern = rf'^{need} -?[0-9]+ (-?[0-9]+)' r = re.search(pattern, text, re.MULTILINE) if r is not None: return float(r[1]) return 0 #清原ネットキャッシュを計算する。 def calc_KiyoharaNetCash(text): total_current_assets = get_AccountName(text,'流動資産合計') if total_current_assets == 0: #要約財政状態計算書しか公開していない、楽天のような素敵な会社様への対処 total_assets = get_AccountName(text,'資産合計') if total_assets != 0: #とりあえず、資産の部の6割を流動資産とみなす total_current_assets = total_assets * 0.6 else: #流動資産合計ではなく、流動資産という単語を使っている我が道を行く東北電力への対処 total_current_assets = get_AccountName(text,'流動資産') if total_current_assets == 0: raise Exception("流動資産合計の勘定科目が見つかりませんでした。"+text) total_liabilities = get_AccountName(text,'負債合計') if total_liabilities == 0: #負債合計ではなく、負債の部合計に拘るオムロンの嬉しい決算書への対策。なんでや・・・ total_liabilities = get_AccountName(text,'負債の部合計') if total_liabilities == 0: raise Exception("負債合計の勘定科目が見つかりませんでした。"+text) #負債をご丁寧にマイナス表記で書いてくれる中外製薬の親切な決算書への対策。いい加減にしろよ・・・ if total_liabilities < 0: total_liabilities = total_liabilities * -1 #投資有価証券はないこともあるので、0を容認する marketable_securities = get_AccountName(text,'投資有価証券') #print(total_current_assets,marketable_securities,total_liabilities) netcash = total_current_assets + (marketable_securities*0.7) - total_liabilities #たまに単位を1000円にしている銘柄があるので補正する if is_tanni_senyen(text): netcash = netcash / 1000 return netcash # "流動資産合計" と "負債合計" の間に "単位:千円" があるかをチェック def is_tanni_senyen(text): if "単位:千円" in text: return True if "単位: 千円" in text: return True if "単位 : 千円" in text: return True if "単位 :千円" in text: return True return False def pdf_to_kiyohara_netcash(pdfpath): with pdfplumber.open(pdfpath) as pdf: text = ''.join(page.extract_text() for page in pdf.pages) text = cleanuptext(text) #print(text) kiyohara_netcash = calc_KiyoharaNetCash(text) #print(kiyohara_netcash) return kiyohara_netcash def mymain(): import sys args = sys.argv argc = len(args) if argc <= 1: print(''' これは、清原達郎氏のネットキャッシュ比率(以下、清原ネットキャッシュ比率)を決算短信のpdfから求めるソフトです。 清原ネットキャッシュ=流動資産合計+(投資有価証券*0.7)-負債合計 清原ネットキャッシュ比率=清原ネットキャッシュ/時価総額*100 遊び方 1. 決算短信pdfから清原ネットキャッシュを求める python calc_kiyohara_netcash.py 140120240514594985.pdf 結果: 30757.0 決算書には、100万円単位で数字が書かれているはずなので、この数字の単位は100万円です。 つまり、3075700万円。 2. 時価総額を億円単位で追加することで、清原ネットキャッシュ比率を求める 時価総額が146億円なら146と書いてください。 python calc_kiyohara_netcash.py 140120240514594985.pdf 146 結果: 210.66% このコードはNYSLライセンスです。無保証、自己責任ですが、ご自由に。 かぶ探とかとつなげるといいかもね。 ''') return if argc <= 2: kiyohara_netcash = pdf_to_kiyohara_netcash(args[1]) print(kiyohara_netcash) return if argc <= 3: market_cap=float(args[2])*100 #億円から百万円表記に kiyohara_netcash = pdf_to_kiyohara_netcash(args[1]) ratio = round(kiyohara_netcash/market_cap*100,2) print(f"{ratio}%") return if __name__ == '__main__': mymain()
https://www.geonames.org から取れる、人口500人以上の都市の名前に限定すると、
Santa Maria Magdalena Cahuacan
import logging import tempfile import zipfile from collections import Counter import httpx FILE_NAME_BASE = 'cities500' GEONAME_FIELDS = ( 'geoname_id', 'name', 'ascii_name', 'alternate_names', 'latitude', 'longitude', 'feature_class', 'feature_code', 'country_code', 'cc2', 'admin1_code', 'admin2_code', 'admin3_code', 'admin4_code', 'population', 'elevation', 'dem', 'timezone', 'modification_date', ) def retrieve_cities(): """Retrieve city names from a remote server.""" response = httpx.get(f'https://download.geonames.org/export/dump/{FILE_NAME_BASE}.zip') response.raise_for_status() tmpdir = tempfile.TemporaryDirectory() with open(tmpdir.name + f'/{FILE_NAME_BASE}.zip', 'wb') as f: f.write(response.content) with zipfile.ZipFile(tmpdir.name + f'/{FILE_NAME_BASE}.zip', 'r') as z: z.extractall(tmpdir.name) with open(tmpdir.name + f'/{FILE_NAME_BASE}.txt', 'r') as f: for line in f: yield line.split('\t') def count_characters(to_check='ascii_name', filter_func=lambda _: True): """Count characters in city names.""" cities = {} for city_fields in retrieve_cities(): city = dict(zip(GEONAME_FIELDS, city_fields)) if not filter_func(city): continue counter = Counter() for c in city[to_check]: counter[c] += 1 cities[city['geoname_id']] = {'characters': counter, 'city': city} return cities def count_chars_of_city_names(cities, char=None): """Find the city with the most occurrences of a given character.""" cities_by_char_count = {} max_count = 0 max_count_char = None for city_id, data in cities.items(): if 'characters' not in data or not data['characters']: logging.debug(f'No characters found for city {city_id}', data) continue count = 0 if char and char in data['characters']: count = data['characters'][char] cities_by_char_count.setdefault(count, []).append(data) elif char is None: most_common = data['characters'].most_common(1)[0] char, count = most_common cities_by_char_count.setdefault(count, []).append(data) if count > max_count: max_count = count max_count_char = char cities_by_char_count.setdefault(count, []).append(data) return cities_by_char_count.get(max_count, []), max_count_char def not_contain_invalid_chars(city): return ( '(' not in city.get('ascii_name', '') and '/' not in city.get('ascii_name', '') ) def main(): cities = count_characters(filter_func=not_contain_invalid_chars) for char in 'abcdefghijklmnopqrstuvwxyz': cities_counted, char = count_chars_of_city_names(cities, char) max_count = cities_counted[0]['characters'][char] print(f'The character "{char}" appears the most ({max_count} times) in the following cities:') for city in cities_counted: print("\t", city['city']['ascii_name']) if __name__ == "__main__": main()
ワイ:
x = torch.tensor([
[1.0,2.0,3.0],
[4.0,5.0,6.0]
])
Claude3.5 Sonnet:
はい、channel-wise 正規化(チャネル方向の正規化)を行います。この場合、最終次元(dim=-1)がチャネルとなります。channel-wise 正規化では、各チャネルの平均を0、分散を1に正規化します。
import torch x = torch.tensor([ [1.0, 2.0, 3.0], [4.0, 5.0, 6.0] ]) # チャネル方向(最終次元)の平均と標準偏差を計算 mean = x.mean(dim=-1, keepdim=True) std = x.std(dim=-1, keepdim=True) # Epsilon を追加して、ゼロ除算を防ぐ epsilon = 1e-5 # 正規化を実行 x_normalized = (x - mean) / (std + epsilon) print("元のテンソル:") print(x) print("\n正規化後のテンソル:") print(x_normalized)元のテンソル: tensor([[1., 2., 3.], [4., 5., 6.]]) 正規化後のテンソル: tensor([[-1.2247, 0.0000, 1.2247], [-1.2247, 0.0000, 1.2247]])
ワイ:
x = torch.tensor([
[1.0,2.0,3.0],
[4.0,5.0,6.0]
])
ChatGPT o1-preview:
import torch x = torch.tensor([ [1.0, 2.0, 3.0], [4.0, 5.0, 6.0] ]) # Compute mean and standard deviation along the batch dimension (dim=0) mean = x.mean(dim=0, keepdim=True) std = x.std(dim=0, unbiased=False, keepdim=True) # Perform channel-wise normalization x_normalized = (x - mean) / std print("Normalized Tensor:\n", x_normalized)Output:
Normalized Tensor: tensor([[-1., -1., -1.], [ 1., 1., 1.]])Explanation:
Compute Mean:
The mean is computed along the batch dimension (dim=0), treating each column as a channel.
mean = x.mean(dim=0, keepdim=True)This results in mean = [[2.5, 3.5, 4.5]].
Compute Standard Deviation:
The standard deviation is computed along the same dimension with unbiased=False to match the sample size.
std = x.std(dim=0, unbiased=False, keepdim=True)This results in std = [[1.5, 1.5, 1.5]].
Normalize:
Subtract the mean and divide by the standard deviation for each channel.
x_normalized = (x - mean) / stdThis yields the normalized tensor with standardized channels.
Note: Setting keepdim=True ensures that the mean and standard deviation tensors have the same number of dimensions as x, which is necessary for broadcasting during subtraction and division.
ChatGPTの方が正しいよね?
2011年の国勢調査では、ロンドンの人口の50%未満が白人であり、
ロンドンには白人のイギリス人が人口の20%を下回る地域もあることが初めて判った。
2005年の報告によると、英国内の白人の移動は主に少数民族の多い地域から白人の多い地域への移動であり、
w.wiki/BHnh
2022年度、埼玉県警統計では犯罪発生件数は1位が川口市で4,437件
2位が越谷市で2,772件
x.com/Prof_Shigeru/status/1838966182206149028
pbs.twimg.com/media/GYVR_jlXAAAdIU0?format=jpg
x.com/Prof_Shigeru/status/1838977468558139772
x.com/Prof_Shigeru/status/1838961210710253685
クルド人密入国者が不法移民に英国の亡命制度を騙す方法を教えた衝撃的な瞬間:
「絶対に」帰国させられないようにアドバイスしていたことが調査で明らかになった。
www.dailymail.co.uk/news/article-12578125/Kurdish-smugglers-cheat-Britain-asylum-system.html
ドイツの判決「トルコのクルド人迫害を認定しない」【日本語訳】(12,000文字over) - 美桜
2021年、ドイツのミュンヘン行政裁判所は、「トルコ政府によるクルド人迫害は認められない」とする判決を下しました。
出典:
https://note.com/uruwashisakura/n/n2d43184a9ad2
x.com/UruwashiSakura/status/1825311164798255356
亡命トルコ、未成年の子供を持つ家族、男性の姉妹のPKK / YPGの疑い、偽造逮捕状の提出、証明書。
人口は約1300万人を生きています。 最大1500万。トルコのクルド人。
彼らの祖先だけのために。
連邦外務省の現在の状況報告によると、彼らはいかなる国家弾圧の対象にもなりません。
54
トルコでの非人道的または品位を傷つける扱いまたは処罰にもつながりません。
www.gesetze-bayern.de/Content/Document/Y-300-Z-BECKRS-B-2021-N-35315?hl=true
x.com/TheInsiderPaper/status/1839771999297778033
insiderpaper.com/germany-says-to-step-up-deportations-of-failed-turkish-asylum-seekers/
ドイツはトルコと合意し、トルコ移民13,500人をトルコへ大量送還することになった。
x.com/EuropeInvasionn/status/1839696124103233814
www.n-tv.de/politik/Berlin-schiebt-Tausende-Asylbewerber-in-die-Tuerkei-ab-article25257137.html
クルド人は難民ではない?「その答えは十分に説明した」 トルコ大使
このうち中東地域はトルコ、イスラエル、UAE、カタールの4カ国。
x.com/MatsumotoKatsuy/status/1833012303781880055/video/2
x.com/MatsumotoKatsuy/status/1833012303781880055
x.com/zenden_55/status/1807317968499671162/video/1
x.com/zenden_55/status/1807317968499671162/video/2
180キロ?
140キロ?
x.com/prisonridge/status/1840346233766130046
隣接の集合住宅に住む
クルド人らが代わる代わる使っていた車だった。
捜査はうやむやになった。
その後すぐ、クルド人が15人ほどすごい勢いで集まってきたんです。
彼ら、声がとても大きくて、
x.com/Parsonalsecret/status/1819014395734741035
職質されたら警察署を包囲
tinyurl.com/shokushitsu
tinyurl.com/4ca75z2e
tinyurl.com/3t4e8yyy
議員を威嚇
tinyurl.com/giin-ikaku
tinyurl.com/taishikan-rantou
歩き花火
[多文化共生][移民統合][ホワイトフライト][セグリゲーション]
全18問あります。
↓はなんとなくの評価表です。あまり気にしないでいただけると。
18問全問正解: おかしい
5〜11問正解: 楽しんでいただけたようで何よりです
1〜4問正解: そんなものでしょう
0問正解: がんばりましょう
気を抜くと全部見えます。
下は凡例です。楽しんでいたけたら幸いです。
(再掲)問題文のすぐ下に答えが来るので見るときは注意してください。
気を抜くと全部見えます。
ではスタートです!
状況の昇格。エスカレーション
OJT。
型へ方向づけるための指針。オリエンテーション。
好敵手を倒す機会。オポチュニティ。
深い裂罅。キャズム。
https://x.com/DividedSelf_94/status/1836550982056186055
@DividedSelf_94
前のコロプラ裁判のときに「任天堂が”特許権の侵害”って言えば気に入らないゲームなんでも潰せる風潮になったら嫌だなあ」って思ってたけど、やっぱ想像してたとおりになったな‥。
https://x.com/kiki_lily17/status/1836576641528795145
@kiki_lily17
https://x.com/kuma_neko_/status/1836553690666406294
くまねこ
@kuma_neko_
https://x.com/4Komatsu2/status/1836606119843893395
こ松
@4Komatsu2
えー!でもそんなんいったら
https://x.com/WispSwift/status/1836673742191087785
SwiftWisp
@WispSwift
Allegedly, the patent Nintendo is suing Pocket Pair over is a gameplay mechanic both games share where the player throws a ball-shaped capsule to capture monsters in
If true, then it’s ridiculous. The act of throwing something to capture something seems far too broad to stick
(任天堂がポケットペアを訴えている特許は、プレイヤーがボール型のカプセルを投げてモンスターを捕まえるという、両ゲームに共通するゲームプレイの仕組みだと言われている。
そりゃ悪手だろ、アリンコ
No True Scotsman
エレメンタリートポスの枠組みを用いることで、情報と存在の関係を数学的にモデル化できる。このモデルでは、存在をトポスの対象として、情報をその間の射や、内部論理における命題として表現する。
- 射の集合:任意の対象 A, B ∈ Ob(𝓔) に対し、射の集合 Hom𝓔(A, B)。
- 合成写像:∘ : Hom𝓔(B, C) × Hom𝓔(A, B) → Hom𝓔(A, C)。
- 恒等射:各対象 A に対し、idA ∈ Hom𝓔(A, A)。
- 合成の結合律:f ∘ (g ∘ h) = (f ∘ g) ∘ h。
- 恒等射の単位性:idB ∘ f = f、f ∘ idA = f。
1. 有限極限の存在:𝓔 は有限極限(特に、積と等化子)を持つ完備な圏である。
2. 指数対象の存在:任意の対象 A, B ∈ 𝓔 に対し、指数対象 BA が存在し、以下の自然同型が成り立つ。
Hom𝓔(C × A, B) ≅ Hom𝓔(C, BA)
3. 部分対象分類子の存在:特別な対象 Ω ∈ 𝓔 と単射 true: 1 → Ω が存在し、任意のモノ射(単射) m: U ↪ A に対し、一意的な射(特性射) χU: A → Ω が存在して以下の可換図式を満たす。
U ↪ A
↓ ↓
1 → Ω
1. 射としての情報:存在間の関係や変換を表す射 f: A → B は、存在 A から存在 B への情報の伝達や変換をモデル化する。
2. 部分対象としての情報:対象 A の部分対象 m: U ↪ A は、存在 A の特定の性質や部分構造(情報)を表す。これはモノ射として表現される。
3. 特性射と命題:部分対象 m: U ↪ A に対応する特性射 χU: A → Ω は、存在 A の要素が部分対象 U に属するかどうかを示す情報を提供する。
トポス 𝓔 の内部では、高階直観主義論理が展開される。ここで、以下の対応が成立する。
- 論理積(AND):P ∧ Q は積対象を用いて、χP∧Q = ⟨χP, χQ⟩ : A → Ω × Ω → Ω。
- 論理和(OR):P ∨ Q は余積(和)を用いて表現される。
- 含意(IMPLIES):P ⇒ Q は指数対象を用いて、χP⇒Q: A → ΩΩ。
- 否定(NOT):¬P は、χ¬P = χP⇒⊥ として表され、⊥ は偽を表す部分対象である。
1. 一致性:開被覆 { fi: Ui → U } に対し、各 F(Ui) の要素が F(Ui ×U Uj) 上で一致するなら、それらは F(U) の要素から誘導される。
2. 貼り合わせ可能性:F(U) の要素は、その制限が各 F(Ui) の要素に一致する。
以上の構造を組み合わせることで、情報と存在の関係を統一的にモデル化できる。
- 射 f: A → B は存在間の情報の伝達や変換を示す。
toyokeizai.net/articles/-/256915?page=4
イ●ラ●教のコ●ラ●にさえ爆●を仕掛けるPKKを甘くみないほうがいい
x.com/kulaguhan/status/1835787710742634853
2022年度、埼玉県警統計では犯罪発生件数は1位が川口市で4,437件
2位が越谷市で2,772件
x.com/Prof_Shigeru/status/1838966182206149028
pbs.twimg.com/media/GYVR_jlXAAAdIU0?format=jpg
x.com/Prof_Shigeru/status/1838977468558139772
x.com/Prof_Shigeru/status/1838961210710253685
仏世論調査によると、15~24歳のイ●ラ●教徒のうち「宗教法は国の法より重要」と答えた人は57%
tinyurl.com/houritsu
tinyurl.com/2p9xn7w4
2011年の国勢調査では、ロンドンの人口の50%未満が白人であり、
ロンドンには白人のイギリス人が人口の20%を下回る地域もあることが初めて判った。
[多文化共生][移民統合][ホワイトフライト][セグリゲーション]
自ら壊れゆくドイツ
Deutschland schafft sich ab: Wie wir unser Land aufs Spiel setzen
Thilo Sarrazin
www.amazon.co.jp/dp/3421044309/
↓
x.com/lico334/status/1824889598474080536
ドイツの判決「トルコのクルド人迫害を認定しない」【日本語訳】(12,000文字over) - 美桜
2021年、ドイツのミュンヘン行政裁判所は、「トルコ政府によるクルド人迫害は認められない」とする判決を下しました。
出典:
note.com/uruwashisakura/n/n2d43184a9ad2
x.com/UruwashiSakura/status/1825311164798255356
亡命トルコ、未成年の子供を持つ家族、男性の姉妹のPKK / YPGの疑い、偽造逮捕状の提出、証明書。
人口は約1300万人を生きています。 最大1500万。トルコのクルド人。
彼らの祖先だけのために。
連邦外務省の現在の状況報告によると、彼らはいかなる国家弾圧の対象にもなりません。
54
トルコでの非人道的または品位を傷つける扱いまたは処罰にもつながりません。
www.gesetze-bayern.de/Content/Document/Y-300-Z-BECKRS-B-2021-N-35315?hl=true
x.com/TheInsiderPaper/status/1839771999297778033
insiderpaper.com/germany-says-to-step-up-deportations-of-failed-turkish-asylum-seekers/
ドイツはトルコと合意し、トルコ移民13,500人をトルコへ大量送還することになった。
x.com/EuropeInvasionn/status/1839696124103233814
www.n-tv.de/politik/Berlin-schiebt-Tausende-Asylbewerber-in-die-Tuerkei-ab-article25257137.html
Germany to deport thousands of asylum seekers under new agreement with Turkey
Germany and Turkey have agreed to a mass deportation plan affecting 15,561 Turkish citizens, most of Kurdish origin, despite concerns over potential human rights violations.
15,561人のトルコ人(ほとんどがクルド人)に影響を与える
medyanews.net/germany-to-deport-thousands-of-asylum-seekers-under-new-agreement-with-turkey/
tinyurl.com/kazoku-yobiyose
埼玉・川口市がクルド人めぐり国に異例の訴え なぜ?現場で何が?
その中に仮放免のクルド人の治療費も含まれているとみています。
tinyurl.com/iryouhi-mibarai
tinyurl.com/26000000yen
一部の自治体は
倒れていても早く気付けるように。
MacroDroid(試用期間ありの500円?)
スマホのロック画面を解除したら指定したアドレスにメールを送るようにマクロを作製。
アクションに「メールを送る」と「変数を設定」。マクロ作動後に変数をFalseにする。
条件に「変数」でTrue指定。「サービス圏の通信状態」でサービス圏内にいる時。
別のマクロで0時を過ぎたら変数を「True」にするようにしておけば、1日1回0時以降にスマホのロック画面を解除したときにメールが飛ぶようできる。
変数リセットマクロを曜日指定すれば1週間に1回などにできる。
マクロの作動条件に電波の圏内にいる時を設定したほうがいいかも。
自分はメール送信に借りてるサーバーを指定しててだめだったけど、Gmailならオンラインになったときに送信されるかも。
すでにスマホを持ってるならMacroDroidの500円だけでできる。
コードはこんな感じ
def cartesian_product(**kwargs): def recursive_product(sets, current_index=0, current_combination=[]): if current_index == len(sets): yield tuple(current_combination) else: for item in sets[current_index]: yield from recursive_product(sets, current_index + 1, current_combination + [item]) sets = list(kwargs.values()) return list(recursive_product(sets)) # 使用例 result = cartesian_product(set1=[1, 2], set2=['a', 'b'], set3=[True, False]) print(result)
ユーザー登録フォーム画面があるとしてisShowCommentInputTextFieldがtrueであればコメント入力欄を表示、falseなら非表示という仕様があるとしよう。ありとあらゆる資料にはisShowCommentInputTextFieldはコメント欄を非表示にするフラグであると書かれている。しかし実装上は、ユーザー登録フォーム自体を非表示にする実装になっている。
実装が正とすると、仕様は誤りだ。上司に聞いてみたところ「何も間違っていない。その仕様書が正しい」という。「実装はコメント欄どころか全非表示になるので、実装の不具合か?」と聞くと、「実装は正しいし、仕様も正しい」と返してくる。意味不明なので小一時間問答を繰り返した結果引き出せた言葉は「コメント欄も非表示になるのだから正しいに決まっているだろう。当たり前の話だ」という答えだった。
そんでこのロックのデータをこんなかんじでRedisにもてばネットワーク越しに依存関係のあるロックできる?
Type | キー名 | 値 |
---|---|---|
String | "Office1" | true |
String | "Office2" | false |
String | "Room1" | true |
String | "Room2" | false |
String | "Schedule1" | true |
String | "Schedule2" | false |
String | "BusinessHour1" | true |
String | "BusinessHour2" | false |
Bitmaps | "BusinessHour1Range" | 0001111111100000000000000000000000000 |
Bitmaps | "BusinessHour2Range" | 0001111111100000000000000000000000000 |
ほんとはタスクの直列化ができればいいんだが我のあずかり知らぬ領域なのだ・・・
超バグりそう
ロックに条件持たせる
やりたいことはできてるように見えるが、うーんしんどい
# Entity Relation Diagram
# ```mermaid
# ---
# title: Rental Office example
# ---
# erDiagram
# OFFICE ||--|{ ROOM : x
# OFFICE {
# number office_id
# }
# ROOM {
# number office_id
# number room_id
# }
# ROOM ||--|{ SCHEDULE : x
# SCHEDULE {
# number room_id
# datetime start_at
# datetime end_at
# }
# OFFICE ||--|{ BUSINESS_HOUR : x
# BUSINESS_HOUR {
# number office_id
# enum week_of_day
# datetime start_at
# datetime end_at
# }
# ```
# Directed Acyclic Graph
#
# ```mermaid
# graph LR
# A[OFFICE] --> B[ROOM]
# B --> C[SCHEDULE]
# A[OFFICE] --> D[BUSINESS_HOUR]
# D --> C
# A --> C
# ```
# 基底クラス: EntityLock
class EntityLock
attr_accessor :entity_name, :entity_locked, :attribute_locks
def initialize(entity_name)
@entity_name = entity_name
@entity_locked = false # エンティティ全体のロック状態を保持
@attribute_locks = {} # IDに対するロックを管理するハッシュ
end
def lock_entity
@entity_locked = true
puts "Entity '#{@entity_name}' is now locked."
end
def unlock_entity
@entity_locked = false
puts "Entity '#{@entity_name}' is now unlocked."
end
def lock(attributes)
entity_id = attributes["#{@entity_name.downcase}_id"]
if entity_id && !@attribute_locks[entity_id]
@attribute_locks[entity_id] = true
puts "#{@entity_name} with ID '#{entity_id}' is now locked."
end
end
def unlock(attributes)
entity_id = attributes["#{@entity_name.downcase}_id"]
if entity_id && @attribute_locks[entity_id]
@attribute_locks.delete(entity_id)
puts "#{@entity_name} with ID '#{entity_id}' is now unlocked."
end
end
def locked?(attributes)
# まずエンティティ全体がロックされているかチェック
return true if @entity_locked
# 次に特定のIDがロックされているかチェック
entity_id = attributes["#{@entity_name.downcase}_id"]
if entity_id && @attribute_locks[entity_id]
return true
end
# ロックされていなければfalseを返す
false
end
end
# 子クラス: OfficeLock, RoomLock, ScheduleLock
class OfficeLock < EntityLock
def initialize
super("Office")
end
end
class RoomLock < EntityLock
def initialize
super("Room")
end
end
class ScheduleLock < EntityLock
def initialize
super("Schedule")
end
end
# 子クラス: BusinessHourLock
class BusinessHourLock < EntityLock
def initialize
super("BusinessHour")
@attribute_locks = [] # BusinessHour用のロックを配列で管理
end
def lock(attributes)
start_at = attributes["start_at"]
end_at = attributes["end_at"]
if start_at && end_at
@attribute_locks << [start_at, end_at]
puts "BusinessHour from '#{start_at}' to '#{end_at}' is now locked."
end
end
def unlock(attributes)
start_at = attributes["start_at"]
end_at = attributes["end_at"]
if @attribute_locks.include?([start_at, end_at])
@attribute_locks.delete([start_at, end_at])
puts "BusinessHour from '#{start_at}' to '#{end_at}' is now unlocked."
end
end
def locked?(attributes)
# まずエンティティ全体がロックされているかチェック
return true if @entity_locked
# 次に特定の時間範囲がロックされているかチェック
start_at = attributes["start_at"]
end_at = attributes["end_at"]
if start_at && end_at
@attribute_locks.each do |(locked_start, locked_end)|
if locked_start <= start_at && end_at <= locked_end
return true
end
end
end
# ロックされていなければfalseを返す
false
end
end
# TreeNodeクラス
class TreeNode
attr_accessor :name, :children, :parents, :lock
def initialize(name, lock)
@name = name
@children = []
@parents = [] # 複数の親ノードを保持する配列
@lock = lock # TreeNodeにロックを持たせる
end
def add_child(child_node)
child_node.parents << self # 子ノードにこのノードを親として追加
@children << child_node
end
def display(level = 0)
indent = " " * (level * 4)
puts "#{indent}#{@name}"
@children.each { |child| child.display(level + 1) }
end
def has_dependency
return false if @parents.empty?
@parents.each do |parent|
puts "#{@name} is dependent on #{parent.name}"
return true
end
@parents.any?(&:has_dependency)
end
def locked?(attributes = {})
# 自身がロックされているか確認
return true if @lock.locked?(attributes)
# 親ノードがロックされているか再帰的に確認
@parents.any? { |parent| parent.locked?(attributes) }
end
end
# 木構造の組み立て
# ロックオブジェクトの作成
office_lock = OfficeLock.new
room_lock = RoomLock.new
schedule_lock = ScheduleLock.new
business_hour_lock = BusinessHourLock.new
# ノードの作成
office_node = TreeNode.new("Office", office_lock)
room_node = TreeNode.new("Room", room_lock)
schedule_node = TreeNode.new("Schedule", schedule_lock)
business_hour_node = TreeNode.new("BusinessHour", business_hour_lock)
# ノード間の依存関係の設定
office_node.add_child(room_node) # Office -> Room
room_node.add_child(schedule_node) # Room -> Schedule
office_node.add_child(business_hour_node) # Office -> BusinessHour
business_hour_node.add_child(schedule_node) # BusinessHour -> Schedule
# 木構造の表示
office_node.display
# ロックの確認
puts "Case 1. Office全体がロックされた場合"
puts "Is office_node locked? #{office_node.locked?({})}" # false
puts "Is schedule_node locked? #{schedule_node.locked?({})}" # false
office_lock.lock_entity
puts "Is office_node locked? #{office_node.locked?({})}" # true
puts "Is schedule_node locked? #{schedule_node.locked?({})}" # true
office_lock.unlock_entity
puts "Case 2. Room id:1 がロックされた場合"
puts "Is schedule_node locked? #{schedule_node.locked?({ "room_id" => 1 })}" # false
puts "Is schedule_node locked? #{schedule_node.locked?({ "room_id" => 2 })}" # false
room_lock.lock({ "room_id" => 1 })
puts "Is schedule_node locked? #{schedule_node.locked?({ "room_id" => 1 })}" # true
puts "Is schedule_node locked? #{schedule_node.locked?({ "room_id" => 2 })}" # false
room_lock.unlock({ "room_id" => 1 })
puts "Case 3. BusinessHour start_at:0 end_at:5 がロックされた場合"
puts "Is schedule_node locked? #{schedule_node.locked?({ "room_id" => 1, "start_at" => 0, "end_at" => 5 })}" # false
puts "Is schedule_node locked? #{schedule_node.locked?({ "room_id" => 1, "start_at" => 5, "end_at" => 10 })}" # false
business_hour_lock.lock({ "start_at" => 0, "end_at" => 5 })
puts "Is schedule_node locked? #{schedule_node.locked?({ "room_id" => 1, "start_at" => 0, "end_at" => 5 })}" # true
puts "Is schedule_node locked? #{schedule_node.locked?({ "room_id" => 1, "start_at" => 5, "end_at" => 10 })}" # false
business_hour_lock.unlock({ "start_at" => 0, "end_at" => 5 })
class TreeNode:
def __init__(self, name, attributes=None):
self.name = name
self.attributes = attributes or {}
self.children = []
def add_child(self, child_node):
self.children.append(child_node)
def display(self, level=0):
indent = " " * level
print(f"{indent}{self.name} {self.attributes}")
for child in self.children:
child.display(level + 1)
def has_dependency(self):
# ルートノードや属性を持たないノードは依存関係を判定しない
if not self.children or "start" not in self.attributes or "end" not in self.attributes:
return False
# Aノードのstartとendを取得
start = self.attributes["start"]
end = self.attributes["end"]
# すべての子ノード(Bノード)に対して依存関係をチェック
for child in self.children:
if "position" in child.attributes:
position = child.attributes["position"]
if start <= position <= end:
print(f"{child.name} (position: {position}) is dependent on {self.name} (start: {start}, end: {end})")
return True
else:
print(f"{child.name} (position: {position}) is NOT dependent on {self.name} (start: {start}, end: {end})")
return False
# ノードの作成
root = TreeNode("Root")
a_node = TreeNode("A", {"start": 10, "end": 20})
b1_node = TreeNode("B1", {"position": 15})
b2_node = TreeNode("B2", {"position": 25})
# 木構造の構築
root.add_child(a_node)
a_node.add_child(b1_node)
a_node.add_child(b2_node)
# 木構造の表示
root.display()
# 依存関係のチェック
a_node.has_dependency()
こうかー
"Aah, the glory of Meiji!" How often do we hear these words, filled with nostalgia for an era that many see as the pinnacle of Japan’s greatness? It’s easy to be seduced by the past, to look back at a time when Japan emerged as a modern nation, strong, unified, and respected on the world stage. The Meiji era is often lauded as a period of unprecedented progress and reform, a time when Japan transformed itself from a feudal society into a major global power. But is this glorification of Meiji truly serving us today, or is it holding us back from facing the realities of the present and the challenges of the future?
There is no denying the achievements of the Meiji era. The rapid modernization, the establishment of a constitutional government, and the successful adaptation of Western technology and ideas were remarkable feats. However, to idealize this period without acknowledging its complexities and flaws is to oversimplify history. The Meiji era was not without its contradictions—authoritarianism, social upheaval, and the seeds of militarism were all part of this narrative. By focusing solely on the glory, we risk ignoring the lessons that history has to offer.
Nostalgia for the Meiji era often comes with a longing for a time when Japan was perceived as strong and united, a beacon of progress in a rapidly changing world. But this nostalgia can be a trap. It encourages us to look backward instead of forward, to seek solutions in the past rather than confronting the challenges of the present. In a world that is constantly evolving, clinging to the past can prevent us from adapting and growing. It can lead to a narrow vision of what Japan can be, limiting our potential to innovate and thrive in the future.
Rather than idealizing the Meiji era as a golden age, we should strive to build upon its lessons while recognizing that the world has changed. The challenges we face today—climate change, technological disruption, social inequality—require new solutions, not old ones. We must be willing to innovate, to think creatively, and to embrace the complexities of the modern world. This means letting go of the romanticized image of Meiji and focusing on what we can achieve now and in the future.
Greatness is not defined by a single era or by clinging to the achievements of the past. True greatness lies in our ability to adapt, to learn from history without being bound by it, and to create a future that reflects the values and aspirations of today’s society. The Meiji era was significant, but it is not the blueprint for our future. Instead of longing for a return to a bygone era, let us redefine what greatness means for Japan in the 21st century.
It is time to move beyond the glorification of Meiji. We can honor the achievements of that era without being trapped by them. Japan’s future lies not in a return to the past, but in embracing the opportunities and challenges of the present. By letting go of the idealized image of Meiji, we can free ourselves to imagine and build a Japan that is not only strong and united but also innovative, compassionate, and forward-thinking. Let us look to the future with the same spirit of determination and vision that once defined the Meiji era, but with a focus on what we can achieve here and now.
コメントログへのアクセス先URIが書かれたWebSocketのデータ(↓こういうの)を、4年間集めてたんだけど、
{"type":"room","data":{"name":"アリーナ","messageServer":{"uri":"wss://msgd.live2.nicovideo.jp/websocket","type":"niwavided"},"threadId":"M.QyofMf3h0ahYa9PujZiwMA","isFirst":true,"waybackkey":"waybackkey","vposBaseTime":"2022-11-21T18:30:00+09:00"}}
https://live.nicovideo.jp/watch/lv338977521
以前から「そのデータからコメントログを全取得する作業を今年とかにやらないとな…」と思ってたが、ニコニコへの大規模攻撃が起こってしまって、さらに嫌な予感がしたがニコ生復活後に的中した。
まだ確認していないけども、自分が集めてたそのデータが全部無効になってしまってるだろうし、何も言えねえ。
(大規模攻撃関係無くいつか「wss://msgd.live2.nicovideo.jp/」が変わってただろうけども、長い事(数年間)そのuriで運用されていたし、もし攻撃されてなければ間に合う可能性もあった訳で…。)
溜め息しか出ない。
やっちまったなあ…。
運営に望む事は「有料会員は過去の生配信のコメントログがダウンロードできる」とか今後そういうサービスしてくれないかな…。はあ。
ちなみに、ニコ生がHTML5プレーヤー以前だった頃のソケット通信によるコメントログ取得って、もうできないよね…。 ちなみにそれもxmlファイルが1年分ぐらい溜めてる…。