コレナニ?


普段はデータを収集してないので、ぶっこ抜いてみた。

最初の質問が 2011/10/24 23:42:55 。それから約四年半。
2016-6-7 10:00 頃の結果。

  • 概略
  • 質問数の推移
  • 質問あたりの回答数の分布
  • 質問数 TOP10
  • 回答数 TOP10
  • ベストアンサー数 TOP10
  • そうそう、「コレナニ?」の件数を調べたのは……
  • 番外
  • 非公開になった質問への回答は @追記
続きを読む

VBA で ZIP 圧縮

myonlinebookmark

Excel/VBAWindows標準のWinzipでファイルを圧縮する方法

質問させて下さい。
Excelでファイルを別BOOKとして保存
②別BOOKとして保存を、同一フォルダ内にZipファイルとして圧縮。
③そのあと、別BOOKを削除
上記①と③はできましたが、2.の圧縮についてが、理解できずにおります。
ご存知の方がいましたら、ご教授いただければ幸いです。

  登録:2016/05/23 21:56:49
  終了:2016/05/30 21:56:49

Excel/VBAでWindows標準のWinzipでファイルを圧縮する方法 質問… - 人力検索はてな

 質問者:てとらん 質問日時:2015/08/03 22:12 回答数:3件

質問させて下さい。

Lhaplus などを使用(導入)することなく、Windows7の標準機能のみでExcelファイルをZipファイルに圧縮する事は可能なのでしょうか?

マクロの動作としては、
1.作業中のBOOKから必要なシートのみをコピーし別BOOKとして保存
2.別BOOKとして保存したファイルを、同一フォルダ内にZipファイルとして圧縮
3.別BOOKを削除

上の1.と3.は出来たのですが、
2.の圧縮についてが、理解できずにおります。
自分なりに調べたところ、Lhaplus をShell関数などで指定し圧縮をする方法などは紹介されていたのですが、Windows7の標準機能のみZip圧縮を行う事は可能なのでしょうか?

ご存知の方がいましたら、ご教授いただければ幸いです。

【Excel VBA】Windowsの標準機能のみでExcelファイルをZIPファイルに圧縮する方法 - Excel(エクセル) [解決済 - 2015/08/10] | 教えて!goo

同じ人なんだろうなあ。
Excel 2007 以降は、拡張子こそ違えど その実体は ZIP ファイルなので、それ以上 圧縮しにくい(圧縮する必要がほとんどない)という意味では必要ないと思うのだけれど。

