肌の悩みをピンポイントでカバーインターナショナルコスメティックス株式会社は、韓国コスメブランドの「ザ・セム(the SAEM)」から、『ザ・セム CPコンシーラーペンシル』(3色)を6月25日に発売した。容量は2.5g、販売価格は、各990円(税込み)。同社は、「ザ・セム」の日本における輸入販売元。同ブランドの『チップコンシーラー』は、優れたカバー力と密着力が支持されて、コスメサイトで殿堂入りしたロングセラーアイテムである。自然な仕上がりの涙袋を簡単に今回発売する『CPコンシーラーペンシル』は、シミ・ほくろ・目元のクマやくすみ等の肌悩みをピンポイントでカバーするペンシルタイプのコンシーラー。細芯でやわらかすぎず、スルスル塗れるテクスチャーなので、気になるシミ・ほくろ等の隠したいところを目立たなくできる。厚塗り感ができにくく、メイク直しの時も手軽にリタッチが可能。涙袋は、下まぶたに『CPコンシーラーペンシル』をのせてなじませると簡単に演出できる。細かいラインからやや太い幅のラインまで描きやすく、初心者でもテクニックいらずでリアルな涙袋が作れる。スポットメイクとして、眉毛の縁取りや唇の輪郭を整えることにも利用で可能で、いつものメイクがワンランクアップする。カラーは、3色展開。「1.0 クリアベージュ」は、透明感のある明るいベージュでハイライトに。「1.5 ナチュラルベージュ」は、やや明るい自然なベージュ。ニュートラルカラーで取り入れやすい。「SB サーモンベージュ」は、ほんのりピンクみがあるので肌なじみが良く、クマのカバーに効果的である。(画像はプレスリリースより)【参考】※プレスリリースインターナショナルコスメティックス株式会社※ICIコスメストアザ・セム CPコンシーラーペンシル
2023年07月07日チョコレート菓子専門店のザ・テイラー(THE TAILOR)から、期間限定スイーツ「ザ・ショコラアルモニー」が登場。2022年12月1日(木)より、ザ・テイラー 阪急うめだ店・渋谷東急フードショー店にて発売される。濃厚なチョコレート菓子を提案する専門店、ザ・テイラー文字通り“服の仕立屋=テイラー”を思わせる落ち着いた雰囲気の店構えで、濃厚な大人のチョコレート菓子を提案しているザ・テイラー。2021年にデビューした「ザ・ショコラアルモニー」は、濃厚なチョコレートのハーモニーが楽しめるブランド初のオリジナルショコラケーキだ。3種のスペイン産チョコをブレンドしたオリジナルケーキ3種類のスペイン産チョコレートをブレンドした生地は、いちじくのコンフィを練り込んでからオーブンへ。焼き上がった生地にマルサラワインのシロップを塗ることで、しっとりとした食感と華やかな風味が楽しめる、大人の一品に仕上げている。このほか、アールグレイとキャラメルを合わせたソースをミルクチョコで包み込み、ココアクッキーでサンドした「ザ・ショコラクチュール アールグレイ&キャラメル」(季節限定)、ガナッシュを詰めて焼き上げた濃厚なフィナンシェ「ザ・フォンダンショコラフィナンシェ」など、クリスマスシーズンを華やかに彩る多彩なスイーツも用意されている。商品情報「ザ・ショコラアルモニー」発売日:2022年12月1日(木)価格:2,700円販売店舗:ザ・テイラー 阪急うめだ店・渋谷東急フードショー店【店舗情報】■ザ・テイラー 阪急うめだ店住所:大阪府大阪市北区角田町8-7阪急うめだ本店B1FTEL:06-6313-0146■ザ・テイラー 渋谷東急フードショー店住所:東京都渋谷区道玄坂1-12-1渋谷 東急フードショー① 1階TEL:03-3477-4673
2022年12月02日ビューティフルピープル(beautiful people)のスタンダードライン「ザ・ビューティフルピープル(THE / a beautiful people)」から、アメリカのオルタナティブロックバンド「ザ・フレーミング・リップス」とのコラボレーションウェアが登場。2022年春夏シーズンに、ビューティフルピープル直営店ほかにて発売する。ザ・ビューティフルピープル×ザ・フレーミング・リップス「ザ・フレーミング・リップス」は、1983年にウェイン・コインとスティーブン・ドローズによってオクラホマで結成されたオルタナティブロックバンド。今回のコラボレーションでは全3型を展開する。“ポップなアートワーク”が主役のニットウェア2022年1月下旬にはポップなアートワークを取り入れた、ニットのノースリーブプルオーバーとカーディガンを発売。アートワークは、色によってコットン糸・アクリル糸・シルク糸を使い分けることで、凹凸感とミクスチャー感を演出し、グラフィックのキャッチーさを引き立たせた。カラーは、エクリュ、レッド、ネイビーの3色が揃う。DVDジャケットのグラフィック入りTシャツ3月下旬には、2006年にオクラホマの「the Zoo Amphitheater」で行われたライブのDVDジャケットをモチーフにしたシースルーTシャツを販売。極細い綿糸を編んだ透け感のあるTシャツに、フロントからバックへストーリー性を感じさせるグラフィックをプリントした。【詳細】ビューティフルピープル×ザ・フレーミング・リップス取扱店舗:ビューティフルピープル 青山店・伊勢丹新宿店・渋谷パルコ店・阪急うめだ店・ ジェイアール名古屋タカシマヤ店・公式オンラインショップアイテム:<2022年1月下旬発売>・プルオーバー 49,500円・カーディガン 58,300円カラー:エクリュ、レッド、ネイビーサイズ:150/170/190<2022年3月下旬発売>・Tシャツ 29,700円カラー:ブラックサイズ:150/170/190/200
2022年01月27日ザ・プロダクト(product)のシャンプー&コンディショナーがリニューアル。「ザ・プロダクトシャンプーモイスト」「ザ・プロダクトコンディショナーモイスト」が、2021年9月24日(金)より発売される。ザ・プロダクト「シャンプー&コンディショナー」がパワーアップザ・プロダクトのシャンプー&コンディショナーが、香り、使用感、成分をパワーアップしてリニューアル登場。新作「ザ・プロダクトシャンプーモイスト」には、USDA オーガニック成分を含む、全成分天然由来のシリコンフリーシャンプーだ。植物由来のアミノ酸系洗浄成分が、キメ細やかな泡で頭皮と髪を洗い上げ、しっとりまとまりのある髪へと導いてくれる。香りは、天然精油を使用したシトラスグリーン。心地よい香りで気分までリフレッシュさせてくれる。また、「ザ・プロダクトコンディショナーモイスト」は、オーガニックホホバオイルとオーガニックシアバターを配合して、毛先までまとまりのあるつややかな髪へと仕上げてくれる。精油は全て天然精油を使用し、心地よいハーバルフローラルの香りを叶えた。セット使いは特におすすめで、ヘアケアしながら気分までリラックスした気持ちに。洗い上りは、健康的なツヤ髪になり、髪表面だけでなく毛先までつるんとまとまりのある仕上がりを叶えてくれる。【詳細】ザ・プロダクトシャンプーモイスト 240mL 2,035円ザ・プロダクトコンディショナーモイスト 240mL 2,035円発売日:2021年9月24日(金)【問い合わせ先】ココバイTEL:03-5476-5270
2021年09月20日当時のソ連の政治体制を皮肉り、熱狂的なファンを生んだカルト映画『不思議惑星キン・ザ・ザ』を監督ゲオルギー・ダネリヤ自らがアニメ化した『クー!キン・ザ・ザ』が公開決定、その予告編が解禁となった。著名なチェリストのチジョフとDJ志望の青年トリクは、雪に覆われたモスクワの大通りで裸足の宇宙人と遭遇する。そして思いがけずキン・ザ・ザ星雲の惑星プリュクにワープしてしまった!そこは見渡す限りの砂漠に覆われ、身に着けるズボンの色によって階級が分かれた場所。ほとんど「クー!」(名詞・形容詞・副詞・感嘆詞など)しか言葉が存在しない異星人たちを相手に、地球に帰ろうと2人は奮闘を始めるが…。1989年、2001年、2016年と三度劇場公開され、「クー!」という意味不明な言葉でカルトSF映画の傑作として世界中で多くのファンを生んだ、実写版『不思議惑星キン・ザ・ザ』をダネリヤ監督自ら、アニメ化した本作。社会主義体制の真っ只中で制作された実写版を、レトロ感溢れながらSFタッチの未来を感じさせるアニメで再構築した。“キン・ザ・ザ”界を象徴する釣鐘型宇宙船の浮遊感は、ダネリヤ監督が実写版では再現できなかったアニメならではの珍妙なリアルさを描き出している。この度解禁された予告編からも、ロシア・アニメの伝統を継承したようなアニメならではのキッチュなキャラクターに置き換え、実写版以上にシュールさが加速する様子がうかがえる。合い言葉「クー!」から始まり、実写版の象徴ともいえる釣鐘形宇宙船も3Dグラフィックスを交えて独特の浮遊感で登場、実写版の音楽も担当したギヤ・カンチェリのサウンドトラックが鳴り響く映像が完成した。実写版は当時のソ連の政治体制を皮肉めいた視点で描いたと評されたが、本作『クー!キン・ザ・ザ』は大きな変革の波にあった現代のロシアを戯画化して風刺。ダネリヤ監督は本作の完成後、2019年に88歳で逝去し、遺作となっている。アニメ版『クー!キン・ザ・ザ』は4月4日(日)にヒューマントラストシネマ有楽町、アップリンク吉祥寺にて追悼先行上映、5月14日(金)よりヒューマントラストシネマ有楽町、アップリンク吉祥寺ほか全国にて順次公開。(text:cinemacafe.net)■関連作品:クー!キン・ザ・ザ 2021年5月14日よりヒューマントラストシネマ有楽町、アップリンク吉祥寺ほか全国にて公開© CTB Film Company、Ugra-Film Company、PKTRM Rhythm
2021年03月31日ザ・ギンザ(THE GINZA)から日本限定で「ザ・ギンザ パルファム」と「ザ・ギンザ オードパルファム」が登場。「ザ・ギンザ パルファム」と「ザ・ギンザ オードパルファム」を2021年1月8日(金)より日本国内の直営店にて先行発売、「ザ・ギンザ オードパルファム」を2月1日(月)より国内空港免税店にて発売する。"菩提樹の花"の香りザ・ギンザから、初のフレグランスがラインナップ。香りは、銀座に咲き誇る菩提樹(リンデン)の花の香りを一つひとつ採取して再現した。国産スダチの天然香料がフレッシュに香り立つトップノートから始まり、フローラルブーケを身に纏うかのようなミドルノートへと移行。ラストは、柔らかく深みのあるムスキーな香りと、三温糖の軽やかな甘みが広がる。"オーロラ"のようなボトルデザイン「ザ・ギンザ パルファム」のボトルデザインは、フレグランスならではの"ゆらぎ"を表現した。裏面の造形にオーロラ蒸着を施すことで、面の角度によって色が変わる奥ゆかしくも華やかな佇まいに。また、精巧で繊細な同デザインは、全9工程に及ぶ過程を経て日本の職人が一から手作業で作り上げた。【詳細】■「ザ・ギンザ パルファム」20ml 40,000円+税発売日:2021年1月8日(金)取扱店舗:ザ・ギンザ コスメティックス 銀座 / 資生堂ビューティ・スクエア/資生堂 ザ ストア / ザ・ギンザ帝国ホテル店 / ザ・ギンザオンラインショップ■「ザ・ギンザ オードパルファム」 50ml 18,000円+税先行発売日:2021年1月8日(金)発売日:2021年2月1日(月)取扱店舗:<先行発売>ザ・ギンザ コスメティックス 銀座 / 資生堂ビューティ・スクエア/ SHISEIDO THE STORE / ザ・ギンザ帝国ホテル店 / ザ・ギンザオンラインショップ<一般発売>国内空港免税店
2021年01月10日ザ・ロウ(THE ROW)が2021年スプリングコレクションを発表。>>その他のザ・ロウの記事はこちらから
2020年10月07日スプーンで食べるシフォンケーキ専門店「ザ・シフォン&スプーン」から、新商品「ザ・シューコーン(THE Chou Cone)」が2017年4月25日(火)発売。「ザ・シューコーン」は、シュークリームをまるでコーンに入ったアイスクリームのように見立てた新感覚のスイーツ。ザクザクとした食感のシューの中から、甘さ控えめのカスタードクリームがとろりと溢れ出す。さっくりと焼き上げた香ばしい風味のシューに、コク深くミルキーなカスタードが濃厚に絡まる。シュガーやドライフルーツをトッピングしたキュートな見た目は、写真に撮ってシェアしたり、お土産としてプレゼントするのにもぴったりだ。フレーバーは5種類。ホイップとショコラカスタードをあわせた「ショコラカスタードクリーム」には、ショコラのコク深い甘みを引き立てるアーモンドスライスをトッピング。甘さ控えめで爽やかな「抹茶カスタードクリーム」には、濃厚な抹茶チョコをトッピングし、奥深い抹茶の風味を楽しめる。「ストロベリーカスタードクリーム」の優しい甘みには、甘酸っぱいドライクランベリーをアクセントに添えた。「メープルカスタードクリーム」には、メープルのほろ苦い甘さと愛用抜群なアーモンドダイスをのせ、ザクザクとした食感に。さらに、ベーシックなシュークリームの味わいが楽しめる「カスタード」も登場する。また、同日から、夏にぴったりのレモンとバナナを生地に練り込み、ホイップクリームをつめた夏限定のシフォンケーキ「ザ・レモン シフォン 」と「ザ・バナナ シフォン」の販売がスタート。さらに、ブルーベリーの果肉を練り込んだブルーベリー風味の生地のシフォンケーキ「ザ・ブルーベリーシフォン」も発売する。【詳細】ザ・シューコーン 378円 ※カスタードのみ 356円発売日:2017年4月25日(火)販売店舗:ザ・シフォン&スプーン 全9店舗価格:ショコラカスタード、抹茶カスタード、カスタード、ストロベリーカスタード、メープルカスタード※全て税込み■ザ・ブルーベリーシフォン発売期間:2017年4月25日(火)〜7月下旬 (順次販売終了予定)価格:Lサイズ 1,296円、Mサイズ 907円、Sサイズ 442円 ※全て税込み■ザ・レモン シフォン / ザ・バナナ シフォン発売期間:2017年4月25日(火)〜8月下旬 (順次販売終了予定)価格:Lサイズ 1,080円、Mサイズ 756円、Sサイズ 378円 ※全て税込み【問い合わせ先】ダスキン フードグループ お客さまセンターTEL:0120-112-020
2017年04月26日ユニバーサル・スタジオ・ジャパンでは、パーク開業以来、5,900万人以上のゲストがライドした「バック・トゥ・ザ・フューチャー・ザ・ライド」を5月31日(火)にアトラクション・クローズするにあたって、「バック・トゥ・ザ・フューチャー・ザ・ライド~さよならキャンペーン」の実施を発表した。実施期間は、4月29日(金)~5月31日(火)。同企画では、チャリティーオークションを開催。パーキンソン病の研究助成活動を行う「マイケル・J・フォックス パーキンソン病リサーチ財団」へ寄付することを目的に、アトラクションの装飾・装置として使用した実物を記念収集品として「ヤフオク!」を通じて出品する。出品するアイテムはアトラクション前にある実物大デロリアン(レプリカ)をはじめ、研究所サインプレート、施設内アクリル映画ポスター3セット、ライドのデジタル時計、次元移動装置(レプリカ)などになるという。ファン垂涎の品が登場する。また、アトラクション・クローズ当日の5月31日(火)には、ファイナル乗車企画も実施。「バック・トゥ・ザ・フューチャー・ザ・ライド~本当に最後のタイムトラベル」と銘打って40組80名を招待して、クローズ直前の記念すべき運営最終回に乗車できる“ファイナル乗車権利”が当たる企画を行う予定。公式ツイッター経由で応募が可能だ。そのほか、8人乗りコンバーチブル型の超高性能新型デロリアンを開発した天才発明家、ドク・ブラウンが期間限定でパークに復活する「さよならドク!ファイナル・グリーティング」を期間中に開催するほか、「バック・トゥ・ザ・フューチャー・ザ・ライド」を優先的に楽しめるエクスプレス券、「デロリアン・フォトオポチュニティ」、「バック・トゥ・ザ・フューチャー・ザ・ライド さよなら記念タンブラー」などをセットにした、「バック・トゥ・ザ・フューチャー・ザ・ライド さよならスペシャル・エクスプレス」の販売も始まる。皆夢中になった時空旅行も、いよいよタイムリミット!ライドに乗って、記念撮影をして、記念グッズを手に入れて、「バック・トゥ・ザ・フューチャー」の世界に浸ってみて。画像提供:ユニバーサル・スタジオ・ジャパン(C)&(R) Universal Studios. All rights reserved.(text:cinemacafe.net)
2016年04月21日ユニバーサル・スタジオ・ジャパン(大阪市此花区)の人気アトラクション「バック・トゥ・ザ・フューチャー・ザ・ライド」が、5月31日をもって運営終了することが31日、明らかになった。「バック・トゥ・ザ・フューチャー・ザ・ライド」は、映画『バック・トゥ・ザ・フューチャー』シリーズをベースとしたライド・アトラクション。ゲストはドク・ブラウンのフューチャー・テクノロジー研究所で開発された8人乗りの新型デロリアンに乗って、悪漢ビフ・タネンを追って時空の旅へ。未来や過去にタイムスリップし、氷河の上を滑り落ちたり、火山の火口に落ちる寸前で恐竜に衝突したり、ダイナミックな体験ができる。同アトラクションは、かつてハリウッドとフロリダのユニバーサル・スタジオにもあったが、現在では世界で唯一ユニバーサル・スタジオ・ジャパンのみに。2001年のパーク開業当時から現在までの総体験者数は約5,900万人にも上る。昨年10月21日16時29日、『バック・トゥ・ザ・フューチャーパート2』(1989)で主人公がデロリアンでタイムトラベルした30年後の未来にあたる時刻には、300人ものファンがアトラクション前に集結。"未来"到来を祝して歓声を上げ、記念撮影するなど盛り上がった。USJでは、運営終了に伴い「バック・トゥ・ザ・フューチャー・ザ・ライド さよならキャンペーン」を実施。詳細は後日、公式サイトで発表される。なお、終了後は施設改修に入るという。
2016年03月31日前回は、シェルとシェルスクリプトがどのようなものかということと、パスの取り扱いについて学びました。今回はその続きとして、実際にPythonをシェルスクリプトのように使い、その実例を紹介します。○シェルの呼び出しシェルスクリプトは前回説明したように、「OSのコマンドの呼び出し」と「シェルスクリプトの文法」で構成されています。Pythonをシェルスクリプトのように使うには「PythonでOSのコマンドを呼び出し」、その結果を必要に応じて「Pythonの文法」で処理することで実現できます。つまり、PythonでどのようにOSのコマンドを呼べるかということさえ知っていれば、特に新しいことを学ばなくてもPythonをシェルスクリプトのように使うことが可能なわけです。PythonがOSのコマンドを利用するには特定の関数を呼び出すだけでよいのですが、その内部には以下の流れがあります。Pythonとしては単にシェルに仕事を依頼し、その結果を習得しているだけですが、呼び出されたシェルはOSにアクセスを行い、コマンドに応じたアクションがkernelで実行されています。シェルスクリプトとしてPythonを使う前に、OSのコマンドの呼び出し方を扱ってしまいます。これには、以下のような2通りの方法があります。os.system(’COMMAND’)commands.getoutput(’COMMAND’)os.system関数は引数で受け取ったコマンドを実行しますが、その返り値は成功か失敗かを返すだけです。一方、commands.getoutput関数はコマンドを実行したときに、本来ターミナルに表示されるべきテキストを返り値として返します。そのほかに、subprocessモジュールを使う方法などもあり、こちらは機能的にも優れているのですが、複雑なので今回は割愛します。コマンドの応答がいらない呼び出しまず最初にos.systemです。具体的に試してみます。import osprint(os.getcwd())print(os.system(’touch test_python.txt’))print(os.system(’ls -l’))見ていただくとわかるように、まず最初に現在の作業ディレクトリの情報を表示し、次にtouchコマンドでtest_python.txtというファイルを作成しています。そして最後に’ls -l’として現在のディレクトリのファイル一覧を出力しています。これを実行すると、たとえば以下のような出力が得られます。/Users/yuichi/Desktop00作業ディレクトリは実行環境により異なりますが、注目して欲しいのはtouchとls -lの表示結果が0となっている点です。先にお伝えしたように、os.system関数は返り値が成功(0) or 失敗(0以外)を返すだけなので、今回は成功が返ってきています。確認してみると表示された作業ディレクトリ /Users/yuichi/Desktopでtest_python.txtというファイルが確認できるはずです。そのためコマンドが実行されていることに間違いはありません。ただ、コマンドが実行された際に表示される文字列を取得できていないので、’ls -l’に関してはまったく使い物にならないといえます。表示結果を取得するコマンド呼び出し次は、実際に画面に表示される文字列を取得してみます。特に難しいことはなく、先ほどのos.system関数の代わりにcommands.getoutput関数を使えばよいだけです。import os, commandsprint(os.getcwd())print(commands.getoutput(’touch test_python2.txt’))print(commands.getoutput(’ls -l’))これを実行すると以下のような出力が返ってきます。/Users/yuichi/Desktoptotal 17648drwxr-xr-x 10 yuichi staff 340 Aug 28 15:10 CLV-rw-r--r--@ 1 yuichi staff 283507 Aug 31 16:21 N7K_vs_Catalyst-an.pngdrwxr-xr-x 3 yuichi staff 102 Jun 15 17:09 SDN…省略…-rw-r--r--@ 1 yuichi staff 1176845 Aug 28 13:06 yuiito-slide.pdfdrwxr-xr-x 13 yuichi staff 442 Dec 9 2014 yukumoこの出力は当然環境によって変わってきますが、2行目がtouchコマンドの出力(出力がないので空行)となり、3行目以降が’ls -l’の出力になっています。コマンドが成功したか失敗したかは確認しづらくなってしまいましたが、出力を利用するプログラムではこちらのほうが使いやすいです。たとえば、特定の宛先に対する「pingの到達率」の取得を行うプログラムを書いてみましょう。まずPythonが呼び出すことになるpingの出力がどのようになるか、コンソールで確認します。[root@localhost ~]# ping 192.168.141.169 -i 0.1 -c 5PING 192.168.141.169 (192.168.141.169) 56(84) bytes of data.64 bytes from 192.168.141.169: icmp_seq=1 ttl=64 time=0.568 ms64 bytes from 192.168.141.169: icmp_seq=2 ttl=64 time=0.899 ms64 bytes from 192.168.141.169: icmp_seq=3 ttl=64 time=0.471 ms64 bytes from 192.168.141.169: icmp_seq=4 ttl=64 time=0.445 ms64 bytes from 192.168.141.169: icmp_seq=5 ttl=64 time=0.443 ms--- 192.168.141.169 ping statistics ---5 packets transmitted, 5 received, 0% packet loss, time 403msrtt min/avg/max/mdev = 0.443/0.565/0.899/0.173 msコマンドのオプション-iはpingのパケットを送る間隔(インターバル)で、-cは送る回数を指定するオプションです。出力をみるとpingの到達率を取得するためには“5 packets transmitted, 5 received, 0% packet loss, time 403ms”の行の“0%”に対応している箇所を取得できればよいことがわかりますね。これは、以前解説した正規表現を使えば実現できます。実際に書いてみましょう。宛先はコマンドライン引数で指定するようにします。import sys, commands, reif(len(sys.argv) != 2):exit()dest_ip = sys.argv[1]ping_command = ’ping ’ + dest_ip + ’ -i 0.1 -c 5’result = commands.getoutput(ping_command)regex = re.compile(’\d+ packets transmitted, \d+ received, (\d+)% packet loss, time \d+ms’)for line in result.split(’\n’):m = regex.match(line)if m:packet_loss = int(m.group(1))packet_receive = 100 - packet_lossprint(str(packet_receive) + ’% packets received’)少し復習も兼ねて解説します。sys.argvはコマンドライン引数へのアクセスです。ここから引数として与えられたpingの宛先IPを取得しています。そしてコマンド文字列を作り、commands.getoutputでコマンドの実行と実行結果の取得をしています。次にpingのpacket loss率を取得するための正規表現を作成しています。何度もマッチさせることになるので、高速化のためにコンパイルした正規表現を利用します。その次に、コマンドの返り値である文字列をsplit(’\n’)とすることで出力を「各行」ごとのリストにし、それをforループで回しています。forループの中では、先ほどの正規表現を使ってロス率を取得し、そこから到達率を算出して表示を行っています。実行すると以下のようになります。[root@localhost ~]# python ping.py 192.168.141.169100% packets receivedコマンドを作成したり正規表現を使ったりして面倒なのですが、もしこれをOSのpingコマンドを使わずに作るとしたら、もっと面倒なはずです。具体的にはPythonでICMP echo packetを作り、相手からのICMP echo replyを受け取るということを何度か繰り返し、最終的に到達率を算出するというプログラムになるでしょう。PythonでOSのコマンドを利用するということは「OSのコマンドで実現できることを実装しなくてよい」ということです。イケているライブラリを使うとコード量を大幅に減らせるのと同じで、シェルの力を借りることでコード量を大幅に減らし、コードを単純化することができます。ぜひ積極的に活用してみてください。○シェルスクリプトの実用例さて、先ほどのpingの例は、実はこれから紹介する実用例への伏線でした。Pythonをシェルスクリプトとして利用する方法はさまざまでしょうが、今回は私の本職であるCiscoのTACエンジニアとして、機器の検証作業を行う際に利用した事例を紹介します。具体的には、Ciscoのデータセンター向けSwitchである「Nexus」が「機器故障時のトラフィック断時間を最小化」するための特殊な技術VPCを使ってトラフィックをロードバランスしている状況でさまざまなフローを流し、すべてのフローが問題なく届くか確認するためのテストです(普段は「IXIA」などのトラフィック測定器などを使ってテストをしています)。以下、テストの構成を記載します。図の下側は検証機器で、左側の「Cisco Nexus 2000 (FEX)」から入った通信が右側のFEXから出ているか、右から左への通信もきちんと通っているか、確認をとります。左右のFEXはそれぞれVMWareの「ESXi」と呼ばれるハイパーバイザーが載った「Cisco UCS Server」に接続されています。ESXi上のLinuxのVirtual Machineはそれぞれ別のvSwitchに接続されるため、Linux間でお互いに通信するために一旦外に出なければいけないように設定されています。つまり、VM1がVM2にpingを打つと、一旦左のNexus 2000にパケットが届けられ、それが右側までネットワークの中を通り、最終的に右側のNexus 2000からVM2にパケットが届けられます。VM2からVM1への通信も同様です。この状況でVM Linux1、2のインタフェースにそれぞれ50個のIPを与え、送信元50×宛先50の2500パターンの通信フローを作り、すべてが問題なくLinux1、2の間で到達するかというテストを実施します。OSのレベルで見ると、以下のような通信テストだといえます。なお、このテストの設定は残っていないので、今回は単に同一vSwitch上に存在するVM間で10×10の100flowを順番に流していき、すべてのパケットが届くかどうかをテストする簡易版としています。検証時は、後で記載するマルチスレッドを使って複数フローを同時に流していました。さて、実際にスクリプトの話に入りましょう。まず最初に、テストを行うにあたりインタフェースに複数のIPを与える必要があります。スクリプトは以下となります。import osINTF_PREFIX = ’eno16777736’NET_IP = ’192.168.141.’HOST_IP_FROM = 10HOST_IP_TO = 19for index, hostip in enumerate(range(HOST_IP_FROM, HOST_IP_TO + 1)):intf = INTF_PREFIX + ’:’ + str(index + 1)ip = NET_IP + str(hostip)ifconfig_command = ’ifconfig ’ + intf + ’ ’ + ip + ’ netmask 255.255.255.0’print(str(os.system(ifconfig_command)) + ’ ’ + ifconfig_command)同一インタフェースに複数のIPを与えるには“ifconfig インタフェース名:X IP_ADDRESS netmask NET_MASK”というコマンドを与えればよいです。そのため、このコマンドをfor文を使って連番で与えるためのプログラムとなっています。なお、for文でenumerateという関数を使っていますが、これは以下のような動きをする関数です。>>> for i,j in enumerate([’a’, ’b’, ’c’, ’d’]):... print(str(i) + ’ ’ + j)...0 a1 b2 c3 d見てもらうとわかりますが、[’a’, ’b’, ’c’, ’d’]というリストのループを回す際にそれが何週目であるかという情報を取得しています。“for i,j”のiに何週目か、jにオリジナルのリストの値が入っています。そして最後にos.systemでコマンドを実行し、その返り値(成功 or 失敗)と、コマンドをprint文で表示しています。これを実行してみます。[root@localhost ~]# python setip.py0 ifconfig eno16777736:1 192.168.141.10 netmask 255.255.255.00 ifconfig eno16777736:2 192.168.141.11 netmask 255.255.255.0...0 ifconfig eno16777736:9 192.168.141.18 netmask 255.255.255.00 ifconfig eno16777736:10 192.168.141.19 netmask 255.255.255.0os.systemコマンドの返り値が0なので、コマンドの実行は成功しています。せっかくなので、きちんとipが設定されているかどうか確認してみます。[root@localhost ~]# ifconfig | grep ’eno16777736\|192.168.141.’eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.141.161 netmask 255.255.255.0 broadcast 192.168.141.255eno16777736:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.141.10 netmask 255.255.255.0 broadcast 192.168.141.255eno16777736:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.141.11 netmask 255.255.255.0 broadcast 192.168.141.255...eno16777736:9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.141.18 netmask 255.255.255.0 broadcast 192.168.141.255eno16777736:10: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.141.19 netmask 255.255.255.0 broadcast 192.168.141.255問題ないですね。これで「eno16777736」というインタフェースに、オリジナルのIPと10個の今回設定したIPがふられていることがわかりました。同様のことをIPが重複しないように反対側のLinux 2でも実施します。IPを設定できたので、次にLinux1からLinux2へpingするプログラムを書きます。Linux1のすべてのIPからLinux2のすべてのIPに対してpingします。import re, commandsINTERVAL = ’0.1’COUNT = ’10’NET_IP = ’192.168.141.’SRC_HOST_IP_FROM = 10SRC_HOST_IP_TO = 19DEST_HOST_IP_FROM = 20DEST_HOST_IP_TO = 29def ping(dest_ip, src_ip):ping_command = ’ping ’ + dest_ip + ’ -I ’ + src_ip + ’ -i ’ + INTERVAL + ’ -c ’ + COUNTresult = commands.getoutput(ping_command)regex = re.compile(’\d+ packets transmitted, \d+ received, (\d+)% packet loss, time \d+ms’)for line in result.split(’\n’):m = regex.match(line)if m:packet_loss = int(m.group(1))packet_receive = 100 - packet_lossprint(str(packet_receive) + ’% ’ + src_ip + ’ -> ’ + dest_ip)for src_host_ip in range(SRC_HOST_IP_FROM, SRC_HOST_IP_TO + 1):src_ip = NET_IP + str(src_host_ip)for dest_host_ip in range(DEST_HOST_IP_FROM, DEST_HOST_IP_TO + 1):dest_ip = NET_IP + str(dest_host_ip)ping(dest_ip, src_ip)途中にあるping関数は先ほどのpingの例とほとんど同じですが、送信元と送信先を示すようにprint文が若干変更されています。そのping関数を送信元IPと宛先IPの2重ループで呼び出すことにより、送信元10パターン、宛先10パターンの計100パターンのping を実施しています。実行すると以下のようになります。[root@localhost ~]# python ping.py100% 192.168.141.10 -> 192.168.141.20100% 192.168.141.10 -> 192.168.141.21100% 192.168.141.10 -> 192.168.141.22100% 192.168.141.10 -> 192.168.141.23100% 192.168.141.10 -> 192.168.141.24100% 192.168.141.10 -> 192.168.141.25100% 192.168.141.10 -> 192.168.141.26100% 192.168.141.10 -> 192.168.141.27100% 192.168.141.10 -> 192.168.141.28100% 192.168.141.10 -> 192.168.141.29100% 192.168.141.11 -> 192.168.141.20100% 192.168.141.11 -> 192.168.141.21…実行してみるとわかりますが、1行の表示につき1秒以上かかっており、すべてが終わるまでになかなか時間がかかりそうです。○OSへのリクエストの高速化最後にコマンド呼び出しをするプログラムの高速化についてお話します。シェルを使ったプログラムは、Pythonだけで実施するよりも比較的に遅いことが多いです。正確にはシェルというよりも、networkやdiskアクセスの遅さなどに起因するため、Pythonだけでも起こりえる問題ですが、実際にはシェルを使う場面で出会うことが多いです。たとえば先ほどのpingのコマンドを実行する際、インターバル0.1秒で10発打つので最低1秒かかります。なかなかの遅さです。速度の遅さのボトルネックがCPUやメモリにないのであれば、OSのコマンドの呼び出しを多重化することでコマンドの合計実行時間を短くすることが可能かもしれません。先のpingの例は1コマンドにつき1秒かかるものの、5コマンドを並列に実行しても実行時間は1秒のままでしょうから、1コマンドあたりは0.2秒に短縮されていると考えることができます。以下にこの並列実行による実行時間短縮の概念の図を記します。上図の上側は今までの例のように、「PythonからShellの呼び出しをしたあと、結果を受け取るまで待つ」という際の動きです。今までのサンプルはすべてこのパターンです。一方、下側は「複数の命令を同時に発行」しています。これは「並列実行」と呼ばれており、「マルチスレッド」といった技術を使うことで実現できます。マルチスレッドを現時点で学ぶのは早すぎるので、本連載の最後あたりで改めて取り扱います。演習1シェルの’ls -l’コマンドを使って「プログラムが実行されたディレクトリ」の配下にあるディレクトリ名のみ抽出してください。たとえば’ls -l’を実行すると以下のような出力になります。この各行の最初にある“drwxrwxrwx”はファイルのパーミッションなどの情報を示していますが、この最初の文字がdだとディレクトリです。[root@localhost ~]# ls -ltotal 3372-rw-------. 1 root root 1475 Dec 22 2014 anaconda-ks.cfgdrwxrwxrwx. 18 500 500 4096 Dec 23 2014 click-2.0.1-rw-r--r--. 1 root root 3423136 Sep 25 2011 click-2.0.1.tar.gz-rw-r--r--. 1 root root 919 Sep 2 12:58 ping.py-rw-r--r--. 1 root root 393 Sep 2 09:38 setip.py-rw-r--r--. 1 root root 477 Sep 1 17:42 test.pydrwxr-xr-x. 2 root root 4096 Sep 2 13:12 testdir1drwxr-xr-x. 2 root root 4096 Sep 2 13:12 testdir2-rw-r--r--. 1 root root 0 Sep 2 13:12 testfile1-rw-r--r--. 1 root root 0 Sep 2 13:12 testfile2dがディレクトリなので、この階層でプログラムを実行した場合の出力は、click-2.0.1testdir1testdir2となります。演習2引数で与えられたドメインに対してpingを行い、RTT(Round Trip Time)の平均値をミリ秒で表示するプログラムを作成してください。たとえば以下のような出力となります。test.py cisco.comaverage RTT is 185.846 ms※解答はこちらをご覧ください。連載内容に一区切りついたので、次回は今までの演習の解説と解答を行います。今後の話題はオブジェクト指向が中心となります。
2015年09月07日読者のみなさんは、「シェルスクリプト」をご存知ですか。簡単にいってしまうと、「“cd”や“ls”といったターミナルで利用するOSのコマンド」とそれを制御する文法に従って書かれたプログラムのことです。今回と次回は、Pythonでそれ相当のことを実行する方法について紹介します。○「シェル」とはシェルは以下の図のようにOS(Kernel)とユーザの間に存在するコマンドベースのインタフェースとなります。たとえば「cd」というコマンドは、ユーザがOSに対して「現在のディレクトリを変更して」と依頼し、OSがシェルを介してユーザの要求を受け取り応答を返すという流れで動きます。シェルスクリプトは、ユーザからシェルへの要求をプログラムに沿って実行するものです。たとえばファイルのバックアップを定期的に実行しようと思った場合、NFSでリモートのストレージをマウントディレクトリA 配下を日付をつけて丸々コピーディレクトリB 配下を日付をつけて丸々コピーディレクトリC 配下を日付をつけて丸々コピーストレージをアンマウントという処理をシェルスクリプトで作成し、それをcronなどで定期的に呼び出すという利用例が考えられます。これぐらいならシェルスクリプトで作成すれば十分なのですが、シェルスクリプトの文法はPythonほど強力ではなく、複雑なことをするのには向いていません。真偽のほどは定かではありませんが、「Perl」と呼ばれている古い有名なスクリプト言語は、Bashより前のシェルスクリプトが貧弱で互換性に乏しいことを理由に開発されたという話を聞いたことがあります。こういった話からもわかるように、スクリプト言語はシェルスクリプトとの親和性が非常に高いため、スクリプト言語をシェルスクリプトのように使うということが可能なのです。Pythonをシェルスクリプトのように使う際は以下のイメージのような形で動いていると考えてもらうとわかりやすいかもしれません。先ほどはユーザがシェルを操作していましたが、それをPythonにやらせているだけです(なお、今まではシェルを経由せずにPythonが直接OSとやりとりをしていました)。シェルを使いこなせないとシェルスクリプトを書けないように、Pythonでシェルプログラミングのようなことをするには、ある程度シェルを知っていることが前提となります。なお、今回はLinux上での利用を前提に記事を書きます。Posix準拠のMacだとほぼ同じことができると思いますが、Windowsは利用するコマンドがまったく違うので気をつけてください。○OSのパス毎度のことですが、今回も脱線からはじまります。シェルスクリプトはOSの機能を利用するため、どうしてもOSのディレクトリ構造を意識する必要があります。そのため、先にOSのパスの基本概念と、Pythonでパスを操作する方法について話してしまいます。基本的なことですが、パスはOS上のファイルやディレクトリの所在地を示すために利用されています。たとえば上記の図でいうと、右上にあるpython.pptxというファイルの所在地は“/Users/yuichi/Documents/python.pptx”と示せます。OSの階層構造は、たとえばルートを地球とすると、その下の階層が国、都道府県(State)、町……と続いていくように、エリアを区切っていくイメージです。ただ、階層の深さは / 直下のファイルから、資源が許す限り深くすることができるという点で住所と異なります。先ほどの例ではOSのディレクトリ構造をトップから辿ることで位置を指し示しましたが、場所Aから場所Bを相対的に指定することでも位置を示すことができます。たとえば上記の図でtest.txtを指し示す際、今自分がVMディレクトリーにいるのであれば、2つ上の階層まで戻り(Documents -> yuichi)、そこにあるtest.txtを指し示せばいいことがわかります。この際、上の階層を表現する必要がありますが、それは特別な記法“../”で示されます。2つ上であれば“../../”と繰り返します。必要であれば、その後ろにディレクトリ名やファイル名を続けていきます。そのため、VMディレクトリー上にいるとし、そこからtest.txtを示すのであれば“../../test.txt”と指定すれば問題ありません。今自分がいるディレクトリ自体を示す特別な記法は“./”です。今自分がいるディレクトリのファイルなどは、特に“./”を使わずにも指定できるので、必ずしも使う必要はないのですが、「今いるディレクトリであるということをあえて明示する場合」や「シェルスクリプトが書かれたファイルを実行」という特別な場合に利用されることが多いです。○Pythonによるパスの操作それでは実際にPythonでパスを操作する方法について扱います。といっても話すことはそれほど多くなく、現在のパスの取得と、パスの変更(今いるディレクトリの変更)、絶対パスの取得方法あたりだけです。当面はこれだけを知っていれば十分かと思います。まず最初に現在のパスの取得です。これは以下のようにして行います。>>> import os>>> os.getcwd()’/Users/yuichi’まずosモジュールをimportし、getcwd()関数を使います。getcwd()関数は現在のパスを文字列として返します。上記の例では’/Users/yuichi’が返されていますが、これはPythonコマンドが実行されたディレクトリが ’/Users/yuichi’ だったためです。試しに、import osprint(os.getcwd())というプログラムをデスクトップ上のtest.py (/Users/yuichi/Desktop/test.py)に記述し、これをさまざまなディレクトリで実行してみます。YUIITO-M-64WZ% pwd/Users/yuichiYUIITO-M-64WZ% python Desktop/test.py/Users/yuichiYUIITO-M-64WZ%YUIITO-M-64WZ% python /Users/yuichi/Desktop/test.py/Users/yuichiこの出力を見てもらうとわかるように、pwdで確認した「今自分がいるディレクトリ」でほかのディレクトリに存在するPythonプログラムが実行されています。相対パスの指定や絶対パスの指定は挙動に関与していません。そのため、自分が作成したモジュールが読み込めない、ファイルが読み込めないといった問題を防ぐためにも起点となるPythonプログラムのファイルが存在するディレクトリでプログラムの実行を行うのが無難かもしれません。実は、私はつい最近もこのトラブルにあいました。私が開発を指揮しているプロジェクトで、開発エンジニアから「Pythonコマンドだと実行できるが、cronで呼び出すと動かない」という問題の報告をもらって調査したところ、まさにこの問題だったのです。よく遭遇する問題なので、心の片隅にでも留めておいてください。話をもとに戻して、次にディレクトリの移動について説明します。ディレクトリの移動は以下のようにして行います。>>> import os>>> os.getcwd()’/Users/yuichi’>>> os.chdir(’Desktop’)>>> os.getcwd()’/Users/yuichi/Desktop’>>> os.chdir(’../../’)>>> os.getcwd()’/Users’OSのcdコマンドと同じですね。相対パスだけでなく絶対パスによる作業ディレクトリの変更も可能です。次に絶対パスの取得です。相対パスはどこの作業ディレクトリにいるかに依存して、実際に指し示すディレクトリが変わってしまうので、時と場合によっては不便です。絶対パスは長くて記述するのが面倒なものの、どこからでも必ず一意にディレクトリやファイルを指定できるので便利です。>>> import os>>> os.path.abspath(’./’)’/Users/yuichi/Desktop’>>> os.path.abspath(’test.py’)’/Users/yuichi/Desktop/test.py’>>> os.path.abspath(’test999.py’)’/Users/yuichi/Desktop/test999.py’現在の作業ディレクトリの絶対パスを得るためには、前にお伝えした特別なキーワード“./”を指定すればよいです。ファイル名やディレクトリ名を記述した場合は「作業ディレクトリの絶対パス + 与えられた文字列」を表示します。存在しないファイル名を指定してもエラーにはなりません。○ファイルやディレクトリの操作作業ディレクトリの変更や取得といったことだけでなく、実際にファイルやディレクトリを操作することも可能です。よく使うのがファイルの存在の有無の確認です。ファイルの読み込みや書き込みの際の存在確認によく利用されます。>>> os.path.exists(’/Users/yuichi/Desktop/test.py’)True>>> os.path.exists(’/Users/yuichi/Desktop/test999.py’)False存在の確認だけでなく、それがディレクトリかファイルかといった判定もできます。OSによってはディレクトリもファイルの一種なのですが、Pythonではディレクトリはファイルではないものとして扱われます。>>> os.path.isdir(’/Users/yuichi/Desktop/test.py’)False>>> os.path.isfile(’/Users/yuichi/Desktop/test.py’)True>>> os.path.isfile(’/Users/yuichi/Desktop’)Falseその次によく利用するのが、ある特定ディレクトリ配下のファイル一覧を取得する操作あたりでしょうか。Unixのlsコマンドに相当します。>>> os.listdir(’/Users/yuichi/Desktop/testdir’)[’dir1’, ’file1’, ’file2’]名前を見てもらうと想像できると思いますが、ディレクトリもファイルも返してきます。ただ、子ディレクトリの中身については返してきません。最後にディレクトリの作成と、ファイルとディレクトリの削除について説明します。ファイルの作成は通常は「書き込み」で実現します。ディレクトリの作成はmkdir関数で行います。>>> os.mkdir(’/Users/yuichi/Desktop/testdir/dir2’)>>> os.listdir(’/Users/yuichi/Desktop/testdir’)[’dir1’, ’dir2’, ’file1’, ’file2’]消去についてはremove関数とrmdir関数を使います。>>> os.remove(’/Users/yuichi/Desktop/testdir/file1’)>>>>>> os.remove(’/Users/yuichi/Desktop/testdir/dir2’)Traceback (most recent call last):File "<stdin>", line 1, in <module>OSError: [Errno 1] Operation not permitted: ’/Users/yuichi/Desktop/testdir/dir2’>>>>>> os.rmdir(’/Users/yuichi/Desktop/testdir/dir2’)>>>>>> os.listdir(’/Users/yuichi/Desktop/testdir’)[’dir1’, ’file2’]表示を見てもらうとわかるように、removeはファイルでrmdirはディレクトリに対する関数です。ディレクトリを再帰的に削除する関数os.removedirsという関数もありますが、これはディレクトリの中にファイルが入っていると失敗します。パスやファイル操作の詳細については以下のドキュメント参照ください。雑多なオペレーティングシステムインタフェース共通のパス名操作演習1あるディレクトリの「直下」に存在するすべてのファイル名(ディレクトリは不要)を書き出すプログラムを作ってください。演習2演習1のプログラムを改造し、あるディレクトリの「配下すべて」を対象としてください。※解答はこちらをご覧ください。パスの説明だけで長くなってしまったので、つづきは後編で紹介することにします。次回はOSのコマンドの実行方法と、シェルスクリプトの実用例について取り扱います。
2015年08月31日サイオステクノロジーは10月31日、LifeKeeperのユーザーサイトにおいて、XMLデータベース「NeoCore」向けのGeneric ARKスクリプトが公開されたことを発表した。LifeKeeperは、アプリケーションレベルまで深く入り込んで稼働状況を監視し、問題発生時には自動で待機系システムに切り替えることができるHAソリューション。ソフトウェアを保護対象に加える際の設定作業を簡略化するため、「Application Recovery Kit(ARK)」と呼ばれるスクリプトが提供されているが、未対応のソフトウェア向けに、ユーザー側でスクリプトを自作できる「Generic ARK」と呼ばれる機能も用意されている。今回、そのGeneric ARKにおいてサイバーテックがNeoCore向けのスクリプトを作成。ユーザーサイトにおいて無償で提供しており、NeoCoreユーザーはLifeKeeperの設定を容易に行えるようになっている。
2013年11月01日ザ・リッツ・カールトン・ホテル・カンパニーL.L.Cは28日、沖縄県名護市喜瀬に「ザ・リッツ・カールトン沖縄」をオープンする。ホテル「ザ・リッツ・カールトン」の世界78番目の開業。日本では大阪、東京に続いて3番目、初のリゾートホテルとなる。県内の金秀リゾートが昨年9月1日をもって営業を終了した「喜瀬別邸ホテル&スパ」を、コンバージョン(転換)プロジェクトとして約12億円かけて改装した。客室全97室のほか、3つのレストランやバー、ラウンジ、スパなどで構成される。また喜瀬カントリークラブ内に位置しており、海を見下ろす18ホール チャンピオンシップ コースに三方を囲まれている。「ザ・リッツ・カールトン スパ by ESPA」では、10室のトリートメントルームと風化珊瑚礁タイル岩盤浴、フィットネスジム、屋内プールを備え、トータルなスパ体験を提供。最高品質の植物エキスやマリンアクティブなどを原料とした英国ESPAブランドの製品が取り入れられているという。記者発表会で同ホテルの総支配人・吉江潤氏は、「日本で一番のラグジュアリーリゾートを目指す」と意気込み、「まだ沖縄に行ったことがない、という人にも訪れていただいて沖縄の観光業全体が盛り上がれば」とコメントした。【拡大画像を含む完全版はこちら】
2012年05月19日