はてなキーワード: pushとは
自動で安価をつけて返信するプログラムでもこんなに長く複雑になる(一部抜粋)
/**************************************
以下のCSV_DIR, FILE_PATHS, SETTINGSを書き換えてね。 <h3>o- *************************************/</h3>
//CSVファイルが置かれてるディレクトリのパス。投稿前にエラー出たら大体ここの設定ミス。 例:"C:\\Users\\sakuraimasahiro\\Documents\\iMacros\\Macros\\rentou\\";
'C:\\Users\\USER\\Desktop\\iMacros\\Macros\\rentou\\';
//ファイルのパス。CSVは絶対パスで、拡張子も必要。iimは相対パスでよく、拡張子不要。
const FILE_PATHS = {
textCsv: CSV_DIR + 'textNoAnker.csv',
//レス用投稿文が書かれたCSV。通常とレス用で分けないなら同じファイルを使えばいい。
replyTextCsv: CSV_DIR + 'textReply.csv',
};
baseWaitTime: 5,
//baseWaitTime+0~waitTimeRange(ランダム)だけ待つ
waitTimeRange: 5,
//連投しすぎだと忠告された場合に処理を一時停止させる時間(秒)
waitTimeForAvoidingPunishment: 60 * 30,
//メール
mail: 'sage',
//名前設定
name: '',
//以下、偽装ワッチョイ設定。浪人でワッチョイを非表示にしてるときだけtrueにしてね。
//妙なニックネーム(ワッチョイ、アウアウウーなど)をランダムで決めて付加するかどうか。true=付加する。false=付加しない。
//妙なニックネームの後に付く8桁の文字列をランダムで決めて付加するかどうか。
},
//アンカー無し投稿をするならtrue。しないならfalse。noAnkerPostかreplyPostのどちらかはtrueにすること(両方trueでもOK)。
//アンカー付き投稿(返信)をするならtrue。しないならfalse。もしnoAnkerPostとreplyPostの両方がtrueの場合、投稿は返信が優先され、返信対象が見つからなくなったらアンカー無し投稿をする。
//最初に取得するアンカー無し投稿文CSVファイルの行番号。もし返信用と同じCSVファイルを使うなら-1と入力。
noAnkerPostTextCsvStartRow: 1,
//最初に取得する返信用投稿文CSVファイルの行番号。もしアンカー無しと同じCSVファイルを使うなら-1と入力。
//テキストCSV/返信用テキストCSVの取得行が最終行に達したら最初の行まで戻るかどうか。true=戻る。false=マクロ終了。
//返信する場合、これより小さなレス番には返信しない。返信を投稿すると、この数値は前回の返信先のレス番に更新される。
minAnker: 895,
//返信する場合、名前に以下の文字列を含む投稿にアンカーをつけて返信する(ワッチョイやIPなど名前フィールドにあるものならなんでも可)。配列で複数指定可能。指定無しなら空配列([])。filterNamesとfilterNamesNotIncluded共に無指定ならレス番1から順に返信していく(minAnkerが設定されてればそこから順に)。以下のfilter系は全て併用可能。
//↑とは逆に、名前に以下の文字列を含まない投稿にアンカーをつけて返信する。↑と併用も可能。
//返信する場合、本文に以下の文字列を含む投稿にアンカーをつけて返信する。
filterText: ['自演かな', '自演わらわら', 'スクリプト使うの', '安価ガバ', '>>660', '自演で擁護', '最後' ,'あいうえお', 'かきくけこ', 'さしすせそ', 'なにぬねの', 'はひふへほ', 'まみむめも', 'やいゆえよ', 'やゆよ', 'らりるれろ', 'わいうえを', 'わをん', 'わいうえをん'],
},
//自分のIPアドレスの確認。VPNとかでIPを変更してマクロを動かしてるとき、突然VPNが作動しなくなってIPが元に戻ったときにマクロを止めるためのもの。
//以下の文字列が自分の現在のIPアドレスに含まれている場合、マクロを一時停止する。基本的に自分の本当のIPアドレスを入力。
},
//浪人設定。最後に動作を確認したのは5年くらい前で、今も同じように動作するかは、浪人を持ってないから確認できずわからない。
//浪人にログインしてるかどうかをチェックするかどうか。trueならする。falseならしない。trueにしていてもし浪人にログインしていないことを確認したらログインしにいく。
password: '1234',
},
};
/**************************************
設定箇所終わり。
https://info.5ch.net/index.php/%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%82%81%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E6%97%A9%E8%A6%8B%E8%A1%A8 <h3>o- *************************************/</h3>
/**************************************
・NULL演算子(??)は使えない。論理積(&&)は使える。
・オブジェクトの分割代入はできない。
・importはできない。 <h3>o- *************************************/</h3>
/**************************************
関数 <h3>o- *************************************/</h3>
/**
* ここから始まる。
*/
checkSettings();
var _TextCsvCursors = new TextCsvCursors(
SETTINGS.postSettings.noAnkerPostTextCsvStartRow > 0
? SETTINGS.postSettings.noAnkerPostTextCsvStartRow - 1
: SETTINGS.postSettings.noAnkerPostTextCsvStartRow,
SETTINGS.postSettings.textCsvLoop,
),
SETTINGS.postSettings.replyPostTextCsvStartRow > 0
? SETTINGS.postSettings.replyPostTextCsvStartRow - 1
: SETTINGS.postSettings.replyPostTextCsvStartRow,
SETTINGS.postSettings.textCsvLoop,
),
);
var _LoopStatuses = new LoopStatuses(0, SETTINGS.postSettings.minAnker);
const _MyPosterName = new MyPosterName({
name: SETTINGS.nameSettings.name,
});
const _ThreadUrl = openPromptThreadUrl();
//ループ
while (true) {
SETTINGS.ipSettings.checkIp && checkCurrentIpNotTheIp();
//スレを開く
openUrl(_ThreadUrl.fullUrlHttps());
//浪人にログインする設定なら、浪人にログインしているかどうかを確認し、していなければログインしにいく。
if (SETTINGS.roninSettings.checkLogin) {
}
}
if (SETTINGS.postSettings.replyPost) {
const targetAnkerNumber = createPostDOMList()
.filterPostnumberHigher(_LoopStatuses.currentMinAnker())
.filterByPostername(SETTINGS.postSettings.filterNames)
.filterByPosternameNotIncluded(
SETTINGS.postSettings.filterNamesNotIncluded,
)
.filterByText(SETTINGS.postSettings.filterText)
if (targetAnkerNumber !== null) {
const r = _TextCsvCursors.takeNextRowTextAsReply(targetAnkerNumber);
messageDisplay(`返信対象有り。アンカー先: ${targetAnkerNumber}`);
return {
...r,
updatedLoopStatuses:
_LoopStatuses.updateMinAnker(targetAnkerNumber),
};
}
}
if (SETTINGS.postSettings.noAnkerPost) {
//返信対象無し、或いは返信しない設定の場合。アンカー無し投稿文を作る。
const r = _TextCsvCursors.takeNextRowTextAsNoAnker();
messageDisplay('返信対象無し。アンカー無し投稿。');
return {
...r,
updatedLoopStatuses: _LoopStatuses,
};
}
return null;
})();
if (p) {
//投稿。
nickname: SETTINGS.nameSettings.nickname,
korokoro: SETTINGS.nameSettings.korokoro,
area: SETTINGS.nameSettings.area,
}),
SETTINGS.mail,
p.text,
);
//_TextCsvCursorsと_LoopStatusesを更新。
_TextCsvCursors = p.updatedTextCsvCursors;
_LoopStatuses = p.updatedLoopStatuses.incrementPostCount();
`投稿回数: ${_LoopStatuses.currentPostCount()}`,
`minAnker: ${_LoopStatuses.currentMinAnker()}`,
`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,
`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,
]);
} else {
`返信対象が現われるのを待機中...。`,
`投稿回数: ${_LoopStatuses.currentPostCount()}`,
`minAnker: ${_LoopStatuses.currentMinAnker()}`,
`今回アンカー無し投稿取得行: ${_TextCsvCursors.currentRows().noAnker}`,
`今回アンカー有り投稿取得行: ${_TextCsvCursors.currentRows().reply}`,
]);
}
wait(SETTINGS.baseWaitTime + randomRange(0, SETTINGS.waitTimeRange));
}
}
/**
* 投稿処理と投稿結果を見てリトライしたりマクロ終了したり。
* @param {string} serverName サーバー名
* @param {MyPosterName} _MyPosterName
* @param {string} postMail メール
*/
serverName,
postMail,
_MyText,
retryTimes = 0,
) {
const r =
retryTimes === 0
? new ValuesOfPost(serverName, _MyPosterName, postMail, _MyText).post(
postTo5chTread,
)
serverName,
postMail,
_MyText,
).postSubstring(retryTimes, postTo5chTread, postConfirm);
if (r) {
back();
return;
}
wait(7);
const error = createPostErrorMessage().analyze();
messageDisplay(error.message);
if (error.order === 'KILL') {
kill();
} else if (error.order === 'SKIP') {
return;
} else if (error.order === 'TRUNCATE') {
back();
serverName,
postMail,
_MyText,
retryTimes + 1,
);
} else if (error.order === 'WAIT') {
wait(SETTINGS.waitTimeForAvoidingPunishment);
serverName,
postMail,
_MyText,
retryTimes,
);
} else if (error.order === 'LOGIN') {
serverName,
postMail,
_MyText,
retryTimes,
);
}
return;
}
/**
* 現在のIPアドレスに、SETTINGS.ipSettings.avoidTheIpの値が含まれていないことを確認する。含まれていたらマクロを一時停止。
* @returns
*/
function checkCurrentIpNotTheIp() {
openUrl('https://www.cman.jp/network/support/go_access.cgi');
const _IpAdress = createIpAdressFromCMan();
if (_IpAdress.includes(SETTINGS.ipSettings.avoidTheIp)) {
pause('現在のIPに指定した値が含まれていることを確認。');
}
return;
}
/**
* @returns
*/
if (
SETTINGS.postSettings.noAnkerPost === false &&
SETTINGS.postSettings.replyPost === false
) {
return kill('設定エラー。noAnkerPostとreplyPost両方ともfalseになってる。');
}
if (
SETTINGS.postSettings.noAnkerPostTextCsvStartRow < 0 &&
SETTINGS.postSettings.replyPostTextCsvStartRow < 0
) {
return kill(
'設定エラー。noAnkerPostTextCsvStartRowとreplyPostTextCsvStartRow両方とも-1になってる。',
);
}
if (
SETTINGS.postSettings.noAnkerPostTextCsvStartRow === 0 ||
SETTINGS.postSettings.replyPostTextCsvStartRow === 0
) {
return kill(
'設定エラー。noAnkerPostTextCsvStartRow/replyPostTextCsvStartRowの初期値は-1或いは1以上で。',
);
}
}
/**
* 入力フォームを表示して入力されたスレのURLを受け取る。
*/
function openPromptThreadUrl() {
const url = prompt('スレURLを入力');
}
/**
* 開いてるスレのレス全て読み取ってPostListインスタンスを作って返す。
* 重すぎるので使うのやめ。どうやらインスタンスの大量生成が原因な模様。
*/
const posts = window.document.getElementsByClassName('post');
return new PostList(Array.from(posts).map((e) => new Post(e)));
}
/**
* 開いてるスレのレス全て取得してPostDOMListに格納して返す。
* @returns
*/
function createPostDOMList() {
const posts = window.document.getElementsByClassName('post');
for (let index = 0; index < posts.length; index++) {
//HTMLCollectionからElementを1つずつ抽出して配列に。
arrPostDOMList.push(posts.item(index));
}
return new PostDOMList(arrPostDOMList);
}
/**
* 開いてる投稿結果画面に表示されてるエラーを読み取ってPostErrorMessageインスタンスを作って返す。
*/
function createPostErrorMessage() {
window.document
デレマス(デレステ)で今夏以降開催される総選挙……ではない、後釜イベントStage for Cinderellaのシステムへの感想とか、あとは誰が上位に入りそうかの下馬評。
誰は行けそうだ、誰が本命で誰が大穴、誰は厳しいんじゃないか、そういう話題をアイドル名を伏せずに出すので、そういうドラフト生みたいな話題がダメなヤツはこの時点でブラバ。いいな。俺は言ったからな。
仕組みは割愛する。簡単に言うと190人を4ブロックに分けて予選、予選上位5名+プレーオフの21名で本戦。予選上位5人x4組にそれぞれ楽曲(+声)、本戦上位5人に楽曲(+衣装SSRもろもろ+声)、本戦一位がシンデレラガール。
CG狙い陣営はウオーミングアップ、ボイス陣営はここが本番、「CGは無理だけど曲はあげたい」って陣営はいるかも(あまり興味がない)。第7~8回ぐらいの温度感 (( 人気投票とボイス争奪戦のバランスとして )) の総選挙が4ブロック開催されんじゃねえかなあという気がする。大前提として人気投票で、そこにボイス争奪戦がどこまで絡んでくるかという話だが、運営はあまり「ボイスが付く」というところをフィーチャーしたがらないし、ボイスがないキャラに無関心でもデレステは楽しく遊べるゲームなので、結局この形式では人気投票に近くなる(=声付き有利になる)……と思うのだけど、「よくわからないけど、たくさんボイスがつけられそう」とか「5票あるからボイスにも票を回せそう」という反応を自分の狭い観測範囲の中でもたくさん見かけるので、自分が思ったよりボイスへの流れがあり、各ブロック新ボイスが1、2枠、という感じになると思っている。
ボイス、8回以前は前回以前の結果や中間発表もあり「勢い」みたいなのが観測できたが、9回10回は3人固定、結果発表も中間なし上位のみとかなりのブラックボックスで、しかも蓋を開けてみれば「総選挙票のついでのボイス票が大勢を決した」みたいな結果だったので、ボイスへの広報活動の手応えが得られない問題を有していた。今回はボイスへの期待感に加え、「決まった投票先がなく手持ちの票を余す人」(これまでも居たには居たが、これまでのそういう人はただボイスに関心がなかった人なのに対し、関心がある人がそのような立場になりうるというのは9回10回より健全そう)が確実に発生するので、広報活動の手応えがわずかなりとも得られる環境に戻りそうなのは素直に嬉しい所。
あと、「5人投票できる」というのが結構曲者で、自分で入れた票が推しへの妨害になりかねないというシステム的な問題がある。それを解決するために「投票しない」とか「全員に同じだけ投票する」とか「明らかに推しより上位の子に捨てる」とか「明らかに上位に入れなさそうな子に捨てる」とかいう戦術が編み出されるのは当然なのだが、それが広まりすぎるとなんか途中でシステム変更とかになっちゃいそうな。そこは運営さんの腕の見せ所なのかな。
普通のCG決定戦に落ち着くだろう。予選でボイスが付いた枠の子がここで善戦するとはあまり思わない。ただプレーオフからボイスなしが上がってきたなら強烈なブーストを受け5位くらいには入るだろう、予選から上がってきた子はこの時点でボイスがあるので、CG争いに興味がないがボイスに興味がある人の関心を一手に受け、更に「プレーオフから上がってきてボイス付与」という強烈な物語性を持ちうるからだ。俺もプレーオフがボイスなしだったらこの枠に入れる。
順当にCGを狙える子が、ここを戦ってCG争いへというのは正直考えづらいが、何らかの物語……「この子は逆境にめげず何度も這い上がって」みたいな物語を持つ子が――いるのかは知らないが――ここを勝ち上がって本戦に行く可能性はワンチャンありそう(ただそれが本戦で勝つかというと……)。そうでなければただのボイスおかわり枠。まあほぼ後者なんじゃないかなあ。各ブロック上位15まで発表するってすごいなと思ったが、よく考えたら全体60位までだからあまり変わってはおらんのだな。
属性の枠組みがなくなったのがちょっとヤなカンジではある。クール有利パッション不利じゃなかろうか?
わがんね。ただ思うのは、なんとなくの民意として、CG二冠は避けられていたように思うのだが、10回の区切りと枠組みリセットの影響で「二冠」は全然発生しうるな、ということと、CG未経験勢の勢いをあまり感じないこと。よって現時点では◎楓 。 未経験から競ってくるとすれば、○奈緒、○志希、▲美嘉、らへんかなあ。去年のPa順位的には藍子なのだが、CGになる勢いがあるとすれば美嘉な気がする。難しい。
U149での出方次第。もし――そんなことは絶対にないと思うが――「U149では声はつかない」ということが確定したら大炎上とともにすごい勢いになると思う。いや自分で言っててアレだがそんなことは普通無いな。てか、ボイス付くなら、それは始まる前に教えてくれないと困るのだが……。もし不確定のまま本戦に突入した場合、死票を嫌う人たちからはむしろ敬遠されそう。
U149の出方待ち、というカンジではあるのだが、もし、「小春にだけ声が付くことが確定する」みたいな事態があれば、小学生Pさんたちが奮起するシナリオはありうる。ただその可能性は弱め……かなあ……。
ずぅっと候補にいるのにずぅっと報われない子という印象で、今回もやはりプレーオフ圏内程度で終わるのではないかな……。「普通の子」が特徴というのは強い訴求力に欠ける……。
「フリスクに声を」って多分フリスクが登場してからずっと言われていて、でも総選挙とかだと全員同時にっていうのは厳しくて、柚のボイスがサプボの呼び水になることも特になかったので……結局、地道に一人ずつしか無いと思うんだが、じゃあ票を誰に集中させる?ってところのコンセンサスが応援する人たちの間で取れていない、という感じがする。過去の結果的には忍がやや有望だったと思うが、それで忍が行けるかというと、決定力に欠けるような気も……。
ゆかさえイベの抜擢に加え、ノーブルセレブリティのpushも感じるので、要素だけ見ればすごい強そうなんだけど、素地が少なめでまだいまいち伸び切らないか……?という感じはある。お嬢様枠、からの差別化ができればあるいは。
うーん、マシーナリーとも子のインパクトが強すぎて、その異常な活躍をどう評価すればいいかわかんないんだけど、順当に人気は感じるのでなんだかんだとボイスまで行けるんじゃないかなあ。あと眼鏡枠。
この間のライブもそうだがかなり公式からの(沙理奈よりはブルナポの)pushを感じる。ただなかなかチャンスを掴めず、サプボにも値しないと判断されてきたであろうので、思ったより強くねえんじゃねえかなあ……。ブルナポがあと沙理奈さんだけってのは結構長く擦られてきたというか歴史があるので、プレーオフで強い、みたいなことはありそう。
金髪褐色碧眼で、ナターリアの相棒枠でもあり、そういうのが好きな人の票を持ってそうなイメージ。すごく強いイメージはあまりないが、もしかしたら……?
このおねーさんの魅力は単純に顔面の強さなんじゃねえかなという気がするので、普通に善戦はしそう。ただ辛い物好きとかにゃんにゃんにゃんとかギャップの部分が上位に食い込むだけのセールスポイントとして機能してないような印象は受ける。
際立った特徴はないが距離が近くてポジティブでCo詐欺、結構色んな人の「ボイス無しではこの子が好き」枠に入っているイメージ。ボイスまでありそうかなー。
割りとみんな好きだと思うが、未知数……一歩届かない、くらいの位置か。アニメPVへの期待が逆風として機能してしまわないかなあとは思っている。でもPVで蒸機公演があれだけってことはないだろうし、案外アニメで声が付くのか……?
オタクはクールで馴れ馴れしくて機械に強い女の子が好き(ド主観)なのに加え、七海とマキノとのファタモルガーナの流れもありそうで、強いだろう。ド本命読み。
いま一歩という感じはするが、「U149で小春、千佳、舞にボイスが確定」という限定的なシナリオではかなり善戦しそう。そんなことは……あるかな……いや、あるかも……。
いつぞやのエイプリルフール、限定SSR、この度の凪背景と、かなりpushを感じる。あきらとの交流も強めの要素で、Paでボイスまでこぎつける子がいるとしたら紗南だろう、という感じ。
今回のダークホース。とはいえ流石にダークホースで終わるか……?でも限定が三種も出るぐらいだから何かしら一定の実績はあるんちゃうかな。
というわけで俺は、CG高垣楓、新規ボイスは池袋晶葉、藤居朋、大石泉、三好紗南、松本沙理奈、計5人で提出するぜ。アディオス。
米山隆一は日本の政治家、前新潟県知事である。現在、米山は衆議院議員である。
ここ最近、米山は"マンガやアニメのような一部のポップカルチャーは、日本の公共の場には相応しくない"と主張している。
さらにまた米山は、"我々は、マンガやアニメのファンダムの人々を、何らかの特定の場所に押し込めた方が良い"とも主張している。
これに対して、マンガやアニメのファンダムやクリエイターは米山を批判する。彼らは"米山は、マンガやアニメを『退廃芸術』と見做すのか?マンガやアニメのファンダムを、ゲットーに押し込めたいのか?"と言う。米山隆一の主張は、ナチス政権が"健全な精神"を口実にして、多くのドイツ人アーティストの作品の制作や展示を禁じたことを想起させるからである。
こうして、2021/11/20、米山はマンガやアニメのファンダムに対して、以下のようなツイートを投稿した。
「有りもしない差別を作り上げて、迫害にあったユダヤ人気分ですか?」
米山のツイートは、米山がおそらく歴史修正主義者であることを示唆する。米山のツイートは、明らかに"虚偽の迫害をでっち上げる行為"を"ユダヤ人であること"に結びつけている。米山隆一がショアー(一般的にホロコーストと呼ばれる)を"でっち上げ"と考えていなければ、ありもしない迫害をでっち上げることをユダヤ人と結びつけることはない。
= 日本語文ここまで =
Ryuichi Yoneyama is a Japanese politician and a former Governor of Niigata Prefecture. At this time, Yoneyama is a Member of the House of Representatives.
In recent days, Yoneyama continues claiming "Some particular Japanese pop cultures, such as Manga/Anime, are not suitable for public space in Japan."
Furthermore, Yoneyama also continues claiming "We'd better push these Manga/Anime Fandom people into any specific areas."
On the other hand, Japanese Fandom people and creators of Manga/Anime criticize Yoneyama. They say "Does Yoneyama think that Manga/Anime is 'Degenerate Art/Entartete Kunst'? Does Yoneyama want to push Manga/Anime Fandom into 'Ghetto'?" Because Yoneyama's claim reminds them of the memory that Nazi government forbade many germany artists producing/exhibiting their own arts and that Nazi did it with saying "sound mind".
Therefore, on 2021/11/20, to Fandom of Manga/Anime, Yoneyama posted a tweet like below.
"With making up a fake discrimination, are you assuming yourself to be a member of Jewish people who are persecuted?"
As a result, it seems that Fandom and Creators of Manga/Anime are right.
Yoneyama's tweet suggests that Yoneyama is probably a historical revisionist. Yoneyama's tweet obviously associates "making a fake discrimination" with "being Jewish people". If Yoneyama didn't think that Shoah(it is generally called Holocaust) is a fake discrimination, he never associates "making up a fake discrimination" with "being Jewish people."
We'd better watch Yoneyama's behavior carefully.
= 英訳ここまで =
demand-pullなのかcost-pushなのかの違いだろう
This is my first time to post in ANONYMOUS DIARY!
It's so wonderful and somewhat mysterious that a person who write a diary is never known to anyone.
Trying to click the button below, it inevitably makes me nervous.
Someone, please give me the push!
Finally, I have to tell you I told a single lie in this article.
I have posted articles in this diary more than a several hundreds times.
The point is I am undoubtedly Masuda.
Best regards,
3年前、世間一般にはメーカー系SIerとして知られている会社を退職した。ただ俺のポジションはパッケージソフト開発であり純粋なSIerとは異なる。
客ともSEとも会話せず、ひたすらドキュメントとプログラムを書く部署だ。といっても別にペーペーではなく主任クラスであり、
会社の業績がとてもよかったこともあり年収は1000万弱はあった。35歳。
これだけ見るととてもいい待遇に見えるだろう。でも耐えられないことがいっぱいあった。
Linuxで動くアプリなのにVMを動かすのも苦労する8GBしかメモリのないWindows PC、紙にコードを印刷して説明しないと納得しない品質保証部、
手作業で実施しExcelにチェックを付けていくテスト、jquery一つ使うのに3ヶ月かかる承認フロー、開発中にバグを一つ出すごとに
ひたすら反省文を求める品質保証部と一緒になって詰めてくるマネージャー、常にコンパイルできないtrunk、
Java 5の時代から進化しないコード、使いにくい社内ミドルウェアの利用を強制される設計、開発期間の半分以上を占める最上流設計、
一旦書いたコードは消してはならずコメントアウトしないといけないコーディング規約など、数を上げればきりがない。
色々改善活動を頑張ったものの、結局Subversionの導入も品質保証部がついていけないから、ということでClearCaseといわれる
今ではほぼ誰も使ってないであろうバージョン管理ツールが使われ続けることになった。使いにくい社内ミドルウェアは
研究所がその道のプロと聞いたので一緒に改善を図った。そしたらRubyしか書いたことがない文系新卒の子が出てきた。
一応研究所の人だし…と思って新バージョンのプロトの開発を依頼したら、1分以上稼働できない状態になって出てきた。
研究開発は準委任相当なのでそれ以上修正を依頼できずに期間が終わった。
また前の会社独特の文化として、大きなバグを出した開発者の反省会(社内ではとある固有名詞で呼ばれている)があった。
この反省会のターゲットになった開発チームはその資料準備で開発が1〜3ヶ月ほど止まるほど大掛かりなイベントだ。
このとき、担当の品質保証部は「連帯責任だから」という理由で資料レビューに大変な精を出す。余計なお世話だ。
このため10〜20ページほどの資料を毎週レビューにかけて最高のものにしていく。でも結局本番では幹部からの怒号が飛んで終わりである。
連帯責任とかいっていた品質保証部は幹部と一緒になって詰めてくる。連帯責任ではなかったのか。
幹部によると、この反省会があるから今の会社があるんだそう。これを経験して一人前らしい。
こんな感じで開発の体制はひどかったが、世間一般ではホワイト企業と見られている通り有休は取りやすかった。
そのため、転職活動を始めた。そしたらなんと「メモリ32GBのマシン」「mavenが気兼ねなく使える回線」「自動テスト」
「GitHub」「CI/CD」 という発言がポンポン出てくる。メルカリだのGoogleだのといったイケイケWeb系ではなく、
いわゆるSIerでもだ。最初は何だこの格差はと思ったが、まぁ営業トークなんだろうな、と思い直した。というわけで
イケイケWeb系も内定は出たものの、つい安定をとってしまい某大企業のDX系の部署に転職した。
そしたら何だこれは。最高スペックのMacBook ProからGitHubにpushするだけで自動デプロイで即サービスイン、
問題が発生したら社用携帯に通知が飛んできて、クラウド監視サービスでログをチェック、即修正即デプロイ。
社内の連絡はSlackで、スタンプを押せばIssueがたち即関連部署が対応に走る。OfficeツールはGoogle Docsで、
計算表はちゃんと表として使っている。開発者はちゃんと開発をしており、反省会の準備や品質保証部の接待なんて業務はなく
純粋にエンドユーザーだけを見ている。ここはなんて最高の環境なんだと歓喜した。また個人的にはおまけ程度であるが、
年収は30万ほど増えて大台に乗った。
さて、それから3年がたった。人間というのはいい環境になれると対して喜びを感じなくなる、というのはそうだと思う。
今では別にdeployブランチにマージされたらCIが走って自動でテストが走りデプロイされるのも、だから何?
って感じだしまぁ普通の仕事として淡々とやっている感じはする。待遇面で悪化した点もちらほらあるし
(例えば年間休日が5日ぐらい減った、残業が月5時間ぐらい増えたなど)などもある。
ただ一つ言えることは前の会社には戻れないな…ということである。人間一度生活レベルを上げてしまうと下げるのは
ただ、一つだけ今の会社に転職してよかったと感じ続けられることが一つある。それは人だ。
前の会社では家でプログラムを書いているなんていった日にはおちょくられたり、人生楽しいの的な目で見られたりした。
芸能人とゴルフの話ができないとコミュ障扱いされた。そのため仕事の話はしても、飲み会にはできるだけ行きたくなかった。
でも今の会社では雑談としてFastlyが落ちても大丈夫なCDN構想とか、AtCoderの話をして盛り上がることができる。
ダイバーシティなんていうが、人間は所詮同質な人間同士で集まったほうが快適なんだな・・・という複雑な思いを抱いている。
皆さん読んでくれてありがとうございます。いくつか質問が出ているので答えられる範囲で答えます。
真面目な疑問なんだけど、Java5のコード書いてる人を1000万で雇う会社があるの?どういうモチベーション??
製品自体が90年代から脈々とバージョンアップしている企業向けのソフトウェアなので、コードベースが古いというのがあります。
またユーザーからすると中身がJava17だろうがJava5だろうが関係ないわけで、要は業務が滞りなく進めばよいわけです。
そのため昔から受け継がれたスパゲッティコードを地道に解き明かし、新しく出てきた要件を今までのコードベースを壊さずにバグなしで追加していく、
もとからあったバグについては、その他の数百万行のユニットテストもないコードに影響なしで修正を施す、といった技能が必要になります。
こう考えると意外と希少なスキルなんだな・・・と思えるかもしれません。
clearcaseよりもsubversionの方が100億倍導入も運用も簡単だと思うんだけど品管どうなってんの?
ClearCaseご存知な方がいるんですね!一から作る製品だとSubversionのほうが簡単かもしれません。ただ、ClearCase専用の
社内ツールがいくつかあり、そのツールで出力した情報を社内資産として持っているという理由があったりします。
例えばお客さんから「この機能がバグってるっぽい」というクレームを受けた際、その機能周辺の情報をそのツールから検索し、
コードレベルで再発防止策を関係部署総出で練った上でお客さんに回答する、という運用フローになっています。
そのため、Subversionに変えるためには開発陣の一存では無理で、品質保証部やマネージャー層など全ての知識のアップデートが
必要になり、そこまでコストをかけて説得して回る必要はあるのか・・・という話になってしまうわけです。
ただ、社内の生産性を向上させるのが目的の部署としてはSubversionやGitを社内に浸透させたがっているのも事実で、
新規プロダクトなんかはGitを使っていました。ただしGitHubはプロキシでアク禁されているだけでなく、サービス名名指しで使用禁止
になっているので、相当の理由がない限り使えないかと思います。
主任クラスでも1000万円近くもらえるのか。すごい。
1000万という数字に興味のある方が多かったので参考までに書いておくと、等級ランクというものが存在して管理職を除く最上位のランクに
なると2人の子持ち、賃貸住まい、標準評価で大体900万になるという感じです。年功序列だが部署ごとに違うというイメージで、
研究所だと20代で到達する一方、利益を上げていない事業部や間接部署だと定年間際まで到達しない人も多い、ぐらいの感じです。
平均では30代中盤ぐらいでしょうか。
ちなみに私の場合は基本給は33万程度ですが、そこに裁量労働手当と住宅手当、家族手当がついて月給で50万を超えるぐらいでした。
ボーナスは個人評価よりも部門業績に大きく左右されるのですが、部署が最高評価の場合は夏冬とも150万以上でした。
最後の最後のダイバーシティについては、ダイバーシティを勘違いしているように思う
この人と一緒に働かないといけないの辛すぎて転職考えるレベルだわ。せめて素直な人ならいいんだけども。
辞めてくれないかな。
ピンを押し込む動作がどういう仕組みで引き出す動きに変換されてるんだろうと思ってググったけど、なかなか見つからないのね。
んで知恵袋的に増田でおまえらの助けを借りようと思ったんだけど、そうこうしてるうちに参考画像を見つけて、だいたいわかったのでシェアします。なるほどなぁ。ハンマー方式、的な?
SIM Card Holder - 6 pin - Push In - Eject Yellow Pin - SIM Tray [5514] : Sunrom Electronics/Technologies
https://www.sunrom.com/p/sim-card-holder-6-pin-push-in-eject-yellow-pin-sim-tray
Eject SIM Card Connector Push Push Type | Taiwantrade.com
https://www.taiwantrade.com/product/eject-sim-card-connector-push-push-type-1756989.html
Keywords:
(2021/4/5 15:00 追々記)
各所でいただいたコメントの返信手段に困り途方に暮れたので、Twitterアカウントを作成しました。コメントはすべて目を通しています。励みになります。
直近の開発予定や、アクセス状況とアフィリエイト収入などの数値についてつぶやく予定なので、よければフォローいただけると。
ただしベースが筆不精なためまったく更新しない可能性も大いにあります。何卒ご了承のほど。
(2021/4/5 2:00 追記)
ブコメも含め、反響があって嬉しい。拙文を読んでいただき、サービスも使っていただいてありがとうございます。コメントはすべて目を通し、より実用的なサービスにしていきます。
取り急ぎ気になったコメントへの返信を。
ーーー 以下もとの本文
当方独身アラフォー、去年の秋口までは貿易関連の零細企業に勤める、しがないサラリーマンのおっさんだった。
当時世間的にもなかなか話題になったが、コロナウィルス蔓延の影響の一環で海運用コンテナ価格が暴騰した。そのアオリを受けた私の会社でも流れる仕事の量が激減し、私個人も暇を言い渡される運びとなった。話の本筋から逸れるので詳しくは触れないが、最終的に雀の涙程度の退職金と引き換えに、40を目前に控えて職を失うことになった。
これまで趣味らしい趣味も持たず給料の大半を貯金に回して生きてきた。そのため一生を生き抜くにはとても足りないが、向こう数年間は食べていくのに困らない程度の貯金が手元にあった。それにあわせて、無限とも言えるような暇な時間を得たのだった。
何をするにも自粛自粛で気が滅入る日々だったが、しばらく心身を休めたことで若干の活力が湧き、貿易実務に関連する資格の勉強なんかを始めてみた。
しかしこれがどうにもピンとこない。退職した企業に勤めていたのも、もともと新卒時代の就職活動の失敗に端を発することであったし、仕事内容に魅力を感じていたわけでもなかった。
そんなときにふと、前々から「こんなサービスがあったら絶対使うのに」と温めていたアイデアがあったことを思い出し、WEBサービス開発というものに手を出してみようと思い立った。
が、しかしそのために必要な知識はまったくと言っていいほど持ち合わせていなかった。数年前にちょっとしたホームページを作ろうと、 HTML/CSS/Javascript/PHP やらの、本当にさわりを学んだ程度だ。
HTMLとCSSについてはなんとかかんとか「書いたものを画面に出せる」程度まではいけたが、JavascriptとPHPについては当時その存在意義も含め、トンと理解できなかった記憶がある。
そんなこんなで自分の作りたいものについて調べるうち、どうやらクローラーやらWebスクレイピングやらについて学ぶ必要があり、それにはPythonという言語についてある程度詳しくある必要があるらしかった。
サラリーマン時代、エクセルで本当に簡易なマクロを書いていたが、当時からPythonはマクロの上位互換というイメージを抱いており、いつかは勉強してみたいと思っていたので、これは幸いだった。
入門書を数冊購入し、Udemyというオンラインスクールで入門講座を受講した。かなり漠然とではあるものの、なんとか最低限の知識を身につけることはできたようだった。たぶん。
サービスの開発を志してからここまで一ヶ月ほどだっただろうか。平日休日を問わず毎日PCには触れるようにし、風呂場やトイレで「Qiita Python tips」とかググって出てきた記事に目を通していた。
(余談だがこのころに受講した https://www.udemy.com/course/python-beginner/ というコースは、PCに環境を整えるところから始まり、制御構文やファイル操作など、自分が欲する知識について体系的に学ぶことができ、コストパフォーマンスが非常に良かった。特に回し者ではない)
(さらに余談だが、最初にネット上の記事を適当にあさって環境構築してしまったため、いまだにPyenvだのAnacondaだのPipだの、Pythonが動く仕組みについて全然理解できないまま今に至っている)
閑話休題。
さてクローラーとはWEBサービスを提供するうえで主役ではなく、そのために必要なデータを集めるツールにすぎない。主役にあたるアプリケーション開発については(ここまで読んでいただいたうえで大変申し訳ないが)私にはシステムエンジニアとしてフリーランスでバリバリに働いている姪っ子がおり、強力なサポートを受けることができた。
姪っ子いわく「いまは基本的にJavascriptがわかっていればサービス提供できる。さらに言うとJavascriptでクローラーやWebスクレイピングを行うことも可能」らしく、結果的にPythonの学習に時間をかけたことは不要であったらしかった。
それどころかPythonとJavascriptのメソッドの名前が微妙に違っていることなどで詰まることが度々あり(特に配列へのappendとpush)、害悪と言っても過言ではなかったように思う。
その後は結局姪っ子に促されるがままにGoogleが提供するFirebaseというサービスと、Node.jsという言語について同じく入門書とUdemyの講座で学習し、なんとか自分が望む機能を持ったサービスを動かすことができた。姪っ子のサポートを受け始めてから4ヶ月ほど経過していた。
その名を パケ裏.com (https://pakeura.com) という、アダルトビデオのパッケージ裏面を延々と眺めていられる、人類の夢がパンパンに詰まった代物である。スマートフォンでの閲覧を想定して作った。
「結局エロかよ」と思った諸君、ブラウザバックは早計だ。人類の技術の進歩を支えてきたのはいつだって戦争とエロなのだ。まずは開発の動機について語らせてほしい。
自分に物心らしきものがつき、色を知りはじめたころから常々思っていたのだが、AVのパッケージというのはオモテ面と比べ、ウラ面のほうが遥かにエロいと思わないだろうか?
なんらかのオトナの事情があるのかもしれないが、オモテ面には美少女が斜に構えて微笑んでいる写真や、クソデカフォントで商品タイトルがババーンと大部分を占めているものが大半である。
それに比べてウラ面には、そのAVのなかでも特にエロいシーンの切り抜きが多々あったり、性欲を煽ってやまない官能的な文句がこれでもかと並んでいる。パケ裏にはエロさという概念が所狭しと集っているのである。そんなパケ裏を延々と眺めることができたら…これは私にとって長年の悲願であった。
物理店舗でAVを購入することのない私にとって、FANZAでいちいち商品ごとにパッケージ画像をクリックし、裏面を覗いていくのはなかなかに面倒な作業である。
その点 パケ裏.com を使えば、条件にマッチしたジャンルのパケ裏を無限にしゃぶりつくすことができる。作りたいサービスの要件が私の中でかなり明確だったこともあり、思った以上に短い期間で理想的なサービスを形にすることができた。
少し大仰な物言いではあるものの、こうして自分にとっての積年の夢を叶えることができた。
趣味というか、金銭の発生しない範囲でプログラミングに触れることはとても楽しく、少しずつサービスが形になっていくなかで自分の成長も日々感じることができた。システムエンジニアとして生きていくことは今後もないとは思うが、コロナ禍のおかげで人生でもなかなか得難い、貴重な時間を過ごすことができたように思う。人間万事塞翁が馬とはよく言ったものだ。
最後にくどいようだが、この パケ裏.com(https://pakeura.com)、主観だがかなり実用的なサービスとなっていると思う。ぜひ使っていただき、感想をいただけるとありがたい。
また事前に断っておくと、FANZAの商品ページへのリンクはアフィリエイトになっている。このサービスを通じてパケ裏の偉大さに気づく人が増え、さらに私の懐にちょっとした小遣いが入ってくれば、望外の喜びである。