そもそも、goo で解決済みじゃん (´・ω・`)

質問日時 URL
2015/02/09 22:01 【Excel】 マクロでコメントの挿入されているセルに入力されている値を別シートに抽出する方法 - その他MS Office [解決済 - 2015/02/15] | 教えて!goo
2015/05/25 21:57 【Excel VBA】セルで列番号を指定して削除するマクロ - オフィス系ソフト [解決済 - 2015/05/27] | 教えて!goo
2015/08/03 22:12 【Excel VBA】Windowsの標準機能のみでExcelファイルをZIPファイルに圧縮する方法 - Excel(エクセル) [解決済 - 2015/08/10] | 教えて!goo
2016/04/22 00:02:59 フォルダ内に3つのExcelファイルのマージについて、 ①それぞれ… - 人力検索はてな
2016/05/09 22:01:08 人力検索はてな (キャンセルされてる
2016/05/12 00:41:54 長文ですみません。取得対象Excelファイルからのマージ処理で出… - 人力検索はてな
2016/05/12 21:46:21 列の入れ替えをしたいのですが、計算式がはいっているセルの列を… - 人力検索はてな
2016/05/18 21:01:16 Excel/VBAで検索先ファイルでデータ項目の値に一致したセル値を… - 人力検索はてな
2016/05/23 21:56:49 Excel/VBAでWindows標準のWinzipでファイルを圧縮する方法 質問… - 人力検索はてな
2016/05/29 12:26:19 カレント日付より前2営業日の算出方法について Excelでカレント… - 人力検索はてな
2016/06/01 11:18:37 Excel/VBAで条件付き書式を作ってますが、 E3セルの値が”男性… - 人力検索はてな




中身の話。

Chr() 関数でヘッダを作り込んだ空の ZIP にファイルを放り込むのか。
いろんなことを考える人がいるものだ。
ヘッダの作り方や、待ち合わせ方が微妙に違うだけで戦略としては同じ人達。


今どきなら、PowerShell でやっちゃえば良いじゃない、という感じもする。




;-)

Template Strings

見た目を作ったりいじったりするような Bookmarklet なんかでは、HTML の要素やスタイルを文字列でたくさん書かなきゃいけないこともママあり。
でも、javascript にはヒアドキュメントがないので、こんな書き方でお茶を濁してた。

/*
#qa_chemistry {
    position: absolute;
    top: 0;
    right: 0;
    background-color: palegreen;
    z-index: 9999;
    padding: 5px;
}
#qa_chemistry table.info tr td {
    line-height: 1em;
}
*/
var css_rule = '\
#qa_chemistry {\
    position: absolute;\
    top: 0;\
    right: 0;\
    background-color: palegreen;\
    z-index: 9999;\
    padding: 5px;\
}\
#qa_chemistry table.info tr td {\
    line-height: 1em;\
}\
';

実体はコメントで書いておいて、コードの方にはコピペして行末の改行を \ でエスケープする。
改行のエスケープは、範囲選択して :s/$/\\/ するだけなのでたいした手間ではないとはいえ、やっぱり面倒でコードの方を修正してしまってコメントに書いた方の本体と合わなくなってたり。

「テンプレート文字列」を教えてくれたのはここ。
expand title on drive.google.com for UserScript · GitHub
# ここでもお世話になってます >id:noromanba さん

「あれ? 改行のエスケープって要らなかったかな……」

とか思って試してみると、やっぱりエラー。

  ……


よくよく見てみると、括ってるのはバッククォートじゃない。

こう書けるようになったのだね。

var css_rule = `
#qa_chemistry {
    position: absolute;
    top: 0;
    right: 0;
    background-color: palegreen;
    z-index: 9999;
    padding: 5px;
}
#qa_chemistry table.info tr td {
    line-height: 1em;
}
`;

ドキュメントを確認。

ありゃ、リテラル扱いではない?

In ES2015, template literals are also available. Template strings provide syntactic sugar for constructing strings. This is similar to string interpolation features in Perl, Python and more. Optionally, a tag can be added to allow the string construction to be customized, avoiding injection attacks or constructing higher level data structures from string contents.

Grammar and types - JavaScript | MDN

日本語訳の方が追いついてないだけか。

JavaScript に "ヒアドキュメント" 構文はありませんが、各行の末尾に改行のエスケープ表記とエスケープした改行を置くことで似たことができます :

文法とデータ型 - JavaScript | MDN

もう、ここも変えた方が良いんじゃないかなあ。

Although JavaScript does not have "heredoc" syntax, you can get close by adding a linebreak escape and an escaped linebreak at the end of each line:

Grammar and types - JavaScript | MDN

と思ったら、英語のドキュメントの方にも。
まだ、正式に ECMAScript 6 の仕様になってないから、ということかな。


タグ関数とか、なんか気持ち悪いのもある。

なんか、使い道 あるんだろうか……

var s = "http://q.hatena.ne.jp/";
var re;

re = /https?:\/\/\S+(\.\S+)*\//;
console.log(re.test(s));	// true
// スラッシュ入るとウザい

re = new RegExp("https?://\S+(\.\S+)*/");
console.log(re.test(s));	// false
// バックスラッシュをエスケープする必要あり

re = new RegExp("https?://\\S+(\\.\\S+)*/");
console.log(re.test(s));	// true
// ふたつ並んだバックスラッシュ ウザい

re = new RegExp(`https?://\S+(\.\S+)*/`);
console.log(re.test(s));	// false
// やっぱり、バックスラッシュをエスケープしなくちゃならない

re = new RegExp(String.raw`https?://\S+(\.\S+)*/`);
console.log(re.test(s));	// true
// 素直に正規表現が書ける

とかかな。

タグ関数はどうかなあ……
内挿された値だけに何か処理を施すとか、そういうのかな。

続きを読む

ドリトル先生

All of a sudden the Doctor looked up sharply at me, a wonderful smile of delighted understanding spreading over his face.という文がありました。
前半の部分は理解できるのですが、後半のa wonderful smile of delighted understanding spreading over his faceはどのような構造になっているのでしょうか?

http://q.hatena.ne.jp/1461615559

訊かれているのは、ドリトル先生航海記の一節(P242 の末尾)。

なんでまた、英語圏で尋ねてから日本に流れてくるかね。

「文章の一部だけを取り出しているだろう」的な回答やコメントにうんざりする気持ちも分からないではないが、ドリトル先生の一節だと書けば良いだけの話だと思うんだけれど。
文章の構造を訊いている質問というか、そういうことを訊くサイトで、回答者に原典を探すことを期待するのは無理筋な注文だろうし。

