約 3,877,628 件
https://w.atwiki.jp/theblockheads/pages/76.html
Electric Stove(電動ストーブ)は、電力を使ってコーヒーやレインボーケーキなどを製作できる作業台。 概要 作成できるもの 編集用コメント欄 概要 (画像) 分類 ユーティリティ 使用 クラフト 作る為のアイテム Workbench(ワークベンチ) レベル4 作る為に必要なアイテム Steel Block(スチールブロック)×1、Iron pot(鉄なべ)×1、Copper Wire(銅ワイヤー)×10 重ねれるか できる(最大?個) 作成できるもの アイコン 名称 日本語訳 スローガン 使用アイテム 作成所要時間 (画像) Cooked Dodo Meat 調理済みのドードーの肉 A more satisfying meal. Raw Dodo Meat(生ドードーの肉)×1 15s (画像) Cooked Fish 調理済みの魚 Tastier cooked. Raw Fish(生魚)×1、Tin Foil(錫箔)×1 15s (画像) Roasted Coffee Bean 焙煎したコーヒー豆 Brew for energy. Green Coffee Bean(緑のコーヒー豆)×1 40s (画像) Coffee コーヒー Sleep is for the weak. Cup(マグカップ)×1、Bucket Of Water(水入りバケツ)×1、Roasted Coffee Bean(焙煎したコーヒー豆)×1 40s (画像) 20 Salt 塩20個 For Baking Cooking. Iron pot(鉄なべ)×1、Bucket Of Water(水入りバケツ)×1 40s (画像) Fish Curry 魚カレー Spiced fishy goodness. Iron pot(鉄なべ)×1、Raw Fish(生魚)×1、Chilli(チリ)×1、Coconut(ココナッツ)×1、Salt(塩)×1 40s (画像) Dodo Stew ドードーシチュー A cause for extinction. Iron pot(鉄なべ)×1、Raw Dodo Meat(生ドードーの肉)×1、Carrot(ニンジン)×1、Corn(トウモロコシ)×1、Salt(塩)×1 40s (画像) 5 Rainbow Cakes レインボーケーキ5個 Unicorns love it. Rainbow Essence(虹のエッセンス)×1、Flour(小麦粉)×1、Milk(牛乳)×1、Dodo Egg(ドードーの卵)×1、Salt(塩)×1 40s 編集用コメント欄 編集の議論にお使いください。 雑談は行わないでください。 名前
https://w.atwiki.jp/terragen/pages/28.html
Terragen 4 Professionalは、自然環境のモデリングとレンダリングのための完全なソリューションです。これはTerragen 4 Creativeのすべての機能に加え、プロのアーティストのニーズに合わせて開発された必要不可欠なツールや時間を節約する機能が含まれています。また、Terragen 4のすべてのライセンス版にはアニメーション機能が含まれており、シーン内のほぼすべての設定や要素をアニメーション化する事が出来ます。Terragen 4 Professionalの機能セットと他のバージョンとの比較については、Terragen 4 製品比較をご覧ください。 Terragen 4製品ラインアップについては、左メニューの「▼機能紹介」をご覧ください。 Terragen 4のライセンスには、Terragen Sky(現在Early Access中、Windowsのみ)も含まれており、Terragen 4と同じライセンスキーでアンロックする事が出来ます。 Windows Mac OS 64ビット版Windows 7 SP1以降 OSX 8以降 メモリ 最小8GB以上、16GB以上を推奨 プロセッサ 最小2Ghz、デュアルコア以上を推奨 商品 条件 永久ライセンス サブスクリプション メンテナンス更新(1年) INDIE 50 年収5万ドル未満の個人 $199 $10/月、$96/年 $65 INDIE 100 個人(会社で購入しない)、または年間総収入が年間10万ドル未満の企業 $299 $16/月、$150/年 $99 SMALL CO 年間総収入が10万ドル~1,000万ドルの企業 $480 $27/月、$72/四半期、$240/年 $159 MID CO 年間総収入1,000万~10億ドルの企業 $740 $42/月、$111/四半期、$372/年 $249 LARGE CO 年間総収入が10億ドルを超える企業 $980 $56/月、$147/四半期、$492/年 $329 上記価格でTerragen 4 Professionalのフルライセンスが手に入ります。あなたが正直に価格帯を選択することを信頼し、私たちをサポートしてくださることに感謝します! 購入(実際の購入手続きは公式サイトで行います) 永久ライセンス 永久ライセンスをご購入いただくと、以下のものが提供されます Terragen 4 Professionalの1ワークステーション(インタラクティブ)ライセンス(永久、期限なし) Terragen Sky Professionalの1ワークステーション(インタラクティブ)ライセンス(永久、期限なし) 追加のレンダリング専用ライセンス5ライセンス(永久、期限なし) 1年間のメンテナンス。メンテナンス期間内にリリースされたすべてのメジャーおよびマイナーバージョンへの無償アップデートの権利が与えられます。(次年度以降のメンテナンス更新を割引価格で購入できます) 1台のコンピュータで、いつでもシーンの作成または編集に使用できます。また、画像やアニメーションをレンダリングするために他の5台のコンピュータを使用する事が出来ます。最大で合計6台のコンピュータで同時にTerragenを実行する事が出来ます。所有している他のコンピュータにTerragenをインストールする事が出来ます。より多くのコンピュータで同時にレンダリングする必要がある場合は、追加のレンダーノードライセンスをレンタルまたは購入する事が出来ます。 サブスクリプション すべてのサブスクリプションオプションには、以下のものが提供されます Terragen 4 Professionalの1ワークステーション(インタラクティブ)ライセンス(サブスクリプションが有効な期間有効) Terragen Sky Professionalの1ワークステーション(インタラクティブ)ライセンス(サブスクリプションが有効な期間有効) 追加のレンダリング専用ライセンス2ライセンス(サブスクリプションが有効な期間有効) サブスクリプションの有効期間期中にリリースされたすべてのメジャーおよびマイナーバージョンへの無償アップデート 1台のコンピュータで、いつでもシーンの作成または編集に使用できます。また、画像やアニメーションをレンダリングするために他の2台のコンピュータを使用する事が出来ます。所有している他のコンピュータにTerragenをインストールする事が出来ます。より多くのコンピュータで同時にレンダリングする必要がある場合は、追加のレンダーノードライセンスをレンタルまたは購入する事が出来ます。 サブスクリプションを四半期払いで購入すると12%の、年払いで購入すると20%の割引が適用されます。
https://w.atwiki.jp/handover/pages/19.html
Hiro was ordered to transfer abroad. As a result of confirming the handover materials, there was no manual for the regular inspection which excuted every six months. Therefore, Hiro made a manual about it. After the manual was completed, Hiro reviewed the manual by himself. It was perfect from his point of view. With the check of the creator himself alone, can you say that there is no omission? Creator s own review tends to be subjective. There may be facts that the author himself has overlooked. Improve document quality by getting the review from third party. Hiro asked his colleague Joe to review his manual. Joe has business knowledge about the system. It is possible for Hiro to have a review period for several days. As a result of the review, Joe pointed out the important revision for the manual that Hiro did not notice. In order to execute this pattern it is necessary to Spread of knowledge. In order to reliably reflect objective indications obtained with this pattern, it is important to Quick correspondance for the review and execute Update history. Also, if you can not execute this pattern, you should ensure objectivity by Check by other similar documents.
https://w.atwiki.jp/monopowers/pages/109.html
postgresとphpPgAdmin追加 「PostgreSQL」のインストール 「PostgreSQL」だけならpostgresql-serverのインストールのみで構いません。 自分の場合、PHPとの連携も行いたかったので、php-pgsqlもインストールしました。 [root@Fedora ~]# yum -y install postgresql-server php-pgsql = 「PostgreSQL」関連のインストール [root@Fedora ~]# yum clean packages = ダウンロードしたパッケージの削除 「PostgreSQL」の初期設定 文字コードの設定 「PostgreSQL」の文字コードをUNICODEで利用し、文字列カラムに対して並べ替え(ORDER BY)を使う場合、「ロケールなし」の初期化を行う必要があります。 [root@Fedora ~]# su - postgres = 「PostgreSQL」の管理者に変更 -bash-3.1$ rm -rf /var/lib/pgsql/data -bash-3.1$ initdb --encoding=UNICODE --no-locale -D /var/lib/pgsql/data = 初期化 「PostgreSQL」の起動 [root@Fedora ~]# /etc/rc.d/init.d/postgresql start 「PostgreSQL」の自動起動 Fedoraを起動する際に自動的に「PostgreSQL」を起動するようにします。 [root@Fedora ~]# chkconfig postgresql on 「PostgreSQL」の設定 「PostgreSQL」管理者の設定 Fedora上のパスワードの設定 [root@Fedora ~]# passwd postgres Changing password for user postgres. New UNIX password = パスワード Retype new UNIX password = パスワード(確認) 「PostgreSQL」上のパスワードの設定 [root@Fedora ~]# su - postgres = 「PostgreSQL」の管理者に変更 -bash-3.1$ psql template1 = 「PostgreSQL」に接続 Welcome to psql 8.1.3, the PostgreSQL interactive terminal. Type \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit template1=# alter user postgres with password 設定するパスワード ; = 「PostgreSQL」上のpostgresユーザのパスワードを設定 ALTER ROLE template1=# \q = 終了 一般ユーザの設定 [root@Fedora ~]# su - postgres = 「PostgreSQL」の管理者に変更 -bash-3.1$ createuser -dPE kaz = kazを「PostgreSQL」に登録 Enter password for new role = パスワード Enter it again = パスワード(確認) Shall the new role be a superuser? (y/n) n Shall the new role be allowed to create more new roles? (y/n) n CREATE ROLE 「postgresql.conf」ファイルの設定 [root@Fedora ~]# su - postgres = 「PostgreSQL」の管理者に変更 -bash-3.1$ vi /var/lib/pgsql/data/postgresql.conf = 設定ファイルの編集 #listen_addresses = localhost # what IP address(es) to listen on; ↓ listen_addresses = localhost,192.168.0.1 # what IP address(es) to listen on; = 外部からの接続を受け付ける listen_addresses = * # what IP address(es) to listen on; = すべての接続を受け付ける場合 #port = 5432 # (change requires restart) ↓ port = 5432 # (change requires restart) = コメント解除 「pg_hba.conf」ファイルの設定 [root@Fedora ~]# su - postgres = 「PostgreSQL」の管理者に変更 -bash-3.1$ vi /var/lib/pgsql/data/pg_hba.conf = 設定ファイルの編集 最終行に追加 host all all 192.168.0.0 255.255.255.0 trust = 内部からのアクセスは許可 host all all 0.0.0.0 0.0.0.0 md5 = 上記以外のアクセスはパスワードにより許可 「PostgreSQL」を再起動し、設定を反映させます。 [root@Fedora ~]# /etc/rc.d/init.d/postgresql restart
https://w.atwiki.jp/terraria-onion/pages/6.html
TShockサーバー サーバ情報 タイプ TShockサーバ サーバ名 Terraria-onion 2 最大接続者数 8名 ワールド名 Multi マップサイズ Medium 接続ホスト名 61.25.180.77 ポート番号 7777 サーバブラウザ - Terraria unofficial server list Serversで、サーバーの有無を確認してください。 ※ここに、サーバーがない場合、は停止中です。
https://w.atwiki.jp/solyrics/pages/39.html
POSTMODERN ア アラララァ ア アァ Yah Same side Young champ 1-2 1-2 To be in competition with battle for prime is D-machine Every guy studied in pure way, even in tha case, get no name Your life is building wall on your mind You know I mean? Gotta make sure you on floor I think you need interaction again and again OK POSTMODERN right here Gonna start tha show Yah Let's sing Uh A-yo Yellow press 癇に障るideologue PSHCHO RHYTHM乱す安全で納得なepilogue Let's make an epoch in Hip-hop A storm in a tea-cup What tha fuck Stop A-yo Flamingos Venture capital 成れの果てはdead castle Hey Dead cattles Let me handle my battle Hello My mellow Dez S.O Triangle to tha square to tha circle Yo Listen up My fellows Yea Uh (Your heart take it from this sound 1-2) DJ Mass spin tha shit (Check this out) Alright C'mon A-yo POSTMODERN ONE FOR THA GRIPPIN' A PEN TO HAVE SOME MO' FUN POSTMODERN TWO DISCERNMENT I'M INTERESTED IN YOU POSTMODERN THREE BEAT IT WIT ME JUST FEEL THA HEAT POSTMODERN FOUR FIND A POWER SOURCE LET'S GO Yo Frankly speaking, a real thing is history but it'll reborn soon... So many kinds of community and company in this country They believe only their means But I think most important things is to get to know different backgrounds and culture 'Cus it's variable factor You know I'm talkin' about eternal theme C'mon A-yo POSTMODERN ONE FOR THA GRIPPIN' A PEN TO HAVE SOME MO' FUN POSTMODERN TWO DISCERNMENT I'M INTERESTED IN YOU POSTMODERN THREE BEAT IT WIT ME JUST FEEL THA HEAT POSTMODERN FOUR FIND A POWER SOURCE LET'S GO "Do you like funky graphixx?" (OK) "What's this?" (C'mon Yo) "Do you like funky..." (Attractions) "Mah It's not like that" (Shut a fuck up) "Do you like funky graphixx?" (Yeah) "So damn!" (Really) "Gracious!" All topics for discussion They were serious questions Can you find forgotten passion? Everybody feel this situation One day you broke my communication Find out contradiction Self destruction of business It's going around and around... Yo Yo What about music culture? It's getting better For real? I think so... For real? Pretty much Yea... Had enuff! All cleared? Not cleared Never mind about who is tha winner Beginner Beginner Hey Y'all had better know that Believer Unbeliever Feel this I'll give ya Digger tha killer Quick on tha trigger Bigger and better Just go tha whole figure POSTMODERN ONE FOR THA GRIPPIN' A PEN TO HAVE SOME MO' FUN POSTMODERN TWO DISCERNMENT I'M INTERESTED IN YOU POSTMODERN THREE BEAT IT WIT ME JUST FEEL THA HEAT POSTMODERN FOUR FIND A POWER SOURCE LET'S GO POSTMODERN FIVE DO ME RIGHT GOTTA GET ON THA MIC POSTMODERN SIX MAD LYRIXX NO NEED THA THROWIN' BRIXX POSTMODERN SEVEN HITTIN' THA SPOT I'M FEELIN' Y'ALL YELLIN' C'MON POSTMODERN STILL RUNNIN' THING JUST KEEP ON POSTMODERN A-yo POSTMODERN Un Un POSTMODERN Yo C'mon POSTMODERN JUST KEEP ON POSTMODERN SOUL'd OUT 2006 We stand on mimixx Still runnin' things JUST KEEP ON
https://w.atwiki.jp/postal2-wiki/pages/36.html
Postal2のバージョン一覧です。 英語でもいいのなら、完全版のSteam版「POSTAL 2」で間違いないです。全部入りの上、2014年現在もアップデートが行われています。 国内版は無駄に種類が多いですが、マイクロマウスが倒産し、権利がドライブに移行してからはセット内容を変えたりの小手先で似たようなもんです。 また、ベースになっているバージョンが非常に古いためMODが導入できない場合もあります。 しかし、個性的な吹き替えの魅力は今も色あせません。 基本バージョン・追加パック Postal2 Classic(無印) 最初に発売されたバージョン Postal2 Share The Pain(STP) 無印にマルチプレイを追加したもの postal2 Apocalypse weekend 追加パック。本編の月~金曜日のおつかいの後の土日を書く。 ゾンビの襲来など本編とは違う感じを楽しめる。オープンマップからステージ制へ移行。 Postal A Week in Paradise(AWP) 本編とWeekendを繋げ月~日曜日までを続けてプレイできるようにし、武器の追加や残虐性アップなどの追加要素をいれたもの。 もともとはユーザー制作のMODだったが、公式に採用されるようになった。 Postal2 Complete(Steam版) 上記、Postal2 Classic(Version 1409),STP,Weekend,AWP全部入りの上、武器の追加やNPCが帽子をかぶるなどのバリエーションの追加、最新PCへの最適化やワイドスクリーンへの対応などまさに完全版。また、Steam実績やサーバーとセーブデータを同期できるSteamクラウドに対応。 2014年現在もコンスタントにアップデートがおこなわれており、バグフィックスやさらなる要素の追加が期待できる。 2014/05/03のアップデートによりや簡単にMODを導入できるSteam Workshopに対応した。 360のコントローラへの対応のアップデートを予定している。 また、時期は明示されていないが、日本語への対応も可能だそうだ。 なお、Postal2 Classicのインストールしたい場合はベータ版への参加を有効にする。 Postal2 Complete(GOG版) STP,Weekend同梱。ワイドスクリーンへの対応や現在のPCへの最適化が行われている。DRMフリーなのが特徴。 Steam版の方が優先的にアップデートされているため、バージョンは2013年のものとなっている。
https://w.atwiki.jp/advent20171225/pages/36.html
■プレー動画 ■情報 判定位置形状 直線 補足 位置固定 ノーツ移動方向 縦落下 判定位置 - 判定 ☆☆ 認識 ☆☆ 操作 ☆☆ プレースタイル 買い切り ■所感等 縦落下型 6レーンの音ゲーだが、レーンが斜めになっており、同時押しなどが ややわかりづらい。 中央の2レーンはスクラッチも兼ねており、赤いノーツが来た場合には画面をフリックする必要がある。 赤いロングノーツが来た場合には、こすりつづけず、こすってから指を止めておくことで判定となる。 操作はタップ、ホールド、スクラッチ(中央2レーンのみ存在)の3種。 収録楽曲は海外アーティストによるオリジナルが中心。 ■順路 prev→ ReRave Plus next→ Zyon載音
https://w.atwiki.jp/tmiya/pages/131.html
Scala 2.8 配列 (Scala 2.8 Arrays) Martin_Odersky、EPFL 2009 年 10 月 1 日 英語PDF 問題 (The Problem) Scala では、配列は最もトリッキーな概念の 1 つであることが分かりました。 望ましいことを破綻させる、非常に難しい制約を扱わなければなりません。 一方で我々は、Java と相互運用するために配列を使うことを望みます。このため、配列は Java と同じ表現でなければなりません。 この下位レベル表現は、配列で高パフォーマンスを得るにも役立ちます。 しかし他方、Java の配列には厳しい制限があります。 まず、Java にはただ一つの配列型表現ではなく、実際には 9 つの異なる表現があります。 参照型の配列のための表現が 1 つと、プリミティブ型 byte、char、short、int、long、float、double と boolean 等に対する 8 つの表現があります。 これらの異なる表現に共通の型はなく、単なる java.lang.Object よりいっそう特化しおり、java.lang.reflect.Array 中には任意の型の配列を扱ういくつかのリフレクション関連のメソッドさえあります。第二に、ジェネリック型の配列を生成する方法がありません。; ただ単相的な配列生成だけが許されています。 第三に、配列がサポートする操作は、インデックス付け、更新、長さのみです。 Scala で我々がしたいことと比べてみてください。 配列を、シーケンス上で定義される数百かそれ以上のメソッドをサポートするコレクション階層中に位置づけるべきです。 それらは必ずジェネリックで、型変数 T に対して Array[T] を生成できるべきです。 過去 (The Past) Java との相互運用性およびパフォーマンスのために課せられた表現上の制約と、これら望まれることとをどのように統合できるでしょうか? 簡単な答えはなく、そして私は、我々が Scala を最初に設計したときに間違いをおかしたと思っています。 Scala 言語は 2.7.x まで、ボクシング/アンボクシングと呼ばれる処理で必要とされるときに、「魔法のように」配列をラップ/アンラップしていました。 それは、プリミティブな数値型をオブジェクトとして扱うときにすることと似ています。 「魔法のように」とは、次を意味します。 コンパイラは、式の静的な型に基づいてコードを生成します。 さらなるマジックにより、ジェネリック配列を生成します。 new Array[T] のような式は(ここで T は型パラメータ)、new BoxedAnyArray[T] に変換しました。 BoxedAnyArray was a special wrapper class ,which changed its representation depending on the type of the concrete Java array to which it was cast. BoxedAnyArray は特別なラッパークラスで、具象 Java 配列の型に依存する表現をそれでキャストしたものへ変えます。この方法はたいていのプログラムで十分機能しました。 しかし、型テストと型キャストのある組み合わせに関して、未初期化配列のチェックに関しても、実装には「漏れ」が起きました。 予期しないパフォーマンスの低下も起こり得ました。 問題のいくつかは David MacIver[Mac08b] とMatt Malone[Mal09] によって述べられています。 ボックスされた配列も、共変コレクションと組み合わせると不健全でした。 まとめると、古い配列実装技術では解決が難しかったのです。なぜなら、漏れが起きる場所を特定することに大変な労力を強いられ、漏れを起こしやすい複雑な抽象化だからです。 解決策の探求 (Exploring the Solution Space) 配列に必要なマジック量を減らす明らかな方法は、2 つの表現を使うことです。 1 つは Java 配列に密接に対応するもので、もう一方は Scala のコレクション階層と一体となる部分を形づくります。暗黙の型変換を使って、2 つの表現を透過的に変換できます。 これは、David MacIver (と Stepan Koltsov の貢献)による配列リファクタリング提案の要点です [Mac08a]。 この提案の主な問題は、私の見るところ、これがプログラマーに使うべき配列種の選択を強いることです。 その選択は明快ではありません。 Java ライクな配列は速く、相互運用可能であるのに対して、Scala ネイティブの配列は、もっとよく洗練された配列操作群をサポートします。 このような選択があるとき、異なる決定に対しては異なるコンポーネントとライブラリを用いることが期待されますが、それは、非互換性と脆弱で複雑なコードをもたらします。 MacIver と Koltsov は、その軽減のためにいくつかのコンパイラマジックを導入します。 彼らは、引数として配列をとるメソッドを 2 つのオーバーロードされたバージョンに自動的に分けることを提案します。 1 つは Java 配列をとり、もう 1 つはジェネリックな Scala 配列をとるものです。 私はこれが、よりひどい配管工事問題をいくつか解くとは思いますが、しかし単に問題を隠して少しましになるだけであり、解決はしないと思います。 似ているが少し異なる観点を持つアイデアとして、Scala のコレクション階層に統合する暗黙の変換を用いて、ネイティブの配列を「ドレスアップ」するものがあります。 これは 2.8 以前の Scala 中で String から RichString への変換で用いた方式と似ています。 MacIver/Koltsov 提案との違いは、人は、Scala 中の RichString を滅多に参照しないのと同様に、通常はユーザーコード中で Scala ネイティブの配列を参照しないであろうということです。 人は、Java 配列に必要なメソッドとトレイトを加える、暗黙の型変換を当てにするだけでしょう。 特に、Scala 2.8 以前のバージョンにおいては、次のような直観的でないプロパティが使われました。 "abc".reverse.reverse == "abc" , yet "abc" != "abc".reverse.reverse ! ここでの問題は、reverse メソッドをクラス Seq から継承していたことであり、そこでは、それが別の Seq を返すと定義されていました。 文字列はシーケンスではありませんから、String 上で呼ばれたときに reverseが返すことのできるただ 1 つの適した型は RichString でした。 しかしそうすると Java から継承される String 上の equals メソッドは、String が RichString と等価であり得るとは認識しません。 2.8 コレクション (2.8 Collections) Scala 2.8 の新しい方式は、配列と文字列両方の問題を解決します。 それは、新しい 2.8 コレクションフレームワークをクリティカルに使い、Seq のようなコレクション・トレイトに、コレクションの表現にわたる抽象化を行う実装トレイトを関連づけます。 たとえば、トレイト Seq に加えて、次のトレイトがあります。 trait SeqLike[+Elem, +Repr] { ... } このトレイトは表現型 Repr でパラメータ化されています。 この表現型については、何も必要とされる前提がありません。; 特に、これは Seq のサブ型である必要はありません。 トレイト SeqLike 中の reverse のようなメソッドは、Seq ではなく表現型 Repr の値を返します。 Seq トレイトは、Reprパラメータを Seq にインスタンス化することで、SeqLike からそのすべての基本的操作を継承します。 trait Seq[+Elem] extends ... with SeqLike[Elem, Seq[Elem]] { ... } 基本トレイトと実装トレイトへの似たような分割手法を、Traversable、Iterable や Vecotr を含め、他のほとんどの種類のコレクションに適用します。 配列の統合 (Integrating Arrays) 我々は 2 つの暗黙の変換を使って、配列をこのコレクションフレームワークへ統合します。 最初の変換は、Array[T] を、型 VectorLike[T,Array[T]] のサブ型である、型 ArrayOps のオブジェクトへマップします。 この変換を使って、自然な型の配列については、すべてのシーケンス操作が利用できます。 特に、メソッドは、その処理結果として ArrayOps 値の代わりに配列を出力します。 なぜなら、これら暗黙の型変換の結果は非常に短命なので、今の VM はエスケープ解析を使ってそれらを完全に除去できるからです。 ですから、それら付加的なメソッドに関する呼び出しオーバーヘッドは実質的にゼロであることが期待できます。 ここまでは良いのです。 しかしもし配列を、それ上の 単なる Seq メソッドの呼び出しではないような、実際の Seq に変換する必要があるならどうでしょう? そのために、配列をパラメータにとり、WrappedArray に変換するもう 1 つの暗黙の型変換があります。 WrappedArrays は、与えられた Java 配列のすべてのベクトル操作を実装する、ミュータブルな Vectorsです。 WrappedArray と ArrayOps オブジェクトの違いは、reverse のようなメソッド類では明らかです。 WrappedArray 上の呼び出しでは reverse は再び WrappedArray を返しますが、しかし ArrayOps オブジェクト上の呼び出しでは Array を返します。 Array から WrappedArray への変換は不可逆です。 対をなす 2 つの暗黙の型変換により WrappedArray が Array へ変換されます。 WrappedArray と ArrayOps は共にトレイト ArrayLike 実装を継承します。 これは ArrayOps と WrappedArray 間のコード重複を避けるためです。 すべての操作は、共通の ArrayLike トレイトへまとめ入れられています。 あいまいさの回避 (Avoiding Ambiguities) このように、 Array から ArrayLike 値への 2 つの暗黙の型変換がありますが、どのように選び、どのように曖昧さを避ければよいのでしょうか? そのこつは、Scala 2.8 のオーバーロードと暗黙解決の一般化を利用することです。 以前は、もっぱらメソッドの引数型に基づき、最も特化(specific)したオーバーロードされたメソッド、あるいは暗黙の型変換が選択されていました。 There was an additional clause ,which said that the most specific method could not be defined in a proper superclass of any of the other alternatives. 最も特化したメソッドは他のいかなる代替物の固有(proper)のスーパークラス中で定義できない、と述べる付加的な節がありました。 この方式は Scala 2.8 では次の、より進歩的なものに置き換わりました。 オーバーロードされたメソッドあるいは暗黙の変換の、2 つの異なる適用可能な代替物を比較するとき、各メソッドは、より特化した引数を持つ場合は 1 ポイント獲得し、固有のサブクラス内で定義されている場合も 1 ポイント得ます。 これら 2 つの比較により、得点が多い方の代替物がもう 1 つに対して「勝ち」ます。 このことは特に、もし代替物が同一の引数型を持っていれば、サブクラスで定義されているものが勝つことを意味します。 このことを配列に適用すると、Array から ArrayOps への変換を標準的な Predef オブジェクト中に置き、Array から WrappedArray への変換を Predef から継承されているクラス LowPriorityImplicits 中に置くことで、Array から ArrayOps への変換を Array から WrappedArray への変換よりも優先できます。 このように、シーケンスメソッドの呼び出しは、常に ArrayOps への変換を起動します。 WrappedArray への変換は、配列をシーケンスに変換する必要があるときのみ起動されます。 String の統合 (Integrating Strings) 本質的に同じ方法を文字列に適用します。 2 つの暗黙の型変換があります。 1 つは、String から StringOps への変換であり、クラス String に役に立つメソッドを加えます。 2 つめは、String から WrappedString への変換であり、文字列をシーケンスに変換します。 ジェネリック配列の生成とマニフェスト (Generic Array Creation and Manifests) 以上でほとんど全てです。 唯一の残っている問題は、ジェネリック配列生成の実装方法です。 Java と異なり、Scala ではインスタンス生成 new Array[T] が可能です。 ここで T は型パラメータです。 Java のような統一的な配列表現が存在しないという事実の下、これをどのように実装できるでしょうか? その唯一の方法は、型 T を記述する実行時情報の追加を要求することです。 Scala 2.8 には、このためのマニフェストと呼ばれる新しいメカニズムがあります。 型 Manifest[T] のオブジェクト は、T についての完全な情報を提供します。マニフェスト値は通常、暗黙のパラメータとして渡されます。 そしてコンパイラは、静的にわかる型 T のおかげで、それらをどのように構築したらよいかがわかります。 ClassManifest と名付けられた、より弱い形もあります。 それは、必ずしもすべての引数型を知らずに、たんに型のトップレベルのクラスを知ることで、構築されます。 それは配列生成で必要とされる実行時情報の類です。 次は 1 つの例です。 0 から与えられた長さまでの数範囲に、与えられた関数 f を適用し、その結果からなる配列を出力する、メソッド tabulate (一覧)を考えてみます。 Scala 2.7 までは、tabulateを次のように書けました。 def tabulate[T](len Int, f Int = T) = { val xs = new Array[T](len) for (i - 0 until len) xs(i) = f(i) xs } Scala 2.8 では、これはもうできません。 なぜなら、Array[T] の正しい表現を生成するには実行時情報が必要だからです。 人が、メソッドへ暗黙のパラメータとして ClassManifest[T] を渡して、この情報を提供する必要があります。 def tabulate[T](len Int, f Int = T)(implicit m ClassManifest[T]) = { val xs = new Array[T](len) for (i - 0 until len) xs(i) = f(i) xs } この代わりに略記形式として、型パラメータ T 上のコンテキスト境界(*1)を使えます。与えてみます。 def tabulate[T ClassManifest](len Int, f Int = T) = { val xs = new Array[T](len) for (i - 0 until len) xs(i) = f(i) xs } (*1) 一般に、コンテキスト境界をもつ型パラメータは [T Bound]の形です。; これは、型 Bound[T] の暗黙のパラメータと一緒にプレーンな型パラメータ T へ展開されます。 Int あるいは String、List[T] のような型上で tabulate を呼ぶときは、Scala コンパイラは tabulate へ暗黙の引数として渡すマニフェストクラスを生成できます。 その他の型パラメータ上で tabulateを呼ぶときは、人が、他の暗黙のパラメータあるいはコンテキスト境界を使ってマニフェストクラスが必要とすることを伝える必要があります。 たとえば。 def tabTen[T ClassManifest](f Int = T) = tabulate(10, f) ボクシング方式を離れてマニフェストクラスへ向かうことは、上記の tabulate の最初のバージョン中にあるような、ジェネリック配列を生成する既存のコードを変えることになります。 必要な変更は通常、ある型パラメータにコンテキスト境界を追加するだけです。 クラス GenericArray (Class GenericArray) ジェネリックな配列生成の場合にマニフェストを加えることは、よくありません。 Scala 2.8 は GenericArray クラスで配列の代替バージョンを提供します。 このクラスは、パッケージ scala.collection.mutable 内で次のように定義されています。 class GenericArray[T](length Int) extends Vector[T] { val array Array[AnyRef] = new Array[AnyRef](length) ... // all vector operations defined in terms of `array } 標準的な配列と異なり、GenericArrays はマニフェストクラスなしで生成できます。 なぜなら、それら配列が同一の表現を持っているからです。 それらの全ての要素は、Java の Object[] 配列に対応する、Array[AnyRef] に記憶されます。 Scala コレクションライブラリへの GenericArray の追加は、プログラマに、標準的な配列か、あるいはジェネリック配列を選ぶことを要求します。 この選択は、しかし、容易に答えることができます。 要素型に対するマニフェストを容易に作れるときはいつでも、通常の配列を選ぶのがベターです。なぜなら、より速い傾向があり、よりコンパクトで、Java とより良い相互運用性があるからです。 マニフェストクラスを作成できないときだけ、GenericArray へ立ち戻って考えるべきです。 Scala の現在のコレクションフレームワーク中で、GenericArray が使われる唯一の場所は、Seq クラスの sortWith メソッドの中です。 xs.sortWith(f) の呼び出しは、そのレシーバ xs を最初に GenericArray に変換し、得られる配列を java.util.Arrays 中で定義された Java ソートメソッドに渡し、ソートされた配列を xs と同じ Seq の型へ戻し変換します。 配列への変換は sortWith の単なる実装詳細なので、シーケンスの要素型に対してマニフェストクラスを要求するのは合理的でないと感じました。 ですから GenericArray を選択しました。 まとめ (Conclusion) まとめると、新しい Scala コレクションフレームワークは配列や文字列の長期にわたる問題をいくつか解決します。 かなりの量のコンパイラマジックを除去し、前の実装で存在したいくつかの落とし穴を回避します。 それは、ライブラリとフレームワークの構築で一般に役に立つ、Scala 言語の 3 つの新しいフィーチャーに依存しています。 第一は、オーバーロードと暗黙の解決の一般化により、いくつかの暗黙の変換に優先順位を付けることが可能です。 第二は、マニフェストが型消去によって失われた型情報を実行時に提供します。 第三は、コンテキスト境界は、暗黙の引数のある形態に対する便利な略記表現となります。 これら 3 つの言語フィーチャーは、別のノートでより詳細に記述します。 参考文献 (References) [Mac08a] David MacIver. Refactoring scala.array. Pre-SIP (Scala Improvement Proposal), October 2008 . http//www.drmaciver.com/repos/scala-arrays/sip-arrays.xhtml . [Mac08b] David MacIver. Scala arrays. Blog, June 2008. http//www.drmaciver.com/2008/06/scala-arrays . [Mal09] Matt Malone. The mystery of the parameterized array. Blog, August 2009 . http//oldfashionedsoftware.com/2009/08/05/the-mystery-of-the-parameterized-array . SIDライブラリ ページ先頭
https://w.atwiki.jp/qtmemo/pages/41.html
概要 QBitArray クラスはビット配列を提供します。 このクラスはimplicit sharingを利用しています。 メソッド コンストラクタ QBitArray QBitArray() 空の QBitArray オブジェクトを生成します。 QBitArray QBitArray(int size, bool value = false) 要素数 size の QBitArray オブジェクトを生成します。 各要素は value の値で初期化されます。 コピーコンストラクタ QBitArray QBitArray(const QBitArray other) implicit sharingを利用しているため、中身は同じになります。 ムーブコンストラクター QBitArray QBitArray(QBitArray other) 値を取得する bool QBitArray at(int i) const インデックス i のビットの値を返します。 i はビット配列における有効なインデックスである必要があります。( 0 = i size() ) bool QBitArray testBit(int i) const インデックス i の値がtrueの場合はtrue、そうでない場合はfalseを返します。 i はビット配列における有効なインデックスである必要があります。( 0 = i size() ) 値を変更する void QBitArray setBit(int i) インデックス i にtrueを設定します。 void QBitArray setBit(int i, bool value) インデックス i に value の値を設定します。 bool QBitArray toggleBit(int i) インデックス i の値を反転させ、以前の値を返します。 i はビット配列における有効なインデックスである必要があります。( 0 = i size() ) QBitArray ba(2);ba.setBit(1);//ab = { 0, 1 }qDebug() ba.toggleBit(0); //falseqDebug() ba.toggleBit(1); //true//ab = { 1, 0 } void QBitArray clear() ビット配列の中身をクリアし、空にします。 void QBitArray clearBit(int i) インデックス i のビットを0にします。 i はビット配列における有効なインデックスである必要があります。( 0 = i size() ) 添字アクセス QBitRef QBitArray operator[](int i) QBitRef QBitArray operator[](uint i) インデックス i の位置にある値を取得または設定できます。 i はビット配列における有効なインデックスである必要があります。( 0 = i size() ) bool QBitArray operator[](int i) const bool QBitArray operator[](uint i) const インデックス i の位置にある値を取得できます。 ビット配列の情報を取得 int QBitArray count(bool on) const on = true の場合は、ビット配列中のfalseの数を返します。 on = false の場合は、ビット配列中のtrueの数を返します。 bool QBitArray isEmpty() const ビット配列の要素数が0の場合はtrue、そうでない場合はfalseを返します。 QBitArray().isEmpty(); // returns trueQBitArray(0).isEmpty(); // returns trueQBitArray(3).isEmpty(); // returns false bool QBitArray isNull() const QBitArray オブジェクトが null の場合はtrue、そうでない場合はfalseを返します。 QBitArray().isNull(); // returns trueQBitArray(0).isNull(); // returns falseQBitArray(3).isNull(); // returns false ビット配列の大きさを取得・変更する int QBitArray count() const int QBitArray size() const ビット配列の要素数を返します。 void QBitArray resize(int size) ビット配列の大きさを変更します。 size が現在の大きさより大きい場合、末尾に要素を追加していき、falseで初期化します。 size が現在の大きさより小さい場合、末尾から要素を削除していきます。 QBitArray ba(10);ba.resize(20);qDebug() ba.size(); //20 インデックスは0~19ba.resize(5);qDebug() ba.size(); //5 インデックスは0~4 void QBitArray truncate(int pos) インデックス pos にビット配列を切り縮めます。 pos がビット配列の末尾を超えている場合は何もしません。 QBitArray ba(10);qDebug() ba.size(); //10 インデックスは0~9ba.truncate(5);qDebug() ba.size(); //5 インデックスは0~4 ビット配列の要素を変更する bool QBitArray fill(bool value, int size = -1) ビット配列のすべての要素を value の値に設定します。 成功場合はtrue、そうでない場合はfalseを返します。 size が-1(デフォルト値)以外に設定されている場合、ビット配列は size へ事前にリサイズされます。 QBitArray ba(8);ba.fill(true);//ba [ 1, 1, 1, 1, 1, 1, 1, 1 ]ba.fill(false, 2);//ba [ 0, 0 ] void QBitArray fill(bool value, int begin, int end) インデックス begin からインデックス end までを value の値に設定します。 begin 及び end はビット配列における有効なインデックスである必要があります。 ( 0 = begin = size() and 0 = end = size() ) QBitArray ba(8);ba.fill(true,0,5);//ba [ 1, 1, 1, 1, 1, 0, 0, 0 ] その他 void QBitArray swap(QBitArray other) 他のQBitArray オブジェクトと中身を交換します。 演算子 bool QBitArray operator!=(const QBitArray other) const other と異なるビット配列の場合はtrue、そうでない場合はfalseを返します。 bool QBitArray operator==(const QBitArray other) const other と同じビット配列の場合はtrue、そうでない場合はfalseを返します。 QBitArray QBitArray operator=(const QBitArray other) other を本オブジェクトに代入します。 QBitArray QBitArray operator=(QBitArray other) ビット演算子 QBitArray QBitArray operator =(const QBitArray other) other とのAND演算を行い、その結果を QBitArray オブジェクトで返します。 QBitArray a(3);QBitArray b(2);a[0] = 1; a[1] = 0; a[2] = 1; // a [ 1, 0, 1 ]b[0] = 1; b[1] = 1; // b [ 1, 1 ]a = b; // a [ 1, 0, 0 ] QBitArray QBitArray operator|=(const QBitArray other) other とのOR演算を行い、その結果を QBitArray オブジェクトで返します。 QBitArray a(3);QBitArray b(2);a[0] = 1; a[1] = 0; a[2] = 1; // a [ 1, 0, 1 ]b[0] = 1; b[1] = 1; // b [ 1, 1 ]a |= b; // a [ 1, 1, 1 ] QBitArray QBitArray operator^=(const QBitArray other) other とのXOR演算を行い、その結果を QBitArray オブジェクトで返します。 QBitArray a(3);QBitArray b(2);a[0] = 1; a[1] = 0; a[2] = 1; // a [ 1, 0, 1 ]b[0] = 1; b[1] = 1; // b [ 1, 1 ]a ^= b; // a [ 0, 1, 1 ] QBitArray QBitArray operator~() const NOT演算を行い、その結果を QBitArray オブジェクトで返します。 QBitArray a(3);QBitArray b;a[0] = 1; a[1] = 0; a[2] = 1; // a [ 1, 0, 1 ]b = ~a; // b [ 0, 1, 0 ] グローバルなビット演算子(QBitArray クラスのメンバではない) QBitArray operator (const QBitArray a1, const QBitArray a2) QBitArrayオブジェクト a1 及び a2 でAND演算を行い、その結果を QBitArray オブジェクトで返します。 QBitArray a(3);QBitArray b(2);QBitArray c;a[0] = 1; a[1] = 0; a[2] = 1; // a [ 1, 0, 1 ]b[0] = 1; b[1] = 1; // b [ 1, 1 ]c = a b; // c [ 1, 0, 0 ] QBitArray operator|(const QBitArray a1, const QBitArray a2) QBitArrayオブジェクト a1 及び a2 でOR演算を行い、その結果を QBitArray オブジェクトで返します。 QBitArray a(3);QBitArray b(2);QBitArray c;a[0] = 1; a[1] = 0; a[2] = 1; // a [ 1, 0, 1 ]b[0] = 1; b[1] = 1; // b [ 1, 1 ]c = a | b; // c [ 1, 1, 1 ] QBitArray operator^(const QBitArray a1, const QBitArray a2) QBitArrayオブジェクト a1 及び a2 でXOR演算を行い、その結果を QBitArray オブジェクトで返します。 QBitArray a(3);QBitArray b(2);QBitArray c;a[0] = 1; a[1] = 0; a[2] = 1; // a [ 1, 0, 1 ]b[0] = 1; b[1] = 1; // b [ 1, 1 ]c = a ^ b; // c [ 0, 1, 1 ] データストリーム QDataStream operator (QDataStream out, const QBitArray ba) QDataStream operator (QDataStream in, QBitArray ba)