URLに「opera:config#UserPrefs|UserJavaScript」と入力し、「User JavaScript」「User JavaScript on HTTPS」をチェックし、「User JavaScript File」にJSファイルを保存しているフォルダを指定する。
設定後はブラウザの再起動が必要。
2012年8月5日日曜日
Operaユーザースクリプトを有効にする
2012年7月29日日曜日
FirefoxでYahooのトップページを表示すると重い
FirefoxとFlashプレーヤの相性が悪いことが原因らしい
Flashプレーヤの設定ファイルmms.cfgを編集してオプションを追加すると、スムーズに表示できるようになる
mms.cfgの場所
32bit版 Vista/7の場合
C:\windows\system32\macromed\flash
64bit版 Vista/7の場合
C:\windows\syswow64\macromed\flash
追加するオプション
ProtectedMode=0
2012年6月18日月曜日
[c#]Twitterクライアントを作成するためのリンク集
以下のサイトを参考にすると、作成できるかも。昔はBASIC認証でもアクセスできていたみたいだけ、OAuth認証というものを使わなければアクセスできなくなったらしい。結構難しそう・・・。
③Twitterに自分で作成したアプリケーションを登録する (2012年3月版)
④twitterizer(http://code.google.com/p/twitterizer/)
⑤Twitterizer(http://www.twitterizer.net/)
⑥30分で誰でも作れるTwitter Bot開発・運用手順 – Ruby Twitter bot
リンク先の①、②を組み合わせて1分おきに、タイムラインをコンソール出力するプログラムを作ってみました。
初回起動時に保存される設定ファイルは「C:\Users\<ユーザーID>\AppData\Local\ConsoleTwitter」に保存されるようです。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Net;
- using System.Xml;
- using System.IO;
- using System.Security.Cryptography;
- namespace ConsoleTwitter
- {
- class Auth {
- const string REQUEST_TOKEN_URL = "https://twitter.com/oauth/request_token";
- const string ACCESS_TOKEN_URL = "https://twitter.com/oauth/access_token";
- const string AUTHORIZE_URL = "https://twitter.com/oauth/authorize";
- private Random random = new Random();
- public string ConsumerKey { get; private set; }
- public string ConsumerSecret { get; private set; }
- public string RequestToken { get; private set; }
- public string RequestTokenSecret { get; private set; }
- public string AccessToken { get; private set; }
- public string AccessTokenSecret { get; private set; }
- public string UserId { get; private set; }
- public string ScreenName { get; private set; }
- public Auth(string consumerKey, string consumerSecret) {
- ServicePointManager.Expect100Continue = false;
- ConsumerKey = consumerKey;
- ConsumerSecret = consumerSecret;
- }
- public Auth(string consumerKey, string consumerSecret, string accessToken, string accessTokenSecret, string userId, string screenName) {
- ServicePointManager.Expect100Continue = false;
- ConsumerKey = consumerKey;
- ConsumerSecret = consumerSecret;
- AccessToken = accessToken;
- AccessTokenSecret = accessTokenSecret;
- UserId = userId;
- ScreenName = screenName;
- }
- public void GetRequestToken() {
- SortedDictionary
parameters = GenerateParameters(""); string signature = GenerateSignature("", "GET", REQUEST_TOKEN_URL, parameters); parameters.Add("oauth_signature", UrlEncode(signature)); string response = HttpGet(REQUEST_TOKEN_URL, parameters); Dictionary dic = ParseResponse(response); RequestToken = dic["oauth_token"]; RequestTokenSecret = dic["oauth_token_secret"]; } public string GetAuthorizeUrl() { return AUTHORIZE_URL + "?oauth_token=" + RequestToken; } public void GetAccessToken(string pin) { SortedDictionary parameters = GenerateParameters(RequestToken); parameters.Add("oauth_verifier", pin); string signature = GenerateSignature(RequestTokenSecret, "GET", ACCESS_TOKEN_URL, parameters); parameters.Add("oauth_signature", UrlEncode(signature)); string response = HttpGet(ACCESS_TOKEN_URL, parameters); Dictionary dic = ParseResponse(response); AccessToken = dic["oauth_token"]; AccessTokenSecret = dic["oauth_token_secret"]; UserId = dic["user_id"]; ScreenName = dic["screen_name"]; } public string Get(string url, IDictionary parameters) { SortedDictionary parameters2 = GenerateParameters(AccessToken); foreach (var p in parameters) parameters2.Add(p.Key, p.Value); string signature = GenerateSignature(AccessTokenSecret, "GET", url, parameters2); parameters2.Add("oauth_signature", UrlEncode(signature)); return HttpGet(url, parameters2); } public string Post(string url, IDictionary parameters) { SortedDictionary parameters2 = GenerateParameters(AccessToken); foreach (var p in parameters) parameters2.Add(p.Key, p.Value); string signature = GenerateSignature(AccessTokenSecret, "POST", url, parameters2); parameters2.Add("oauth_signature", UrlEncode(signature)); return HttpPost(url, parameters2); } private string HttpGet(string url, IDictionary parameters) { WebRequest req = WebRequest.Create(url + '?' + JoinParameters(parameters)); WebResponse res = req.GetResponse(); Stream stream = res.GetResponseStream(); StreamReader reader = new StreamReader(stream); string result = reader.ReadToEnd(); reader.Close(); stream.Close(); return result; } string HttpPost(string url, IDictionary parameters) { byte[] data = Encoding.ASCII.GetBytes(JoinParameters(parameters)); WebRequest req = WebRequest.Create(url); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; req.ContentLength = data.Length; Stream reqStream = req.GetRequestStream(); reqStream.Write(data, 0, data.Length); reqStream.Close(); WebResponse res = req.GetResponse(); Stream resStream = res.GetResponseStream(); StreamReader reader = new StreamReader(resStream, Encoding.UTF8); string result = reader.ReadToEnd(); reader.Close(); resStream.Close(); return result; } private Dictionary ParseResponse(string response) { Dictionary result = new Dictionary (); foreach (string s in response.Split('&')) { int index = s.IndexOf('='); if (index == -1) result.Add(s, ""); else result.Add(s.Substring(0, index), s.Substring(index + 1)); } return result; } private string JoinParameters(IDictionary parameters) { StringBuilder result = new StringBuilder(); bool first = true; foreach (var parameter in parameters) { if (first) first = false; else result.Append('&'); result.Append(parameter.Key); result.Append('='); result.Append(parameter.Value); } return result.ToString(); } private string GenerateSignature(string tokenSecret, string httpMethod, string url, SortedDictionary parameters) { string signatureBase = GenerateSignatureBase(httpMethod, url, parameters); HMACSHA1 hmacsha1 = new HMACSHA1(); hmacsha1.Key = Encoding.ASCII.GetBytes(UrlEncode(ConsumerSecret) + '&' + UrlEncode(tokenSecret)); byte[] data = System.Text.Encoding.ASCII.GetBytes(signatureBase); byte[] hash = hmacsha1.ComputeHash(data); return Convert.ToBase64String(hash); } private string GenerateSignatureBase(string httpMethod, string url, SortedDictionary parameters) { StringBuilder result = new StringBuilder(); result.Append(httpMethod); result.Append('&'); result.Append(UrlEncode(url)); result.Append('&'); result.Append(UrlEncode(JoinParameters(parameters))); return result.ToString(); } private SortedDictionary GenerateParameters(string token) { SortedDictionary result = new SortedDictionary (); result.Add("oauth_consumer_key", ConsumerKey); result.Add("oauth_signature_method", "HMAC-SHA1"); result.Add("oauth_timestamp", GenerateTimestamp()); result.Add("oauth_nonce", GenerateNonce()); result.Add("oauth_version", "1.0"); if (!string.IsNullOrEmpty(token)) result.Add("oauth_token", token); return result; } public string UrlEncode(string value) { string unreserved = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~"; StringBuilder result = new StringBuilder(); byte[] data = Encoding.UTF8.GetBytes(value); foreach (byte b in data) { if (b < 0x80 && unreserved.IndexOf((char)b) != -1) result.Append((char)b); else result.Append('%' + String.Format("{0:X2}", (int)b)); } return result.ToString(); } private string GenerateNonce() { string letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; StringBuilder result = new StringBuilder(8); for (int i = 0; i < 8; ++i) result.Append(letters[random.Next(letters.Length)]); return result.ToString(); } private string GenerateTimestamp() { TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); return Convert.ToInt64(ts.TotalSeconds).ToString(); } } class TweetEntity { public string UserName = ""; public string Tweet = ""; public string PostedTime = ""; public override string ToString() { return UserName + "\r\n" + Tweet + "\r\n" + PostedTime + "\r\n"; } } class Program { const string CONSUMER_KEY = "hogehogehogehogehoge"; const string CONSUMER_SECRET = "fugafugafugafugafugafugafugafuga"; static readonly string LOG_FILE = AppDomain.CurrentDomain.BaseDirectory.Substring(0, AppDomain.CurrentDomain.BaseDirectory.LastIndexOf("bin")) + "bin\\ConsoleTwitter.log"; static void Main(string[] args) { int timespan = 60000; List prevTweetList = new List (); List currTweetList = new List (); for (; ; ) { try { currTweetList = GetTweet(); DisplayTweet(prevTweetList, currTweetList); prevTweetList = currTweetList; } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); } System.Threading.Thread.Sleep(timespan); } } private static List GetTweet() { List tweetList = new List (); Auth auth = GetAuth(); // タイムラインから50件取得してみる Dictionary parameters = new Dictionary (); parameters.Add("count", "50"); string pagedata = auth.Get("http://twitter.com/statuses/home_timeline.xml", parameters); //Debug(pagedata); string tag = "status"; XmlDocument xdoc = new XmlDocument(); xdoc.LoadXml(pagedata); XmlElement root = xdoc.DocumentElement; XmlNodeList mylist = root.GetElementsByTagName(tag); for (int i = 0; i < mylist.Count; i++) { TweetEntity tweet = new TweetEntity(); tweet.UserName = mylist[i].ChildNodes[11].ChildNodes[1].InnerText; // User name tweet.Tweet = mylist[i].ChildNodes[2].InnerText; // Tweet tweet.PostedTime = mylist[i].ChildNodes[0].InnerText; // posted time tweetList.Add(tweet); } return tweetList; } private static void DisplayTweet(List prevTweetList, List currTweetList) { StreamWriter wr = new StreamWriter(LOG_FILE, true, Encoding.GetEncoding("Shift_JIS")); foreach (TweetEntity currTweet in currTweetList) { bool isNew = true; foreach (TweetEntity prevTweet in prevTweetList) { if (prevTweet.ToString() == currTweet.ToString()) { isNew = false; break; } } if (isNew) { Console.WriteLine(currTweet.ToString()); wr.WriteLine(currTweet.ToString()); } } wr.Close(); } private static Auth GetAuth() { Auth auth; var settings = ConsoleTwitter.Properties.Settings.Default; if (string.IsNullOrEmpty((string)settings["AccessToken"])) { auth = new Auth(CONSUMER_KEY, CONSUMER_SECRET); // リクエストトークンを取得する auth.GetRequestToken(); // ユーザーにRequestTokenを認証してもらう Console.WriteLine("次のURLにアクセスして暗証番号を取得してください:"); Console.WriteLine(auth.GetAuthorizeUrl()); Console.Write("暗証番号:"); string pin = Console.ReadLine().Trim(); // アクセストークンを取得する auth.GetAccessToken(pin); // 結果を表示する Console.WriteLine("AccessToken: " + auth.AccessToken); Console.WriteLine("AccessTokenSecret: " + auth.AccessTokenSecret); Console.WriteLine("UserId: " + auth.UserId); Console.WriteLine("ScreenName: " + auth.ScreenName); // アクセストークンを設定ファイルに保存する settings["AccessToken"] = auth.AccessToken; settings["AccessTokenSecret"] = auth.AccessTokenSecret; settings["UserId"] = auth.UserId; settings["ScreenName"] = auth.ScreenName; settings.Save(); } else { // 設定ファイルから読み込む auth = new Auth(CONSUMER_KEY, CONSUMER_SECRET, (string)settings["AccessToken"], (string)settings["AccessTokenSecret"], (string)settings["UserId"], (string)settings["ScreenName"]); } return auth; } private static void Debug(string s) { StreamWriter wr = new StreamWriter(LOG_FILE + ".DEBUG.txt", true, Encoding.GetEncoding("Shift_JIS")); wr.WriteLine(s); wr.Close(); } } }
2012年5月30日水曜日
Windows Live Writerを使ってみる
ブログを書くのに神的によいそうなので、使ってみる。
すべてのプログラム-Windows Live-Windows Writerを選択する。
使用許諾はOKする。
Windows Live Writerの構成では「次へ」を選択する。
20120530 Windows Live Writer 1 posted by (C)てる
ブログサービスの選択では「他のサービス」を選択する。
20120530 Windows Live Writer 2 posted by (C)てる
ブログアカウントの追加で、ブログ情報を入力する。
20120530 Windows Live Writer 3 posted by (C)てる
ここがすごいところなのだが、上記で「次へ」とした後に、ブログに接続して、情報を取得してきてくれる。ブログの選択はそのまま「次へ」。
20120530 Windows Live Writer 4 posted by (C)てる
ここも「次へ」でよい。
20120530 Windows Live Writer 5 posted by (C)てる
以下がブログ作成画面で、タイトルと本文を少し入力したところ。
20120530 Windows Live Writer 6 posted by (C)てる
機能的には、
- 複数のブログに対応している
- エディタ上での編集、プレビュー(テンプレートも含んでのプレビュー)、HTMLの直接編集が可能
- エディタ上での編集は、フォントスタイル、段落、リンク等の挿入、表の挿入などができる
- 新規の投稿、投稿されたものの修正、削除などができる
2012年5月29日火曜日
2012年4月3日火曜日
RLO対策
ファイル名は「左から右に読む」とは限らない?! - @IT
なお、設定後は、「gpupdate.exe」を実行して更新を反映後に、再ログインをする必要がある。
2012年3月22日木曜日
Excelのクリップボードがおかしくなる
Firefoxアドオンの「Skype Click to Call 5.10.0.9560」を有効にしていると、
Excelでコピー時にテキスト情報のみしかコピーされないようになる。
(書式情報がコピーされなくなる)
「Skype Click to Call 5.10.0.9560」を無効にすることで、この現象が解決できる。
組み合わせは Windows 7 + Office 2010 + FireFox 11 で発生した。
※Internet Explorer 、 Google Chrome 用の「Skype Click to Call」アドオンでも同様の現象が発生した。
2012年3月20日火曜日
SyntaxHighlighter
いくつかのSyntax Highlighterのツールのまとめているサイト
SyntaxHighlighter - ソースコードを見やすく表示させるJavaScript - パソコン初心者講座 ~道すがら講堂~
Syntax Highlighterのバージョンごとの違いを解説しているサイト
ソースコードを綺麗に表示するJS「dp.SyntaxHighlighter」|caraldo.net | WebとiPhoneとロードバイクが大好き!
Syntax Highlighterの使い方
SyntaxHighlighter
Syntax Highlighterのダウンロード先
Syntax Highlighter Scripts Generator | Blogger Widgets | Tips | Tricks | Templates : Way2Blogging
Syntax HighlighterのJS、CSSのリンクを作成
SyntaxHighlighter - Hosting
Syntax Highlighterの現在有効なバージョンのリンク先
2012年2月10日金曜日
PrimoPDFのファイル名の文字化けを解消
厳選! PDFフリーソフト PrimoPDFのファイル名の文字化けを解消する
http://pdffreesoft.gjpw.net/Entry/72/
2.PriMoreV4.vbeを「C:\Program Files\Utility\PdfTools\activePDF\PrimoPDF」にコピーする。
3.ポートの構成を変更する。
Redirect this port to the program:
C:\Program Files\Utility\PdfTools\activePDF\PrimoPDF\primorun.exe
Arguments for this program are:
C:\Program Files\Utility\PdfTools\activePDF\PrimoPDF\primopdf.exe
ここを↓に変更する
Cscript.exe "C:\Program Files\Utility\PdfTools\activePDF\PrimoPDF\PriMoreV4.vbe"
Output:
Program handles output
Printer:
なし
Run:
Hidden
Run as User
チェック