レイトン教授のこともあったし、原典を見たら、その一文だけでは分からない何かがあるかもと期待して、空振りしたのは内緒だ



最初に投稿したと思われるサイトは、TIME タグではなく、SPAN タグの title 属性に時刻が埋め込まれている。

    <div class="user-action-time">
        asked <span title="2016-04-25 18:27:18Z" class="relativetime">18 hours ago</span>
    </div>
http://ell.stackexchange.com/questions/88364/doesnt-this-clause-need-a-verb

3分も経たないうちに投稿した次のサイトは、ページのソースには質問や回答内容は含まれず、非同期でコンテンツを取得している。

{
  "performance": "65.30 ms",
    ...
  "data": {
    ...
    "create_time": "2016-04-25T18:29:58+0000",
    ...
  }
}
https://www.italki.com/api/question/353967?_r=1461632509755&hl=en-us

どちらも、GMT で記載されているはず。


そういえば、OKWave には質問してないのな。
袂を分かったのを知らないのかな。

HTMLでパスワード制限

やりたかったのは、自分のブログに置いたログインフォームに、それっぽい動きをさせたい、かな。

HTMLでパスワード制限を掛けたいです。ネットで検索してもちゃんとした物はないので質問しました。CGIMD5などの暗号化や一般では使わないコード内にパスワードを入れる方法でありますか?
追記→basic認証などの特殊なとでなありません。

http://q.hatena.ne.jp/1460252561

だから、BASIC 認証はダメだと。
「ちゃんとした物」だったら、普通に考えて生のパスワードをソースに書くのはダメだろうから、となると暗号化しか方法は残ってないよなあ。

  • 記事中の一部をパスワードでロックする
  • ログインフォームっぽいやつ
  • 不親切な説明
    • 記事中の一部をパスワードでロックする
    • ログインフォームっぽいやつ
    • 因みにパスワードは、
  • なんにせよ、暗号化しなきゃならんのだ
  • CryptoJS
  • キー
  • リンク集
  • 暗号化以外の方法
  • 最後に

記事中の一部をパスワードでロックする

閲覧するためにはパスワードが必要です

U2FsdGVkX1/uHkyBgQcDmOLv0QuEG3iJolffcOE67c+xxVZ8pfTMPSUy0VZKMPpfLrE9JOOZJa2sjzIoAiPFqgvUANBwmuq2N5A8MA85fMfdj4KFtI3xHcnF5aiuIkFmO2IPLUg8MVhcYwaMl6yuLlVsJ5iO7FTUCFS7+cbg//PK3Z1QPUtGV21WgqKq5HW9gNaMdjSRRslVTXaJb/q5BDNpLdGn1QvxxJ4dixypCJPBzSa/wkAVn81Ls8dwpDx17/F7784MAeOMRK3+TxW1o5Quqnq9iF08HqFpfQ5+EmP0RuF8w8kOF9LXWZLbNxD2zYz3NHQOYOwasW+xvTtVvAMXAzTXJCzsIS7QHlIYjqiHXlqRiH5QLTKN0v1hn/8BkTOYkTu+5vM3Jcl8R2rVU1GAeVQsf9DYCxsq70p3BVoK/Y2P7N6f4VkS1cIogJoNJy489s36E+3hS6zDVuAM+ZPE9Sdn/7KCZHHynZB5Vk7qzWv69+Te1lVWEHIXO2O+xDwEgsnqhcUesH3iijh1Lvs15LM5KS7OssM+XHd79MqvPggxtgJyrnv7unix4wDxcdB4nh77H7GIIO+KqfrtRBBsRN3zyGbcouFZ42JUCsUGST0z2x1w4rFAv2zFVAKY+t6/Oxd29uFmARE/RFJYNM6Pkfw6Kb4fgHobFnTR7dBPg55G03vkPUFbx6YVWfRyP3x/lwHR6wFovCX78ZZ+58A6Cpc714u6E+qbMBOtFfs=

ログインフォームっぽいやつ

続きを読む

h.hatena.com は生きていた

とっくに引導を渡されたと思っていた h.hatena.com 。実は、まだ生きていた。

http://h.hatena.com/api/statuses/public_timeline.json?count=30
投稿などの URL だと 301 でトップの「終了しました」に飛ばされちゃうけど、
はてなハイクタイムラインAPIドメインを .hatena.com で使うと、サーバが生きてるだけじゃなくて、投稿もされていることが分かる。
iPhone の非公式アプリ HaikuNeko や、Google Chrome の「どこでもはてなスター」拡張から投稿できているみたい。

