[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Jenkins のプラグイン "Simple Theme Plugin" を使うと Jenkins に独自の JavaScript や CSS を実行・適用することができる。管理者権限をもってログインしている場合に警告を出す JavaScript を書いてみた。このプラグインを使うことで導入できる。ただ、jQuery Plugin の導入が前提となっている。
const alertAdminLogin = (html) => {
jQuery('#page-body').css('background-color', 'papayawhip');
jQuery('#header > .logo').css({
'padding': '8px',
'font-size': '160%',
'color': 'lavender'
});
jQuery("#header > .logo").text("You logined as Administrator");
};
jQuery.get({
url:`${location.protocol}//${location.hostname}${location.port ? ':' + location.port : ''}/configure`
}).done(alertAdminLogin);
やっていることはひどく単純である。Jenkins 管理用ページである ./configure にアクセスできたならば警告を出し、アクセス失敗したのあらば何もない、というだけである。
次男がついにパジャマを一人で着れた。少し大きめとはいえ、ボタンを一人ですべてとめられたのでえらいこえらいこした。
雷が落ちたりしていると「かみなり、こわいねぇ」ってひつじにひっつく次男、かわいい。
Webhock だけでもアレなので Bot に発言をさせてみようとする。Slack Bot の token は次のような形式である。
xoxb-000000000000-000000000000-17afdxySLsIgJkUMu0eJHGMq
Bot は Slack api の Your Apps のページから作る。Add features and functionality から Bots を設定し、 OAuth & Permissions から token を取得する。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
public class SlackTokenNotificationClient {
private final String token;
private final String userName;
public SlackTokenNotificationClient (String token, String userName) {
this.token = token;
this.userName = userName;
}
public void sendNotify(String message, String channelName) throws IOException {
HttpURLConnection con = null;
try {
String baseUrl = String.format("https://slack.com/api/chat.postMessage?token=%s&channel=%s&text=%s&username=%s",
token,
channelName,
URLEncoder.encode(message.replaceAll(" ", "%20"), "UTF-8").replaceAll("%2520", "%20").replaceAll("%7E", "~"),
URLEncoder.encode(userName.replaceAll(" ", "%20"), "UTF-8").replaceAll("%2520", "%20").replaceAll("%7E", "~")
);
URL url = new URL(baseUrl);
con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);
con.setRequestMethod("GET");
con.getOutputStream();
if(con.getResponseCode() != HttpURLConnection.HTTP_OK) {
StringBuilder sb = new StringBuilder();
try(InputStream is = con.getInputStream()) {
String encoding = con.getContentEncoding();
if( encoding == null ) {
encoding = "UTF-8";
}
try( InputStreamReader isReader = new InputStreamReader(is, encoding);
BufferedReader bufReader = new BufferedReader(isReader); ) {
String line = null;
while((line = bufReader.readLine()) != null) {
sb.append(line);
}
}
}
throw new IOException("Failed to access :" + con.getResponseCode() + " / Result: " + sb.toString());
}
} catch (IOException ioe) {
throw ioe;
}
}
}
SlackTokenNotificationClient client = new SlackTokenNotificationClient (
// 上述の手順で取得した token
"xoxb-000000000000-000000000000-17afdxySLsIgJkUMu0eJHGMq",
// 発言する名前
"My Notification Bot" );
// 第二引数は発言するチャネル
client.sendNotify("発言だよー発言だよー", "notification");
もう8年以上前のことになるが "モテる女子力を磨くための4つの心得「オムライスを食べられない女をアピールせよ」等" なる記事が流行ったことがある。これについて多くの人は酷評していたし、私も酷評していたのだが。私は最近「これって合理的じゃね?」って思うようになってきた。
筆者のエビオス嬢さんは記事の冒頭で 私は学歴も知識もありませんしブスですが
と述べている。私は恋愛市場のことはよくわからないのだが、これは恐らく「私は恋愛市場においてかなり不利なポジションにいます」という宣言だと思われる。にも拘わらず彼女は 恋愛に関してはプロフェッショナル
と自信満々に告げるのである。これは重大な事だ。学歴がある、知識がある、美人である……といった要素があれば何も考えずともそれらにモノを言わせて恋愛市場を勝ち抜くことが可能であろう。しかしこのエビオス嬢さんはそれらがない中で戦って "プロフェッショナル" を名乗っているのである。不利を埋めるために恐ろしい量の思考を重ね、凄まじい量の創意工夫をしたに相違ない。そしてそのエッセンスが「モテる女子力を磨くための4つの心得」なのだろう。
しかし、多くの人が指摘するようにこの4つの心得はあまりに愚かなように見える。しかし、これを愚かと一蹴して良いのだろうか。2つの面で私はそうは思わない。
まず、打っている手は全て何らかの理由に基づいている。例えば だいたいの男は新しいケータイを持ちたがる習性があるので、古かったとしても1世代前のケータイを使っているはず
積極的に話を聞いてくれる女性に男は弱いのです
といったあたりの話を踏まえて記事は行動を提案している。このように、エビオス嬢さんは男性の思考について仮説を立て※1、そこに刺さるような行動計画を提案している。やみくもに媚びを売るのではなく相手の弱点を読み、そこを突くように媚びを売っているのだ。
しかし、エビオス嬢さんは時に撤退する。媚びまくって攻め落とすことにこだわっていない。戦術が通用しない相手について 言ってこない空気が読めない男はその時点でガン無視OK
と即座に切り捨てて次に進むことを勧めている。この戦い方が通用しない相手に無理にこれを継続しなくていいのだ。
また、そういうキャラクターにするとほぼ絶対に同性に嫌われますが気にしないよう
意中の男と付き合うことになったら、そんなことは忘れて好きなだけオムライスを食べて大丈夫
と、目的達成の為に注力し無意味な所で媚びていない。リソースを集中させ、"モテるための女子力" に注力しているのである。
エビオス嬢さんは自分の不利を踏まえ、対象となる男性の弱点を徹底的に突いたうえで勝ち目のない戦いや不要な戦いを回避しているのである。そのための具体的な作戦が記事で紹介された4つの心得である。「そんな風に考えるのは愚かな男性だけだ」と思うかもしれないがその指摘がそもそもおかしいのである。エビオス嬢さんはそのような男性をターゲットに絞って戦っているのだから、これでよい。
得意分野に注力する、不要・苦手な分野では戦わないというのは結構難しい。「とはいえ、多少は苦手分野も押さえておきたい」「とはいえもうちょっと普通の戦い方を」と "標準" に流れようとしてしまうだろう。しかし、標準に落ち込むことは「学歴がある」「知識がある」「美人である」といった要素を持つ相手が競合となるリスクを高めるだけだ。思い出してほしい。エビオス嬢さんは自身の事を 私は学歴も知識もありませんしブスです
と自己紹介しているのだ。競合との衝突を避け、徹底的に自分の戦いやすいフィールドで戦うには多少大げさに思考を振り切る必要がある。多少標準側に流れても先に述べたリスクは軽減される。
ただ、これらの具体的な施策はエビオス嬢さんが戦っている戦場でエビオス嬢さんが対象としているターゲットに立ち向かうための施策だ。あなたが戦う戦場であなたが対象とするターゲットはエビオス嬢さんのそれとは恐らく異なる。仮説を立て、相手に有効な施策を打つ仮定でこれらとは全く違う戦術を取ることになることは十分考えられる※2。アクションをリスペクトしてはならない。彼女の仮説に基づく計画に学び、応用するべきだ。
就活は自己分析し、志望企業を研究し、どのようにエントリーシートを書き、面接で応えていくのかを考えていく。やっている手順はエビオス嬢さんの恋愛と変わらない。就活で何も考えず数だけ打っても勝てるのはそれなりに実力のある学生だけだ。実力があるわけではない学生は自己と企業を分析し、一社一社対応を考える必要がある。エビオス嬢さんの恋愛は実力のない学生の就活と同じなのである。数を打っても勝てないから分析とそこから導かれる施策で戦っている。
オムライスを作るときの卵ってほとんどの場合無精卵だから生まれてこれなかったヒヨコは存在しないのでは?
※1 十分に検証しているのかは知らないけど、そんなに間違っているとは思えない
※2 十中八九全然違うものになるでしょう
Jenkins の schedule-build-plugin の正確な実行時間を後で確認したかったけど無理だったのでちょっと直してみた。こんな感じ。ログに時間を出すようにしたのと、 Slack の WebHock にスケジュール情報を送信できるようにしてみた。