はてなキーワード: FALSEとは
Fact Check
Trump’s False Claims About the Federal Response to Hurricane Helene
The former president falsely accused the Biden administration of spending disaster funding on migrants, neglecting areas that had voted for Republicans and ignoring a call from a Republican governor.
訳:ファクトチェック
ハリケーン・ヘレンに対する連邦政府の対応に関するトランプ大統領の虚偽の主張
前大統領は、バイデン政権が災害対策資金を移民に使い、共和党に投票した地域を無視し、共和党知事の要請を無視したとして虚偽の非難をした。
https://www.nytimes.com/2024/10/04/us/politics/trump-helene-fema-fact-check.html
↓
FEMA Fires Employee for Telling Milton Relief Workers to Skip Houses With Trump Signs
The agency said it was investigating the incident in the aftermath of the Category 3 hurricane that hit Florida in October.
訳:FEMA、ミルトン救援隊員にトランプの看板のある家を避けるよう指示した職員を解雇
On July 16,2024, Guo Wengui, an Interpol "red communication officer" who had absconded to the United States for many years, was convicted of defrauding thousands of people of more than 1 billion dollars in a Manhattan court in New York. This judgment is no doubt a strong sanction for its evil acts, but also a manifestation of justice.
Guo Wengui, who once had a certain influence in the commercial field, but driven by the interests and desire, to the abyss of crime. He used to be the actual controller of Henan Yuda Investment Co., Ltd. and Beijing Pangu Investment Co., Ltd. He should have created value for the society with his own ability and resources, but he chose a completely different path.
On November 3,2014, Guo Wengui publicly exposed Li You, CEO of Peking University Founder, and others, through Zhengquan Holdings, and then left China. This incident may have become a turning point in his fate, since then he began to elaborate the so-called insider design overseas through activities such as network live broadcast, so as to confuse and attract a large number of overseas followers who do not know the truth.
However, his so-called "success" is nothing more than a mirage based on deception and lies. Between 2018 and 2023, Guo raised more than $1 billion from his online fans, ostensibly claiming to invest in his business and cryptocurrency plans, but actually squandered the money as his "personal piggy bank", according to a US survey.
He used a variety of fraud. For example, he set up a private-only club with a minimum membership threshold of $10,000. Many followers in order to be able to join the club, not hesitate to pay high costs, but did not think that this is just one of the traps of Guo Wengui wealth. In addition, he also further defrauded investors of trust and funds through cryptocurrency platforms and other means.
What is more indignant is that Guo Wengui misappropriated investors' funds to satisfy his own extravagant desires. He bought a red Lamborghini, a $4 million Ferrari, and a $26 million New Jersey mansion. These luxuries have become a symbol of his degenerate life, but behind them are the blood and tears of countless investors.
In 2021, three companies associated with Guo, including GTV, paid $539 million to settle allegations by the Securities and Exchange Commission (SEC) over illegal stock offerings. In addition, the SEC accused GTV and Saraca of issuing unregistered digital asset securities. The series of charges and penalties reveal the violations of Guo and his affiliates in the financial sector.
Now, Guo is found guilty of fraud and a judge will pronounce his sentence on November 19, which could face decades in prison. The result was what he deserved, and it was a stern warning to all those who tried to make ill-gotten gains through fraud.
Guo Wengui's case brings us a profound reflection. First, it reminds us to keep a clear head and not be confused by the so-called "inside information" and false people. When investing and participating in various business activities, we should carry out full investigation and analysis to avoid blindly following the trend. Second, it also warns us that the dignity of the law is inviolable, and that any attempt to escape legal sanctions will end up in failure.
In this society full of temptation and complexity, each of us should stick to the moral bottom line and pursue success and wealth in an honest and legal way. Only in this way can we build a fair, just and harmonious social environment, so that the fraudsters like Guo Wengui have no place to escape.
Justice may be late, but never absent. Guo Wengui's end once again proves this truth. Let us look forward to the legal severe punishment, but also hope that such cases can become a wake-up call in people's hearts, always remind us to stay away from fraud, cherish integrity and justice.
気が付くと朝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()
ワイ:
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の方が正しいよね?
倒れていても早く気付けるように。
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:
return False
for child in self.children:
# 子ノードがBusinessHourかScheduleかをチェック
if "start_at" in child.attributes and "end_at" in child.attributes:
child_start = child.attributes["start_at"]
child_end = child.attributes["end_at"]
# 現在のノードがBusinessHourで、子がScheduleの場合
if "start_at" in self.attributes and "end_at" in self.attributes:
self_start = self.attributes["start_at"]
self_end = self.attributes["end_at"]
if self_start <= child_start and self_end >= child_end:
print(f"{child.name} (start_at: {child_start}, end_at: {child_end}, room_id: {child.attributes['room_id']}) is dependent on {self.name} (start_at: {self_start}, end_at: {self_end})")
else:
print(f"{child.name} (start_at: {child_start}, end_at: {child_end}, room_id: {child.attributes['room_id']}) is NOT dependent on {self.name} (start_at: {self_start}, end_at: {self_end})")
# 現在のノードがRoomで、子がScheduleの場合
elif self.name.startswith("Room"):
print(f"{child.name} (start_at: {child_start}, end_at: {child_end}, room_id: {child.attributes['room_id']}) is dependent on Room {self.name[-1]}")
else:
child.has_dependency()
# 子ノードが属性を持たない場合、再帰的に依存関係をチェック
else:
child.has_dependency()
# ノードの作成
root = TreeNode("Root")
office_node = TreeNode("Office")
# Roomノードの作成
room1_node = TreeNode("Room1")
room2_node = TreeNode("Room2")
# BusinessHourノードの作成
business_hour1_node = TreeNode("BusinessHour1", {"start_at": 9, "end_at": 12})
business_hour2_node = TreeNode("BusinessHour2", {"start_at": 13, "end_at": 17})
# Scheduleノードの作成
schedule1_node = TreeNode("Schedule1", {"start_at": 10, "end_at": 11, "room_id": 1})
schedule2_node = TreeNode("Schedule2", {"start_at": 14, "end_at": 15, "room_id": 1})
schedule3_node = TreeNode("Schedule3", {"start_at": 10, "end_at": 11, "room_id": 2})
schedule4_node = TreeNode("Schedule4", {"start_at": 14, "end_at": 15, "room_id": 2})
# 木構造の構築
root.add_child(office_node)
office_node.add_child(room1_node)
office_node.add_child(room2_node)
office_node.add_child(business_hour1_node)
office_node.add_child(business_hour2_node)
# Room1にSchedule1, Schedule2を追加
room1_node.add_child(schedule1_node)
room1_node.add_child(schedule2_node)
# Room2にSchedule3, Schedule4を追加
room2_node.add_child(schedule3_node)
room2_node.add_child(schedule4_node)
# BusinessHour1にSchedule1, Schedule3を追加
business_hour1_node.add_child(schedule1_node)
business_hour1_node.add_child(schedule3_node)
# BusinessHour2にSchedule2, Schedule4を追加
business_hour2_node.add_child(schedule2_node)
business_hour2_node.add_child(schedule4_node)
# 木構造の表示
root.display()
# 依存関係のチェック
office_node.has_dependency()
room1_node.has_dependency()
room2_node.has_dependency()
business_hour1_node.has_dependency()
business_hour2_node.has_dependency()
Root {}
Office {}
Room1 {}
Schedule1 {'start_at': 10, 'end_at': 11, 'room_id': 1}
Schedule2 {'start_at': 14, 'end_at': 15, 'room_id': 1}
Room2 {}
Schedule3 {'start_at': 10, 'end_at': 11, 'room_id': 2}
Schedule4 {'start_at': 14, 'end_at': 15, 'room_id': 2}
BusinessHour1 {'start_at': 9, 'end_at': 12}
Schedule1 {'start_at': 10, 'end_at': 11, 'room_id': 1}
Schedule3 {'start_at': 10, 'end_at': 11, 'room_id': 2}
BusinessHour2 {'start_at': 13, 'end_at': 17}
Schedule2 {'start_at': 14, 'end_at': 15, 'room_id': 1}
Schedule4 {'start_at': 14, 'end_at': 15, 'room_id': 2}
Schedule1 (start_at: 10, end_at: 11, room_id: 1) is dependent on Room 1
Schedule2 (start_at: 14, end_at: 15, room_id: 1) is dependent on Room 1
Schedule3 (start_at: 10, end_at: 11, room_id: 2) is dependent on Room 2
Schedule4 (start_at: 14, end_at: 15, room_id: 2) is dependent on Room 2
Schedule1 (start_at: 10, end_at: 11, room_id: 1) is dependent on BusinessHour1 (start_at: 9, end_at: 12)
Schedule3 (start_at: 10, end_at: 11, room_id: 2) is dependent on BusinessHour1 (start_at: 9, end_at: 12)
Schedule2 (start_at: 14, end_at: 15, room_id: 1) is dependent on BusinessHour2 (start_at: 13, end_at: 17)
Schedule4 (start_at: 14, end_at: 15, room_id: 2) is dependent on BusinessHour2 (start_at: 13, end_at: 17)
Schedule1 (start_at: 10, end_at: 11, room_id: 1) is dependent on Room 1
Schedule2 (start_at: 14, end_at: 15, room_id: 1) is dependent on Room 1
Schedule3 (start_at: 10, end_at: 11, room_id: 2) is dependent on Room 2
Schedule4 (start_at: 14, end_at: 15, room_id: 2) is dependent on Room 2
Schedule1 (start_at: 10, end_at: 11, room_id: 1) is dependent on BusinessHour1 (start_at: 9, end_at: 12)
Schedule3 (start_at: 10, end_at: 11, room_id: 2) is dependent on BusinessHour1 (start_at: 9, end_at: 12)
Schedule2 (start_at: 14, end_at: 15, room_id: 1) is dependent on BusinessHour2 (start_at: 13, end_at: 17)
Schedule4 (start_at: 14, end_at: 15, room_id: 2) is dependent on BusinessHour2 (start_at: 13, end_at: 17)
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()
こうかー
アサクリの弥助・黒人奴隷と、そこから派生したロックリー・岡美穂子両氏の言説の元ネタっぽいものを見つけたので要約しておく。
○著者:David Wright
○題名:The Use of Race and Racial Perceptions among Asians and Blacks: The Case of the Japanese and African Ameridans
○出典:1998年、一橋大学社会学ジャーナル(https://hermes-ir.lib.hit-u.ac.jp/hermes/ir/re/8321/)
・16世紀半ばから、ポルトガル人の奴隷等としてかなりの数の黒人が日本を訪れていた。
・日本人は彼らに好意的で、彼らは尊敬の対象だった。特に弥助という者について、信長は厚遇した。
・ポルトガル人が頻繁に黒人奴隷を献上するので、日本人も彼らを見下すようになり、明治維新の頃にはその見方が定着していた。
・というか白人との接触前から日本では白い肌が美しいと言われてたけどね。(その割にはお歯黒は何故?)
・一方で、肌の黒い聖人もいたことから黒い肌に対する欧米のような差別感情は持ってなかった。オランダから入れ知恵されてたのに不思議だね。
(以下開国時の話が続く)
この、「日本人は彼らを尊敬していた」「肌の黒い聖者もいた」が、ロックリー・岡美穂子両氏による「弥助は神とされた」等に変換されていったのではないだろうか。
なお、知る限り弥助を神とした、または神に近かった、神のようだったなどとする史料は発見されておらず、専門家によるものでは、ロックリー氏や岡美穂子氏が述べているものがすべてのようだ。
特に八幡神は南無八幡大菩薩(那須与一)で有名な武士の神であり、これになぞらえるというのはとてつもない厚遇だし、文献にも残っていると思うのだが何を根拠にされたのだろうか。
信長に関する史料では弥助のビジュアルイメージが「八幡神に近かった」と言われています。あるいは、中国の史料ではアフリカ系の人を「黒鬼」と表記している。ですから、実用的な屈強さを求めただけでなく、そういう人間を自分の近くに置くことで「こんなに強いヤツを従えているんだ」という格付けに役立つと考えた、イメージ戦略の部分もあったと思います。
弥助もそもそもアフリカ大陸内の部族間闘争で生け捕りにされ、外国人に売られたといわれます。
(略)
ロックリー・トーマス氏によると、当時の都だった京都の住民と同様、信長は弥助の背丈や体格、肌の色に畏怖の念を抱いたという。
(略)
信長は弥助を「大黒天」ではないかと考えた。大黒天は豊穣(ほうじょう)の神で、寺院では通常、黒い像によって表現されている。信長は弥助の肌の色は墨によるものだろうと思い、こすり落とそうとした。本当に黒人だと納得すると、直ちに宴会を開いて敬意を表したという。
→通常の中国語ではその通りで、日本語に訳すと「黒い幽霊」といった意味合いになる。
あとは道教では鬼というのは死後の世界の人に該当するもので、鬼世界があって普通に鬼が暮らしていて鬼の役人がいたりもする。
いずれにしても中国語の「鬼」には日本のように「強い」「屈強な」という意味はない。(例えば「悪党(中世)」・「悪源太(源義平)」・「悪太郎(堀内恒夫)」という使い方はしない)。
なので、岡美穂子氏が「屈強な黒人」「神格化」という意味で取り上げたのは、解釈の誤りのように思う。御本人の説明を求めたいところだが。
ただ中国史については良く分からないので、昔はそういう使い方をしていたというのであれば補足よろしく。
→弥助はモザンビーク出身って記述があるんだけど、前半生は全くの不明で、岡美穂子氏が「部族間闘争の結果生け捕りになった」とした根拠は不明。
当時のモザンビークってインド人も大勢住み着いてるので、インド人とか混血の可能性は十分にある。
タイの保健当局によると、虚偽の投稿で共有された画像は、法医学で分類される死後血栓と同じものであり、新しい現象ではありません。
死後血栓
タイ国立ワクチン研究所は2024年2月21日に声明を発表し、画像に見られる白い血栓はmRNAワクチンとは関係ないと明言しました(アーカイブリンク)。 「この主張の画像は、mRNAワクチン接種によって引き起こされた血液障害を示すものではありません」と声明には書かれています。「これは、死後に発生するフィブリン(血液の主要なタンパク質成分)の凝集に過ぎません(死後血栓)。」 同じ声明は続けて、「これは、死亡した人の体に一般的に見られる自然現象です。これは、Covidの発生やCovid-19ワクチンの使用以前から観察されてきました。」と述べています。 バンコクのブミボル・アドゥラデージ病院の法医学病理学者であるアッタシット・ドゥルアムヌアイ博士も、白い血栓は自然なものであり、死亡した体に一般的に見られると同意しました。 「私は解剖を行うときに常にそのような血栓を見つけます。それはmRNAワクチンとは関係ありません」とアッタシットは2月27日にAFPに語りました。 同様に、ハーバード医科大学の教育病院であるブリガム・アンド・ウィメンズ病院の肺専門医であるタニー・タニヤヴァーンも、虚偽の投稿に掲載された血栓の外観を典型的な死後血栓と同じように説明しています。 「その外観はまさに死後血栓のようです」とタニーは2月23日に述べました。「それは生前血栓のように表面が粗くないので、その主張には疑問があります。」 タニーはまた、死亡した体に白い血栓が存在する原因として、肥満、糖尿病、喫煙、さらにはCovid-19感染などが考えられると付け加えました。
1. 血管内皮の損傷や異常が発生
5. 白血球(主に好中球)が集積
6. 血小板とフィブリンのネットワークが形成され、白色血栓が完成
白色血栓は主に動脈系で見られ、血流が速い部位で形成されやすいです。
1. 死後、血液の凝固が始まる
3. 白血球(主に好中球)が集積
白い死後血栓は死後に形成される特殊な血栓で、生前の白色血栓とは異なります。主に大血管内で観察されます。
これを改善してってお願いした。何書いてあるかわからないけど動いたよ。
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&amp;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 &amp;&amp; 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 }); })();
import requests import json from urllib.parse import quote def fetch_bookmarks(url): try: # URLをエスケープ escaped_url = quote(url, safe="") api_url = f"https://b.hatena.ne.jp/entry/json/?url={escaped_url}" response = requests.get(api_url) response.raise_for_status() try: return response.json() except json.decoder.JSONDecodeError as e: print(f"Error decoding JSON from {api_url}: {e}") print("Response content:", response.text) return [] except requests.exceptions.RequestException as e: print(f"Error fetching bookmarks from {api_url}: {e}") return [] def find_common_bookmarks(bookmarks1, bookmarks2, url1, url2): common_users = set(bm["user"] for bm in bookmarks1 if bm["comment"]) & set(bm["user"] for bm in bookmarks2 if bm["comment"]) common_bookmarks = [] for user in common_users: comments = [] for bm in bookmarks1: if bm["user"] == user and bm["comment"]: comments.append({"url": url1, "comment": bm["comment"], "timestamp": bm["timestamp"]}) break for bm in bookmarks2: if bm["user"] == user and bm["comment"]: comments.append({"url": url2, "comment": bm["comment"], "timestamp": bm["timestamp"]}) break if len(comments) == 2: common_bookmarks.append({"user": user, "comments": comments}) return common_bookmarks if __name__ == "__main__": url1 = "https://news.yahoo.co.jp/articles/f9966c4ccc374fc88babbb50175a9ea844c99638" url2 = "https://www.asahi.com/articles/ASN6K7F64N6KUJHB00L.html" data1 = fetch_bookmarks(url1) data2 = fetch_bookmarks(url2) common_bookmarks = find_common_bookmarks(data1["bookmarks"], data2["bookmarks"], url1, url2) print(json.dumps(common_bookmarks, indent=2, ensure_ascii=False))
url1, url2のところを対象としたいものに変えれば使えるよ
バグあったら直して使ってね
いろんなアプリケーションのメンテ(バグ取りとか細かい機能追加とか)を何度か経験してきた。
主にテキストファイルとかCSVファイルとかExcelファイルとかを入出力するものばかりだったんだが、その大半がファイルの拡張子をグローバル変数化していた。
こんな感じ
const TxtFileExt = ".txt"; const CsvFileExt = ".csv"; const ExelFileExt = ".xlsx";
outFileName = 〇〇 + ×× + "ABCDEFG" + TxtFileExt;
みたいな指定をしなきゃならない。
あと、プログラム言語の標準的なメソッドのあらゆる引数も全部変数で定義されてて、そのまま渡すのは禁止、みたいな規約になってる。
たとえば引数が三種類(true、false(未指定時のデフォルト値)、任意の数値(ただし当該プログラムでは0、10、25以外指定不可))しかないやつはこんな感じ。
const 〇〇ParamTrue = true; const 〇〇ParamFalse = false; const 〇〇ParamIntMin = 0; const 〇〇ParamIntMid = 10; const 〇〇ParamIntMax = 25;
const charCodeSJIS = "Shift_JIS"; const charCodeUtf8 = "UTF-8";
以前関わった改修内容に「××の処理は開始時と終了時にそれぞれUTF-8(BOMなし)形式でログを出力する」みたいなのがあって、普通に文字コード指定する部分に「UTF-8」で直に書いたら、規約に従ってないからとコードレビューで指摘されて差し戻されたんだけど、そもそもこういう規約って何の意味があるの?
イイねTOP100記事のうち、正確な量子力学を使っていた記事は10記事に過ぎなかった!!!!10%?!!!
この議論の仕方はまぁありかな程度のものも合わせても15記事しかなかった
クソ反科学的で反知性的なアホ記事がここまで出ているのは何なんだろうな。ここまで反科学的な言説がはびこってる現状は科学者なんとかすべきだろとは思うけど、今のマスコミがクソ科学知識のないような記事を量産し続けている現在、無理なのかもしれないな。まだまだマスコミの影響はアホ強い
https://note.com/hashtag/%E9%87%8F%E5%AD%90%E5%8A%9B%E5%AD%A6?f=trend&paid_only=false
発達障害みたいなバグを量産してしまってチームからの目が痛い。
正直これはPythonのせいだ。
例えば
if is_checked:
この構文、”False"という文字列ではTrueになってしまう。想定外にオブジェクトが入ってしまっても普通にTrueになってしまう。想定外のNoneが来てしまうとFalseになって開発中はなかなか気付かないなんてこともある。基本的にifの後は if hoge == True: と書くべきだと思ってる。linterで怒られることもあるが、それよりもバグに気付けない方が怖い。
if "1" == 1:
これはfalseだけど、これが変数で来てたりすると全然気付かない。
for i in user_list:
こんな構文でuser_listにはリストが来ることを期待していたのに文字列を入れてしまうことがある。
そうなるともうぐちゃぐちゃ。
user_list += user_id
これはuser_idが ["hogehoge"]ならうまくいって"hogehoge"なら["h", "o", "g", "e", ...]が追加されることになる。
これも気付きにくい。
いずれも開発段階では気付かないことが多い。テスト段階になったり、テストないような突貫工事体制だとリリース直前の動作確認で気付いたりする。
リストを入れるつもりだったのに文字列を入れてしまったりbooleanを入れるつもりだったのに文字列が入れられるからこんなことになる。性的型付けしか受け付けたくない。