☆だけではなく、メモを書き残すこともできる (メモははてなハイクに投稿される)。

どこでもはてなスター (Chrome)とは - はてなキーワード


GitHub にある、「どこでもはてなスター」拡張のソース。

https://github.com/wakaba/chrome-hatena-star-everywhere/blob/master/entry-script.js#L446

function postHaikuEntry (args, nextCode) {
  var self = this;
  bg.getRKM (function (rkm) {
    var xhr = new XMLHttpRequest ();
    var postURL = 'http://' + bg.config.getDomain ('h') + '/api/statuses/update.json';
    xhr.open ('POST', postURL, true);

記事を POST する URL は、bg.config.getDomain() を介して決められている。
getDomain メソッドは、Google Chromeロケールを見て、h.hatena.ne.jp か h.hatena.com を切り替えている。

https://github.com/wakaba/chrome-hatena-star-everywhere/blob/master/user-config.js#L25

  getDomain: function (subdomain) {
    if (this.get ('tld') == 'jp') {
      return subdomain + '.hatena.ne.jp';
    } else {
      return subdomain + '.hatena.com';
    }
}, // getDomain


https://github.com/wakaba/chrome-hatena-star-everywhere/blob/master/user-config.js#L5

UserConfig.prototype = {
  defaultValues: {
    allowedURLs: '^https://[^/]+\\.hatena\\.(?:ne\\.jp|com)/',
    disallowedURLs: '^https://\n^http://[^/.]+/',
    tld: /^ja(?:_|$)/.test (chrome.i18n.getMessage ('@@ui_locale')) ? 'jp' : 'com',
    iconType: 'default',
    nameType: 'nickname',
    useIconStar: false,
}, // defaultValues


投稿してみるべ。

(function() {
    var xhr = new XMLHttpRequest();
    var postURL = 'http://h.hatena.com/api/statuses/update.json';
    xhr.open ('POST', postURL, true);
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            if (xhr.status < 400) {
                alert('OK');
                console.log(JSON.parse(xhr.responseText));
            }
        }
    };
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    var data =
        'keyword=' + encodeURIComponent('はてなハイク') +
        '&status=' + encodeURIComponent('h.hatena.com は、まだ生きている!?') +
        '&source=' + encodeURIComponent('a-kuma3 test') +
        '&rkm=' + encodeURIComponent(...);      // rkm は、h.hatena.ne.jp のページから引っこ抜く
    xhr.send(data);
})();

クロスオリジンの制約があるので、h.hatena.com のページで Bookmarklet として実行。
ログイン状態を表している rkm は、h.hatena.ne.jp のページから引っこ抜いて書いておく。

BASIC 認証があるので、ユーザID と API キーをパスワードとして入力。


はてなハイクAPI で確認。
http://h.hatena.com/api/statuses/public_timeline.json?count=30

h.hatena.ne.jp で投稿を確認。
http://h.hatena.ne.jp/a-kuma3/81808088407040107

でも、h.hatena.com への投稿だから、h.hatena.ne.jp のキーワードページには表示されないの。
http://h.hatena.ne.jp/target?word=%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%8F%E3%82%A4%E3%82%AF

WSH (VBScript) で XMLHTTPRequest

この質問の回答での余禄。

    url = ...

    Set xhr = CreateObject("MSXML2.ServerXMLHTTP")

    xhr.Open "GET", url, False
    xhr.Send
    If xhr.Status < 400 Then
        WScript.Echo xhr.responseText
    End If

同期モードになるのは VBScript なので、しゃあない。

プロクシを使うときはこう。

    xhr.Open "GET", url, False
    xhr.setProxy 2, "proxy.foo.com:8080", ""
    xhr.Send

認証ありのプロクシだと、こんな感じ。

    xhr.Open "GET", url, False
    xhr.setProxy 2, "proxy.foo.com:8080", ""
    xhr.setProxyCredentials "a-kuma3" , "a-kuma3-password"
    xhr.Send


例によって、ネタは stackoverflow 。
http://stackoverflow.com/questions/19008874/xmlhttp-request-ajax-with-vbskript-does-not-work-with-proxy-connection

MSXML 6.0 以降、って地雷も、今なら踏む人は少ないか。


MSDN
https://msdn.microsoft.com/en-us/library/windows/desktop/aa384059%28v=vs.85%29.aspx

三番目の引数は、プロクシの除外対象。