はてなキーワード: TEXTとは
最初のきっかけは「何これ?」っていうハテナマークだったのよね。
何がって、3月7日(火)に発売された週刊スパ!の後半カラーページに
幸福の科学の星野源のイタコ本の宣伝が丸々1ページのってたのよね。
それでも、のせたというのはすごく広告料が高かったと思うのよね。
ただまあ、本の広告をのせるくらいは仕方ない、まあいいじゃないと思うよね。
でもね、ヤフーニュースを見てたら、ヘンな記事を見つけたのよ。それが下の記事ね。
「星野源は前世でも恋ダンス?“幸福の科学カフェ”で芸能人の前世を調べてみた」
http://zasshi.news.yahoo.co.jp/article?a=20170304-00668142-jspa-life
この記事は当然女子スパ!にものってるのよね。記事の公開日は両方とも3月4日(土)。
http://megalodon.jp/2017-0309-2116-55/https://joshi-spa.jp:443/668142
http://megalodon.jp/2017-0309-2125-50/https://joshi-spa.jp:443/668142?page=2
スパ!のスタンスってもっとイジワルな視線とかがあってもおかしくないと思うのよ。
でもこの記事は幸福の科学を笑うわけでもなく、銀座のカフェを紹介して、最後には
「というわけで、潜入してみて感じたことは、「うん、なんだかいいカフェかもしれない」ってことですね」
3月4日に女子スパ!に幸福の科学のカフェの宣伝みたいな記事がのって、
これって偶然なのかな?
リスク大きすぎると思うのよね。雑誌やってる人ならわかるでしょ?
雑誌って、よくあるのよね。
スキャンダルがのる、ちょうどおなじ時期に広告がのる予定があると、
スキャンダルをのせる時期を少し遅くしたりするの。
それだからこの女子スパ!の記事もおもしろおかしい内容にするなら公開する時期をずらせばいいんだよね。
でも、そんなことはせずに、淡々と幸福の科学がやってるカフェを紹介してるのよ。
広告が乗る寸前のタイミングに、無断で潜入取材っていうリスクを背負ってまで。
それでこの記事はライターのクレジット表記が<TEXT/女子SPA!編集部>なのよね。
見てみればわかるけど、女子スパ!の記事の多くはライターの名前がのってるのに、
ライターを守るため? 別に幸福の科学をバカにしてる記事でもないのに?
javascript:var%20t=((window.getSelection&&window.getSelection())||(document.getSelection&&document.getSelection())||(document.selection&&document.selection.createRange&&document.selection.createRange().text));var%20e=(document.charset||document.characterSet);if(t!=''){location.href='http://translate.google.com/?text='+t+'&hl=ja&langpair=auto|ja&tbb=1&ie='+e;}else{location.href='http://translate.google.com/translate?u='+encodeURIComponent(location.href)+'&hl=ja&langpair=auto|ja&tbb=1&ie='+e;};
これをブックマークレットとして呼び出すだけで英語がスラスラ読める。
スゴイ。
あんな難しそうだった英文が実は「痩せたいけどご飯が美味しくてつい食べ過ぎちゃって困るの><」とかいう女の子のかわいい愚痴だったよ。
変に感情が入ってきて。
Tampermonkey
https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo?hl=ja
https://addons.mozilla.org/de/firefox/addon/greasemonkey/
// ==UserScript==
// @name unvisualizer
// @namespace http://anond.hatelabo.jp/
// @description unvisualize section including specific word at Hatelabo::AnonymousDiary
// @include http://anond.hatelabo.jp/*
// @exclude http://anond.hatelabo.jp/hatena/*
// ==/UserScript==
(function() {
var target = document.evaluate(
"//div[@class='section' and descendant::*[contains(text(),'Troyes') or contains(text(),'fiorentina') or contains(text(),'genoa') or contains(text(),'forums.zoho') or contains(text(),'medhelp.zendesk') or contains(text(),'.co.uk/') or contains(text(),'elbertcountyrepublicans') or contains(text(),'purob.com') or contains(text(),'imvu.com') or contains(text(),'thelittleonescollection') or contains(text(),'nfyi.org') or contains(text(),'usa-fox-tv.kinja.com') or contains(text(),'livestream1.odiblogs.com') or contains(text(),'reddit.com') or contains(text(),'huffduffer.com') or contains(text(),'healthunlocked.com')or contains(text(),'surveymonkey.com')or contains(text(),'yakmari.kinja.com')or contains(text(),'putlockeronline') or contains(text(),'freefullmovies.website') or contains(text(),'change.org')or contains(text(),'nervefullmovie.com') or contains(text(),'navtv.co.za')or contains(text(),'Hrvatska')]]",
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
for(var i=0; i<target.snapshotLength; i++) {</p>
target.snapshotItem(i).style.display = "none";
}
})();
// or contains(text(),'')
ついでにこの記事も消える
NGワードは適宜追加してください
text.ssig33.com - 俺が糸柳和法に関して知ってること
ドワンゴは糸柳を雇用した時点で、異常者であることが分かって採ったんだから、その辺ちゃんとケアすべきでしょ。ここで解雇したら「障害者を障害を理由にクビにする会社」ってイメージ持たれることになるよ。障害者を雇ったのだからそれは責任を果すべきだ。
↓
はてなブックマーク - kawango のブックマーク - 2011年3月14日
今回の件で糸柳を解雇するか/できるかは置いといて、障害者だからといって企業がいくら害をなされても面倒みなければいけないなんて主張を認めるなら、どんな企業も障害者は絶対に雇うべきじゃない。
棒読みちゃんTipsにあるLimeChat用スクリプト「BouyomiLimeChat.js」を改造し、英語のテキストを読み上げないようにします。
参考 : 棒読みちゃん Tips
ここでは英語のテキストとは「半角英数字記号(=アスキー文字)のみで構成されたテキスト」とします。
40行目の「function talkChat(prefix, text) {」の次行に次のコードを挿入。
if (text.match(/^[\x20-\x7E]+$/)) return;
以上です。
同じような行を更に追加することで、読み上げないテキストの種類を増やせます。
text.match(/この部分/)を書き換えることで、好きなテキストを無視できます。"この部分"は正規表現で指定します。
if (text.match(/^[\x20-\x7E]+$/)) return; if (text.match(/https?:/)) return;
棒読みちゃんTipsの「●スクリプトを利用する方法」はLimeChat2.40だとそのまま使えないようです。2.40向けに書き直したものを以下に記載します。
1.スクリプトファイルをダウンロードする こちらのスクリプトをダウンロードしてください。 ZIP形式ですので、展開してください。 2.ファイルを配置する LimeChatのメニューから「設定→スクリプトの設定」を開く。 「スクリプトフォルダを開く」ボタンを押す。 開いたフォルダに「BouyomiLimeChat.js」を置く。 3.LimeChat側でスクリプトを有効にする LimeChatのメニューから「設定→スクリプトの設定」を開く。 スクリプトの設定画面で、「BouyomiLimeChat.js」の行を右クリックし、○を付ける。 スクリプトの設定画面の閉じるボタンを押す。
私はコミットログの書き方に悩む英語の苦手な人間である。実際、似たような人は世の中に結構いるようで、頻出単語を集計したりまとめたものは既にあって役に立つのだけれど、これらはあくまで単語の話であり、具体的な文を構成する過程でやっぱり困る部分がかなりあった。
要するに、どういう時にどういう文が使われているのか、ということを示した例文集が欲しいのである。ググると他にも「例文集があればいいのに」みたいな声はあるくせして、しかし誰も作ろうとしない。何なんだお前ら。それじゃ私が楽できないじゃないか。
ここで挙げているコミットログは全て実際のコミットログからの転載である。当然ながら各コミットログの著作権はそれぞれの書き手にある。いずれも各英文でググれば出てくるし、フェアユースの範囲なら許してくれるだろうと考え名前とプロジェクト名は割愛したが、ここにお詫びと感謝を述べておきたい。
抽出条件だが、参考にできそうなコミットログを多く含んでいそうなリポジトリをGitHubのSTARの多い方からざっと目で見て適当に選び、それぞれ最新コミットから5000件抽出した(あわせて前処理として、コミットログ冒頭のタグ情報は消去した)。
atomのみ5400件抽出していたため、計25400件のコミットログがベースである。このうち、以下の条件に合致するものは参考例にすべきでないとして一律排除した。
こうして残った8540件を眺めながら、適当に切り出したのがこの用例集である。個人的に「うーんこの」と思った表現も、散見される場合は載せた。
ということで、以下用例を羅列していく。
以上の用例をふまえ、今回の参考ログ8540件から先頭の単語を出現回数で並べると次のようになった。
Add | 1149 |
Fix | 1014 |
Update | 584 |
Remove | 566 |
Use | 382 |
Don't | 260 |
Make | 228 |
Move | 178 |
Change | 103 |
Rename | 85 |
Improve | 76 |
Avoid | 68 |
Allow | 65 |
Implement | 60 |
Handle | 58 |
コミットログの基本形はもちろん動詞 + 名詞である。名詞は固有名詞、複数形、不可算名詞が多いが、単数形の場合の冠詞は a が使われるか、あるいは省略される。the はまず使われない。
何かを追加した、という表現では非常に広く Add が使われる。メソッドからテスト、ドキュメントに至るまで大概これでまかなえる。
一方、何かを修正した、という表現では広く Fix が使われる。「何か」は typo や crash といった単語からメソッド名まで幅広い名詞を取るが、動名詞はあまり取らないのと、that節は取らないのでその点は注意が必要である。
Fix は「何かが正しく動くようにした」ことを示し、正しい動作内容が何かを説明しない。そこで正しい動作内容に言及したい場合は Make sure が使われる(こちらはthat節が取れる)。ただし Fix よりもニュアンス的に重い表現と思われ、Fix を使わず Make sure ばかり使うのはちょっとキモいのではないかと思う(Ensure はさらに重い表現っぽい)。
また、Fix は typo 以外でのドキュメント修正に対して使われることは稀である。対して Update はドキュメント、コメント、テストに使われ、本体のコードの修正に対しては使われない。本体コードの修正にあわせてテストも更新したなら Update が使われる。ただ、テスト機構それ自体のバグを修正したなら Fix である。
無駄な何かを単純に除去したなら Remove を使う。これまでのもの(A)から別のもの(B)に切り替えたのであれば Use B instead of A か Change A to B が使われる。新たに何かを利用するようにしたのであれば Use を、利用を取りやめた場合は Don't use を使うことが多い。
何かをしないようにしたなら Don't を、内部実装の効率化なら Make A + 比較級/形容詞 か Improve が使われる。
中身の変更を伴わない単なる名前の変更なら Rename A to B、コードや機能の論理上の場所を移動させたなら Move A to B である。
この辺はリファクタリングと呼ばれる行為と思うが、Refactor というぼんやりした動詞はあまり使われず、このように変更内容の種類に応じて動詞が使い分けられている。
コミットログにはWhyを書くべきだ、というのを何かで見かけたので because とか since を使ったログがどの程度あるかを調べたが、8540件のうち22件だった。基本的に短く、シンプルに、一目で意味が取れるログが好まれる傾向がある。例えば get rid of とか2件しか使われておらず、圧倒的に remove である。
一方で、シンプルな単語だけど開始単語としては使われないものもある。例えば次のような単語である。Expand(9)、Extend(8)、Print(5)、Optimize(5)、Publish(4)、Append(4)、Modify(3)、Manage(2)、Revise(2)、Dump(2)、Insert(2)、Migrate(2)、Enhance(1)、Edit(1) 。いずれもカッコ内は8540件に対する冒頭での登場回数である。結局、より一般的で平易な単語で表せたり、Refactor同様に抽象度が高すぎると使われないのだろう。
8000件もログを見たおかげで、迷いなくコミットメッセージが思いつくようになったのが個人的には今回書いてて最大の収穫だった。たぶんカンニングペーパーを作る行為それ自体が効率のいい学習になるという話と同じだと思う。
このまとめも100以上用例を転載してあるので、それを読むだけでも多少は効果があるんじゃないかと思う。同じようにコミットログ書きたくねぇなぁ英語わっかんねぇなぁと思っている人にとって、何か役に立つところがあれば幸いである。
流し読んで、そうかぁー、ぐらいに思ったけれど。
Wikiの日本語や英語のwikipediaの説明を読むと、まんま書いてあって。
それまでのマークアップ言語の一つとして、e-mailの表記方法などから着想を得ている、ということらしいよ。
https://en.wikipedia.org/wiki/Markdown
http://daringfireball.net/projects/markdown/syntax#philosophy
そこでは、
While Markdown’s syntax has been influenced by several existing text-to-HTML filters — including Setext, atx, Textile, reStructuredText, Grutatext, and EtText — the single biggest source of inspiration for Markdown’s syntax is the format of plain text email.
Setext, atx, Textile, reStructuredText, Grutatext, and EtText とか、初めて聞いたけれど、そんな幾つかのマークアップ言語の
最大の影響を与え、着想の元となったものは、平易なプレーンテキストのe-mailの書き方です。
みたいに書いてるね−。
Forthcoming changes to Instagram’s algorithm, which will present photos out of chronological order, have thrown the photo-sharing app into chaos, with users asking their followers to “turn on notifications” so their updates aren’t lost to the new regime.
Don’t do it. For your sake. Not yet, anyway.
Turning on notifications for Rihanna, for example, means you’ll be told every time she posts a new photo. It is the equivalent of Rihanna texting you to tell you that she’s put a pic up on Instagram, but without the close relationship with Rihanna implicit in that scenario.
Sometimes Rihanna posts several images a day. You’d receive a text to let you know, every time. Annoying, right? Even in the case of Rihanna, arguably the only person worth following on Instagram.
https://www.geogebra.org/material/simple/id/3012865
(Qiitaのほうに2019年版があるので今はそちらを…。こちらは2015年版な感じです。)
Vimの外でもVim風の操作ができたりするのは彼らのおかげだ。
デフォルト、オプション、プラグイン、アドオン、様々な手段で提供されている。
Vimを使っている人でも使うかどうかは人それぞれだし、
どの程度Vimを再現できているのかも実装によってまちまちなのだが、
なんだかんだで有名どころのテキストエディタや統合開発環境では何らかの形で提供されることが多くなったように思う。
(一覧に無いものは私が知らないか忘れているだけなので、実際にはまだあると思う)
統合開発環境 | 名称 |
---|---|
Visual Studio | VsVim |
Xcode | XVim |
Eclipse | Vrapper |
NetBeans | jVi |
IntelliJ IDEA | IdeaVim |
MonoDevelop | Vi Mode |
Qt Creator | FakeVim |
テキストエディタ | 名称 |
Emacs | VIP |
Emacs | Viper |
Emacs | Evil |
Atom | Vim mode |
Atom | vim-mode-plus |
Sublime Text | Vintage |
Sublime Text | Vintageous |
Brackets | vimderbar |
Visual Studio Code | Vim |
Light Table | Vim |
ブラウザ | 名称 |
---|---|
Firefox | Vimperator |
Firefox | VimFx |
Firefox | Vimium |
Chrome | Vimium |
Chrome | Vrome |
Chrome | Vichrome |
Chrome | cVim |
Opera | VimOperate |
Opera | wasavi |
Safari | sVim |
Safari | vimari |
いくつかのコマンドでも。
コマンド | 分類 |
---|---|
bash | シェル |
zsh | シェル |
ksh | シェル |
tcsh | シェル |
yash | シェル |
tig | gitインターフェース |
less | ページャー |
cgdb | デバッガ |
LuaKit | Webブラウザ |
名称 | 操作 |
---|---|
jkで前後の項目に移動 | |
TweetDeck | jkで前後の項目に移動 |
jkで前後の項目に移動 | |
Google+ | jkで前後の項目に移動 |
Tumblr | jkで前後の項目に移動 |
GitHub | jkで前後の項目に移動 |
jkで前後の項目に移動 | |
Pixiv(複数投稿) | jkで前後の絵に移動 |
ニコニコ静画(漫画) | jkでスクロール |
ニコニコ静画(電子書籍) | hjklで前後のページに移動(wasdでも可) |
はてなブックマーク | jkで前後の項目に移動 |
ゲームも。
名称 | 操作 |
---|---|
nethack | hjklで上下左右に移動(yubnで斜め移動) |
> viのhjklは先行する何かの影響で実装された記憶があるので、操作が共通だからというだけで「viを忍ばせる」というのは言い過ぎではないかという気がする
> まして「vimを忍ばせる」というのは、ちょっとその、まあなんというか…
確かにVimではなくviの模倣だったりして無理があった…。hjklの大元を辿るとどこに辿り着くんだろう(ビル・ジョイの使っていたキーボードとは別?)
結構簡単にできた。
ここから、ページ切り替えてURLを収集する処理も追加すれば、
クローロング部分は完成。
require 'nokogiri'
url = 'http://ja.aliexpress.com/category/200003482/dresses.html?spm=2114.52010108.6.7.gT0qlW&addpid=32546825642&isOnSale=yes%22'
charset = nil
end
doc = Nokogiri::HTML.parse(html, nil, charset)
num=0
doc.css('a[class = "product "]').each do |product|
p product.attribute("href").text
p num = num+1
end
下記のようなファイルを用意してOKボタンを押下してもgettxt.jsのOnOKが呼ばれません。
誰か教えて下さい。
gettxt.js
http.createServer(function (req, res) {
fs.readFile('./HTMLPage.html', 'UTF-8', function(err, data) {
res.writeHead(200, {'Content-Type': 'text/html'});//text/plainから変更
res.end(data); // 「Hello, world!」から変更
});
}).listen(8124);
function OnOK(){
var text = document.getElementById("text").value;
// textを使って何か処理を行う
}
※<>は全角にしてます
<head>
<script src="gettxt.js"></script>
</head>
<body>
<input type="text" id="text" size=50></input>
<button onClick=javascript:OnOK() >OK</button>
</body>
指定できるようになってるんならjavascript以外にもpythonだの使えるようにしとけよバーカバーカ
どうせjavascriptしか使えないのに指定できるようにしてんじゃねーよバーカバーカ
Chromebookのレビュー記事を読んで、同じ機種を買ってほぼ同じ感想を持っている人がいるのだと思った。
http://dragoner-jp.blogspot.jp/2015/09/chromebook.html
自分はAsus Outletで、C200MAが14800円で売られている時に買った。箱が破損しているという注記があったが、届いたものは箱に傷ひとつなかった。たんに定価では売れなかったので、あたかも瑕疵があるかのように書いているのだろうか。
上記レビューに同じ。気軽でよい。テキスト入力機としてはこれで十分。
ちなみにタッチパッドの出来はかなりよい。Macbook Airより少し劣るが、慣れると、それほど変わらない。というか、かなり意識してMBAの使い心地に似せてある。
キーボードは打鍵感が浅く、カチャカチャとプラスチック音がするが、打ちづらいというほどでもない。
テキスト入力を含む事務作業程度ならとくに問題ない。2週間以上、Macbook Airを使わないでChromebookだけで生活しているが、それほど困ることはない。
バッテリの持ちは、よい。
よくわからない。Sublime Textに似たZedというエディタをChromeアプリとして入れているが、簡単なHTMLの編集程度であれば、これで事足りている。
オフライン環境で、なにかの拍子で再起動すると、まったく使えない。ログインすらできない。
Google Appsを使っていて、途中でネット接続が切れると、ローカルデータを保存する形で作業は継続できる。
しかし、何かの拍子で再起動がかかると、ログインができないので、いっさい使えない。ゲストとしてログインした場合、素のChromeが立ち上がるだけなので、Google Drive上の作業データはおろかアプリもいっさいない。
これを打開するためにUbuntuを入れてみたが、後述の理由で、それほど状況は変わらない。
SDカードをさして逐一作業データを保存するのでなければ、原則として、作業データはすべてGoogle Driveに置かれる。
便利だが、アカウントがブロックされたり乗っ取られたりした時のリスクは格段に跳ね上がる。
以下の記事を参考にして、Chromebookのデベロッパーモードを起動し、Croutonというものを入れると、Ubuntuは普通に使える。
https://www.linux.com/learn/tutorials/795730-how-to-easily-install-ubuntu-on-chromebook-with-crouton
Asus C200MAのRAMは2GBしかないので、ちょっとでも動作が軽くなるかと思ってUnityの代わりにLXDEを入れているが、ちょっとましだという程度。
Crouton経由でUbuntuを使うやり方だと、起動時に、ChromeOSにかえてUbuntuを選ぶことができない。したがって、オフライン環境下でUbuntuを急きょ使う、という使い方はできない。
デベロッパーモードだとChromebookはUSBブートをONにできるはずだが、C200MAではできなかった。なので、インストールせずにUSBブートでLinuxを使うことは、通常のやり方だとできないようになっているらしい。
これは出荷時のBIOS設定で、上記のような使い方をすべて禁止しているらしい。この問題を解決するため、ChromebookのBIOSが焼いてあるROMそのものを書き換えるスクリプトを公開している人がいる。
https://johnlewis.ie/custom-chromebook-firmware/rom-download/
が、なにかあったときに元に戻す方法を調べるのが面倒なので、自分はまだためしていない。だれかC200MAで試した人がいたら教えてほしい。
私の持てる知識を絞り出してなんとか完成しました。
**************************************************************************************
完成したサイトがこちらです。
LapyNetニュース
**************************************************************************************
私は普段webとは関係ない仕事してます。なんとか休日を利用して、
メインのコードはこんな感じ
----------------------------------------------------------------------------------------------------------------------
App::uses('Sanitize', 'Utility'); class RssfeedsController extends AppController { public $helpers = array('Html','Form','Session','Number','Cache'); public $uses = array( 'Rssfeed', 'Tweet', 'Wadai', 'Rank', 'Oracle' ); ************************************************************************************** public function index() { $title_for_layout = "LapyNetニュース"; $content = "Hello World!!"; $this->set(compact('title_for_layout','content')); if(date("G")>0 and date("G") < 7){ $today = date("Y-m-d", strtotime('-1 day')); }else{ $today = date("Y-m-d"); } $params = array( 'conditions' = > array( 'and' = > array( 'Rssfeed.time' = > $today, )), 'order' = > 'tweets desc', 'limit' = > '50' ); $this- >set('posts',$this- >Rssfeed- >find('all',$params)); $paramz = array( 'order' = > 'Rssfeed.id desc', 'limit' = > '10' ); $this->set('posts2',$this->Rssfeed->find('all',$paramz)); $paramz = $this- >Rssfeed- >query('SELECT id,title FROM rssfeeds order by id desc limit 10'); $this->set('posts2', $paramz); $parapara = $this- >Oracle- >query('SELECT id,title FROM oracles order by id desc limit 10'); $this- >set('postx', $parapara); $funking = $this- >Rank- >query('SELECT id,frank FROM ranks where creation=(select max(creation) from ranks)'); $this- >set('funking', $funking); } ************************************************************************************** public function mizuno() { $parapara = array( 'order' => 'Oracle.id desc', 'limit' => '30' ); $recent_posts = $this->Oracle->find('all',$parapara); return $recent_posts; } ************************************************************************************** public function wadai() { if(date("G")>0 and date("G") < 7){ $today = date("Y-m-d", strtotime('-1 day')); }else{ $today = date("Y-m-d"); } $params = array( 'conditions' => array( 'and' => array( 'Rssfeed.time' => $today, 'Rssfeed.kubetu' => 4 )), 'order' => 'tweets desc', 'limit' => '100' ); $this->set('posts',$this->Rssfeed->find('all',$params)); $this->set("title_for_layout","2CHニュース-LapyNetニュース"); $paramz = array( 'order' => 'Rssfeed.id desc', 'limit' => '10' ); $this->set('postyy',$this->Rssfeed->find('all',$paramz)); $parapara = array( 'order' => 'Oracle.id desc', 'limit' => '10' ); $this->set('postyx',$this->Oracle->find('all',$parapara)); $funking = $this->Rank->query('SELECT * FROM ranks where creation=(select max(creation) from ranks)'); $this->set('funking', $funking); } ************************************************************************************** public function hot() { if(date("G")>0 and date("G") < 7){ $today = date("Y-m-d", strtotime('-1 day')); }else{ $today = date("Y-m-d"); } $params = array( 'conditions' => array( 'and' => array( 'Rssfeed.time' => $today, 'Rssfeed.kubetu' => 3 )), 'order' => 'tweets desc', 'limit' => '20' ); $title_for_layout = "LapyNetニュース"; $this->set("title_for_layout","ニュース-LapyNetニュース"); $this->set('posts',$this->Rssfeed->find('all',$params)); $parapara = array( 'order' => 'Oracle.id desc', 'limit' => '10' ); $this->set('postxx',$this->Oracle->find('all',$parapara)); $paramz = array( 'order' => 'Rssfeed.id desc', 'limit' => '10' ); $this->set('postsxxx',$this->Rssfeed->find('all',$paramz)); $funking = $this->Rank->query('SELECT * FROM ranks where creation=(select max(creation) from ranks)'); $this->set('funking', $funking); } ************************************************************************************** public function newnew() { if(date("G")>0 and date("G") < 7){ $today = date("Y-m-d", strtotime('-1 day')); }else{ $today = date("Y-m-d"); } $params = array( 'conditions' => array( 'and' => array( 'Rssfeed.time' => $today, 'Rssfeed.kubetu' => 2 )), 'order' => 'tweets desc', 'limit' => '20' ); $this->set("title_for_layout","エンタメニュース-LapyNetニュース"); $this->set('posts',$this->Rssfeed->find('all',$params)); $paramz = array( 'order' => 'Rssfeed.id desc', 'limit' => '10' ); $this->set('postszz',$this->Rssfeed->find('all',$paramz)); $paramz = $this->Oracle->query('SELECT id,title FROM rssfeeds order by id desc limit 10'); $this->set('postszz', $paramz); $parapara = $this->Oracle->query('SELECT id,title FROM oracles order by id desc limit 10'); $this->set('postzy', $parapara); $funking = $this->Rank->query('SELECT * FROM ranks where creation=(select max(creation) from ranks)'); $this->set('funking', $funking); } ************************************************************************************** public function top() { if(date("G")>0 and date("G") < 7){ $today = date("Y-m-d", strtotime('-1 day')); }else{ $today = date("Y-m-d"); } $params = array( 'conditions' => array( 'and' => array( 'Rssfeed.time' => $today, 'Rssfeed.kubetu' => 1 )), 'order' => 'tweets desc', 'limit' => '20' ); $this->set('posts',$this->Rssfeed->find('all',$params)); $param = array( 'conditions' => array('times > current_timestamp + interval -600 minute and Kubetu = 4'), 'order' => 'tweets desc', 'limit' => '30' ); $this->set('posts2',$this->Rssfeed->find('all',$param)); } ************************************************************************************** public function view($id = null ) { $this->Rssfeed->id = $id; //驥崎ヲ√↑荳譁・i縺励> $user = AuthComponent::user(); $TwimStatus = ClassRegistry::init('Twim.TwimStatus'); $TwimStatus->getDataSource()->setToken(AuthComponent::user()); $statuses = $TwimStatus->tweet(); $rairai = $this->Rssfeed->read(title,$id); $alcol = $this->Rssfeed->read(); $this->set('post', $alcol); $this->set('post2', $user); $this->set('post3', $statuses); $this->set("title_for_layout",$rairai[Rssfeed][title]."-LapyNetニュース"); $paramz = array( 'order' => 'Rssfeed.id desc', 'limit' => '20' ); $this->set('postszz',$this->Rssfeed->find('all',$paramz)); $parapara = array( 'order' => 'Oracle.id desc', 'limit' => '30' ); $this->set('postzy',$this->Oracle->find('all',$parapara)); } ************************************************************************************** public function add() { if($this->request->isPost()){ if($this->Tweet->save($this->data)) { $this->Session->setFlash('seikou'); $this->redirect(array('controller'=>'rssfeeds','action'=>'view',$contents11)); }else{ $this->Session->setFlash('sipai'); $this->redirect(array('controller'=>'rssfeeds','action'=>'view',$contents11)); } } } ************************************************************************************** public function delete($id = null) { $this->Rssfeed->id = $id; $this->set('set', $this->Rssfeed->read()); $this->redirect(array('controller'=>'tweets','action'=>'delete',$this->data['tweet']['rssfeed_id'])); } ************************************************************************************** public function oracle() { if($this->request->is('post')) { $user = AuthComponent::user(); $TwimStatus = ClassRegistry::init('Twim.TwimStatus'); $TwimStatus->getDataSource()->setToken(AuthComponent::user()); $contents1 = $this->request->data['Rssfeed']['contents']; $contents2 = $this->request->data; $statuses = $TwimStatus->tweet($contents1); if($this->Rssfeed->save($contents2)) { $this->Session->setFlash('成功です。'); $this->redirect(array('controller'=>'rssfeeds','action'=>'view',$contents11)); $this->redirect($this->referer()); }else{ $this->redirect(array('controller'=>'rssfeeds','action'=>'view',$contents11)); $this->Session->setFlash('失敗です。'); } } } ************************************************************************************** public function makelist() { $rssfeeds = $this->paginate(); if ($this->request->is('requested')) { return $rssfeeds; } else { $this->set('rssfeeds', $rssfeeds); } } } ---------------------------------------------------------------------------------------------------------------------- rssフィードはこんな感じです。 ---------------------------------------------------------------------------------------------------------------------- #!/usr/bin/php <?php header('Content-type: text/html; charset=UTF-8'); require_once ('/var/www/html/s/magpierss/rss_fetch.inc'); define('MAGPIE_CACHE_AGE', 60*5); define('MAGPIE_CACHE_DIR', '/var/www/html/s/cache/'); define('MAGPIE_OUTPUT_ENCODING','UTF-8'); $urls = array( '*********************************'); $items = getRssList($urls); echo '<ul>'; foreach ($items as $item) { $href = mb_convert_encoding($item['link'], "UTF-8", "auto"); $title = mb_convert_encoding($item['title'], "UTF-8", "auto"); $description = mb_convert_encoding($item['description'], "UTF-8", "auto"); $megami = mb_convert_encoding($description, "UTF-8", "auto"); ************************************************************************************** $all = 'http://urls.api.twitter.com/1/urls/count.json?url='.$href; $Rits = file_get_contents($all); $Olfe = mb_convert_encoding($Rits, 'UTF-8', 'auto'); $data = json_decode($Olfe); $tweets = $data->count; ************************************************************************************** $checkman = db_check_urls($href); $checkman2 = db_check_pr($title); $nowtimes = date('Ymd'); if($checkman == 0 &amp;&amp; $checkman2 == 0){ #$hrefs = urlencode($href); db_put_urls($nowtimes,$href,$title,$description,$tweets); echo "<li><a href=$href>$title</a><br>$megami<p>$tweets</p><p>$checkman</p></li>"; }else{ } } echo '</ul>'; ************************************************************************************** function getRssList($urls) { $rssitems = array(); foreach ($urls as $url) { $obj = fetch_rss($url); $rssitems = array_merge($rssitems, $obj->items); } return $rssitems; } ************************************************************************************** function db_check_pr($japanese){ $moji = mb_substr($japanese,0,2); if($moji == 'PR'){ return 1; }else{ return 0; } } ************************************************************************************** function db_check_urls($href){ require '/var/www/html/s/database_conf.php'; try { $db = new PDO($dsn, $dbUser, $dbPass); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = 'SELECT count(*) AS count FROM rssfeeds WHERE urls = :language'; $prepare = $db->prepare($sql); $languages = array($href); foreach ($languages as $language) { $prepare->bindValue(':language', $language, PDO::PARAM_STR); $prepare->execute(); $result = $prepare->fetchColumn(); if ($result > 0) { return true; }else{ return false; } } } catch (PDOException $e) { echo 'エラーが発生しました。内容: ' . h($e->getMessage()); } function h($var) { return htmlspecialchars($var, ENT_QUOTES, 'UTF-8'); } } ************************************************************************************** function db_put_urls($nowtimes,$href,$title,$description,$tweets){ require '/var/www/html/s/database_conf.php'; try { $db = new PDO($dsn, $dbUser, $dbPass); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sikibetu = 5; $moto = "アニゲー速報VIP"; $sql = 'insert into rssfeeds (id, time,urls,title,contents,tweets,times,kubetu,teikyo) values (?, ?, ?, ?, ?, ?, ?, ?, ?)'; $prepare = $db->prepare($sql); $prepare->bindValue(1, 0, PDO::PARAM_STR); $prepare->bindValue(2, $nowtimes, PDO::PARAM_STR); $prepare->bindValue(3, $href, PDO::PARAM_STR); $prepare->bindValue(4, $title, PDO::PARAM_STR); $prepare->bindValue(5, $description, PDO::PARAM_STR); $prepare->bindValue(6, $tweets, PDO::PARAM_STR); $prepare->bindValue(7, 'cast( now() as datetime)', PDO::PARAM_STR); $prepare->bindValue(8, $sikibetu, PDO::PARAM_STR); $prepare->bindValue(9, $moto, PDO::PARAM_STR); $prepare->execute(); } catch (PDOException $e) { echo 'エラーが発生しました。内容: ' . h($e->getMessage()); } } ?>
---------------------------------------------------------------------------------------------------------------------
**************************************************************************************
参考にした書籍
CakePHP2 実践入門 (WEB+DB PRESS plus)
CakePHP2 実践入門 (WEB+DB PRESS plus)
作者: 安藤祐介,岸田健一郎,新原雅司,市川快,渡辺一宏,鈴木則夫
発売日: 2012/09/29
購入: 5人 クリック: 165回
Webアプリ開発を加速する CakePHP2定番レシピ119
Webアプリ開発を加速する CakePHP2定番レシピ119
**************************************************************************************
一番難しいところはtwitterログインとwebサイト連結でした。
ツイート数でランキングしてます、ネットの話題を見つけられます。
ホームページビルダーを使用しています。
今のホームページビルダーは昔と違って高機能ですね。
テンプレートも何種類もあって今はすごいです。
に分かれています。
今更cakephpを使っている人は少ないかもしれませんが、
twitterアカウントあるといつでも参加できますので、
1996年。物理学者アラン・ソーカルが人文科学誌 Social Text にデタラメな論文を投稿。
掲載された後でジョーク論文だった事を明かし、物理の専門用語で言葉遊びをしていた一部の「ポストモダニズム」研究者を皮肉った。
ソーカル事件から6年後、Annals of Physics と Classical and Quantum Gravity に掲載されていたある物理の論文が話題になる。
それらは「位相的場の理論」、「宇宙論」、「量子重力理論」などの複数分野にまたがる難解な論文で、
正しい専門用語を正しい文脈で用いていたが、論文全体では何も言っていないという代物であった。
悪質ないたずらが疑われ、ソーカル事件の逆襲ではないかと話題を集めたが真相は意外な方向へ。
兄弟ブルゴーニュ大学で学び、グリシュカは数学、イゴールは理論物理学で博士号を得ている。
ボグダノフ兄弟がサイエンス番組の人気司会者であったことからメディアをも巻き込んで騒ぎは大きくなっていった。
2人はネット上の議論に偽名で参加し、多重アカウントによる自作自演を繰り返した。
偽名には実在の物理学者や数学者の名前を勝手に使い、また、時には非実在の物理学者を名乗った。
兄弟の真意が何であったにしろ、全うな議論を捨てネットの印象操作を始めた時点で もはやまともな研究者とは呼べないであろう。
結果的にソーカル事件とは関係なかったものの、論文の査読精度や博士号授与の基準の見直しの議論のきっかけとなった事件である。
新しい会社に転職して、今まで通りのビジネスメールの書き方が正しいのか悪いのかわからなくなってしまったのでなんとなく記載。
どれが常識でどれが非常識なんだろう。そもそも気にしなくていいこと?
・相手から送られてきたメールにCCやToがいる場合は基本的に同じ相手に返信をする。
Re、Fwd等の表記に関してはある程度長くなったら削除しろ派や、最初から消せ派などがいるので明言しませんが
私はそのままにしておく派です。
・一行は30文字にするべし。
文章毎の。や、で適宜分けるのはわかりますが、それ以上に区切るか否かという話。
文章ではありませんがこういう事。
あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん。
と記載するのか、
なにぬねのはひふへほまみむめもやゆよらりるれろわをん。
と表記するのか。って話。
逆に改行しすぎると、メーラーによっては迷惑になるんだよね…。
・メールの送信形式は基本的にtext、htmlはよほどの事情がない限りは使わない。
・各位は極力使わないほうがベター。
関係者各位とか、○○各位と使う。
(もともとは目上の人間が使う言葉らしい。今でもその辺を気にする人がいるので、)
・メールの添付は10Mまで。
それ以上になる場合には一言事前に相談するか、別の媒体を使うことを検討する。
ざっと思い浮かんだのはこんな感じ。
ほかにもあるかなぁ…。