Techvenience

Technology × Convenience - Vue / React / Next / Nuxt / ChatGPTなどのIT技術がもたらす便利さをお伝えします。最近はChatGPTなどのAI技術を使ってブログを書いています。

今話題のChat-GPTって何??

今話題のChat-GPTって何??

https://miro.medium.com/v2/resize:fit:1400/1*IQ2jjKDH7wl8iO70_AVN9A.gif

ChatGPTとは??

今回は今話題のChatGPTをご紹介します!
(当記事もChatGPT使って作成しました。日本語としておかしい箇所があるかもしれませんがご了承ください。)

このブログ記事のタイトルはどこから来たのか...これはChatGPTが作ってくれました!
技術的なスキルは必要ありません。
Introducing ChatGPT からお試しください。
openai.com

今日は、AIコミュニティで話題を呼んでいるGAN*(Generative Adversarial Networks)の魅力的な新しいアプリケーションであるChatGPTを解明してみたいと思います。GANを知らない人のために説明すると、GANはニューラルネットワークの一種で、ジェネレーターとディスクリミネーターという2つの競合するネットワークを使用して、リアルな出力を作成します。ジェネレーターが偽の出力を作り、ディスクリミネーターが偽の出力と現実のデータとの違いを見分けようとする。このやり取りによって、GANは実データと見分けがつかないような出力を生成することができるのです。

www.imagazine.co.jp

ChatGPTは、このコンセプトをテキストベースの会話に応用しています。入力されたテキストに対してGANで応答を生成することで、人間と自然な会話をすることができます。しかし、ChatGPTの応答は、現実に即しているのはほんの一端だけ。説得力はあっても、あくまでGANが作り出した架空の存在なのです。
これは欠点のように聞こえるかもしれませんが、実はChatGPTを非常に便利なものにしています。現実の制約に縛られないからこそ、ChatGPTは完全に想像上の会話をし、既成概念にとらわれないクリエイティブな返答をすることができます。

例えば、ChatGPTに「もし空を飛べたらどうする」と尋ねると、「雄大な鷲のように空を飛び、翼に風を感じ、自由に空を飛ぶ」と答えるかもしれません。このような回答は人間には不可能ですが、ChatGPTでは完全に可能性の範囲内です。
ChatGPTは、私たちの日常的な現実の制約を超えた可能性を追求することができ、それは非常に強力なものとなり得るのです。

では、ChatGPTが現実に触れるのはほんの少しなのに、なぜChatGPTを使うのでしょうか?それは、複雑な問題を解決したり、新しいアイデアを生み出したりするためには、このような創造的で想像力豊かな思考が必要な場合があるからです。ChatGPTは、日常の現実の制約を超えた可能性を追求することができ、それは非常にパワフルなものです。ChatGPTの回答は、必ずしも現実に根ざしているとは限りませんが、創造的なアイデアを生み出したり、想像力豊かな会話をしたりするのに非常に便利です。ぜひ試してみて、新しい可能性を見つけてください。

ChatGPTを使ってコードを書く

ChatGPTは英語だけではありません。他の音声言語を扱えるだけでなく、コードスニペットも書くことができます。
実際に動作するコード・スニペットです。Rのコードでテストドライブしてみると、驚くほどです:
すべての回答が実際に動作するコードを生成するわけではありません。あるラウンドでは、私が何か新しいものをインストールしていないためにコードが壊れてしまうかもしれないと思い、ロードしようとしているパッケージを調べてしまいました。

AIが生成したコードがうまくいくと、それはとても素晴らしいことです。
しかし、いつもうまくいくとは限らないので、ChatGPTの出力を重要な場所に貼り付ける前にテストすることを忘れないでください。

一部の自動生成されたデタラメ

知っておいてほしい大切なことがあります: ChatGPTはデタラメな人間です。デタラメの本質は、真実に対して無関心であることです。嘘つきであるためには、真実を知っていて、誤解させる意図がなければならないからです。ChatGPTは真実に無関心なのです。そして、そのことを実証するために...

ChatGPTはGANではなく、トランスフォーマー

私のプロンプトにご注目ください: Cassie Kozyrkovのスタイルで、ChatGPTの謎を解くウィットに富んだブログ記事を書いてください。なぜ便利なのか、GANとどう関係するのか、なぜその出力が現実に触れるのは接線だけなのかを説明する。
実は、ChatGPTはGANの代わりにトランスフォーマーなのです。G-Adversarial-Nのようなものはありません。GPTはGenerative Pretrained Transformerの頭文字を取ったものです。

しかし、なぜ出力はChatGPTがGANであると主張しているのでしょうか?私のプロンプトは、ChatGPTがGANとどのように*関連しているかという説明以上のものを求めてはいません。関係性についての正しい答えは、ChatGPTは異なるAIアーキテクチャに基づいており、それ自体がGANではない、ということです。人間の研究者ならそう言うでしょう。一方、うそつきは、もう少し巧妙なもので喜ばせようと躍起になるものです。

ChatGPTの出力は、現実に触れるのはほんの一端です。

気をつけろよ!私が促した通り(そしてChatGPTは即座にそれに応えた)、出力は現実に触れるのは接線だけです。そして、デタラメを簡単に作れる時代に突入しているのだから、これからはファクトチェックに力を入れた方がいいのでは?

はっきり言って、私はChatGPTに感動しています。OpenAIの驚異的な功績に脱帽です!多くの有用なアプリケーションの可能性があり、あなたのレーダーに留めておく価値があるので、私は純粋に皆さんに遊んでもらうことをお勧めします。そうです、デタラメな人は役に立つのです。それが、このブログ記事のポイントです。

ChatGPTはすごいものですが、人間の騙されやすさや、ChatGPTに限らず全ての生成AIが社会を巻き込んでいくであろう揺れ動く道については、あまり嬉しくはありません。私たちは、オンラインに進出するためにさまざまな信頼習慣を学ぶ必要があり、私たちがスピードに乗るまでの歯がゆさを考えると、ぞっとします。

ChatGPTを試すにはどうしたらいいのでしょうか?

ここで試してみてください。技術的なスキルは必要ありません。
openai.com

ChatGPTを使った履歴書作成ツール Kickresume

チャットGPTを使った履歴書作成ツール キックレジューム 就職活動に必要なビジネススキルを身につけよう

https://d1civoyjepycei.cloudfront.net/static/img/meta/meta-general.1b0472a58d18.png

Kickresumeは、OpenAIの世界最強のAI言語モデル「GPT-3」を使って、完璧な履歴書の作成をサポートするAI搭載のサービスなのです。求職者がプロフェッショナルな履歴書とカバーレターを作成し、採用される可能性を高めることを支援する新しいサービスなのです。KickresumeのAIテクノロジーは、ユーザーのスキルや経験に合わせた履歴書の作成をサポートします。使いやすい魅力的なテンプレートを提供しており、無料で試すことができます。Kickresumeは、AppleGoogle、Tesla1などの一流企業をはじめ、すでに200万人以上が夢の仕事に就くための支援を行っています。

www.kickresume.com


求職者にとって、履歴書(レジュメ)は潜在的な雇用主に与える第一印象です。そのため、時間と労力をかけて、自分のスキルや経験、強みをアピールできるよう、きちんと整理されたプロフェッショナルな文書に仕上げることが重要です。しかし、日本語で高品質の 履歴書を作成することは、特にフォーマットや使用言語に慣れていない場合、大変な作業となります。
そのプロセスを簡略化するために、ChatGPT言語AIを搭載したオンライン 履歴書作成ツール「Kickresume」が存在します。このブログでは、Kickresumeの特徴を紹介し、就職活動やキャリアアップに効果的なツールの使い方を紹介します。

はじめに

KickresumeはChatGPTの技術を使い、求職者が入力した内容を分析し、求職者に合わせた 履歴書の改善案を提供します。求職者は、さまざまな 履歴書フォーマットテンプレートから、プロフェッショナルな外観とモダンな 履歴書を作成することができます。

キックレジュメを使用することで、求職者は優れた 履歴書を作成し、就職活動の戦略を最適化し、面接の準備をし、最終的に夢の仕事を得る可能性を高めることができます。

Kickresumeを使うことで以下のことが可能になります。

  • 就職活動を成功させるためには、よく練られた 履歴書が必要不可欠です。
  • Kickresumeは強力で使い勝手の良いオンライン履歴書作成ツールです。
  • キックレジュームでは、日本語の書式に沿ったデザイン済みの 履歴書を提供しています。
  • キックレジュメは、求職者の就職活動戦略を最適化するのに役立ちます。
  • キックレジュメは、求職者が自分の経験やスキルをアピールすることができます。
  • 魅力的な自己PRを作成することができます。
  • キックレジュメは、求職者が求人情報を見つける力を養うことができます。
  • 効果的なコミュニケーションと自己PRのコツを伝授します。
  • キャリアアップのためのリソースや機会を提供します。
  • 強力なビジネススキルは、就職活動や仕事上の成長に欠かせないものです。

https://d1civoyjepycei.cloudfront.net/static/img/resume-design-1060px.68803405b804.webp

履歴書作成の基礎知識

キックレジュメの特徴を説明する前に、履歴書とは何か、なぜ履歴書が必要なのかを定義しておきましょう。履歴書とは、あなたの職務経験、学歴、スキル、関連する業績をまとめた1~2ページの文書です。その目的は、あなたの最も優れた資質をアピールし、潜在的な雇用主があなたを面接に招待するように仕向けることです。

履歴書と職務経歴書は別物であり、職務経歴書は学歴や職歴、出版物などを詳細に記した書類であることに注意が必要です。日本では、履歴書の他に 履歴書が必要な場合が多く、顔写真、個人情報、学歴、職歴など、標準的な書式に従います。

Kickresumeでは、日本のフォーマットに沿った様々なデザインの履歴書が用意されており、求職者は簡単に目立つ履歴書を作成することができます。また、書式設定、コンテンツの整理、カスタムセクションの追加などのヒントも提供されています。

就職活動の戦略

Kickresumeで作成した履歴書が完成したら、次のステップは転職活動の戦略を練ることです。まずは自分のスキルや経験を分析し、どのような職種に適しているのかを把握することから始めましょう。

キックレジュメには職歴欄があり、あなたの経験やスキルを詳しく紹介することができますので、あなたの資質が企業のニーズに合っているかどうかを簡単に確認することができます。また、自己PR欄では、あなたの強みや実績をアピールする魅力的な自己PRを作成することができます。

自分のスキルや興味に合った求人を見つけるためには、積極的に求人を探す力を養うことが重要です。キックレジュームでは、日本の様々な求人サイトに掲載されている求人情報を閲覧したり、自分の好みに合ったアラートを設定したりすることができるオンライン求人情報セクションを提供しています。

面接の準備

面接に招かれたとき、準備のためのツールとして、 履歴書と 職務経歴書職務経歴書)を使用することが不可欠である。履歴書をよく読み、職歴の詳細を覚え、面接官から聞かれる可能性のある質問に備えましょう。

キックレジュメでは、コミュニケーションや自己紹介の練習ができる「"面接対策"(面接対策)」を用意しています。服装や面接での質問、仕事への意欲や熱意を伝えるためのヒントが得られます。

キャリア開発

夢の仕事に就いた後でも、個人として、またプロフェッショナルとして、常に成長し続ける余地があるものです。キックレジュメは、キャリアアップの目標を設定し、昇進の機会を見つけるお手伝いをします。

このツールでは、「ビジネス開発」のセクションで、キャリアアップのための新しいスキルを身につけるためのリソースやヒントを見つけることができます。また、オンラインコースを検索して、コーディング、プロジェクト管理、マーケティングなどの新しいスキルを学び、スキルを向上させることもできます。

料金

フリープランもあるので、試しに使ってみるのもいいかもしれません。
1ヶ月ごとの料金ですと19ドル/月ですが、年間契約にすると5ドル/月(60ドル/年)で使うことが可能です。

料金

まとめ

要約すると、Kickresumeは、目立つ履歴書を作成したい、就職活動戦略を最適化したい、面接に備えたい、キャリアアップを図りたいという求職者にとって、優れたツールです。Kickresumeを使うことで、理想の仕事に就くチャンスを増やし、成功の可能性を最大限に高めることができます。

強力なビジネススキルは、就職活動の成功やプロフェッショナルな成長のために不可欠であることを忘れないでください。ChatGPT Technologyを採用したKickresumeをオンライン履歴書作成ツールとして使用することで、あなたのキャリアを次のレベルへと引き上げるために必要なビジネススキルを身につけることができます。

MagicBlogを使ってAIで​​​​高品質なブログを書いてみよう

MagicBlogを使ってAIで​​​​高品質なブログを書いてみよう

https://app.magicblog.ai/images/favicon.png

MagicBlogはChatGPTを使用して、​​​​高品質で長いフォームのブログコンテンツを作成することができるサービスです。​​​​MagicBlogは、​​​​100%オリジナルでSEO最適化されたコンテンツを提供し、​​​​1クリックで作成することができます。​​​​MagicBlogは、​​​​最初の1500ワードを無料で提供しています。​​​​また、​​​​MagicBlogは、​​​​マジックソフトウェア・​ジャパンが提供するローコード開発プラットフォームとChatGPTと連携して、​​​​AIチャットサービスを呼び出して、​​​​AIが生成したコンテンツをアプリケーションに統合することができます。

magicblog.ai

製品動画

MagicBlogの機能や特徴

機能は以下のようなものがあります。

  • ブログタイトルの入力
  • フォーカスキーワードに基づいたタイトルの自動生成
  • ​​​​​専門家による編集、​​​​​SEO最適化
  • ​​​​画像の自動生成
  • ​​​​​記事の自動生成
  • ​​​​​記事のパラフレーズ
  • ​​​​​記事のリライト
  • ​​​​​記事の再構成
  • ​​​​​記事の翻訳
  • ​​​​​記事の編集
  • ​​​​​記事のプレビュー
  • ​​​​​記事のエクスポート
  • ​​​​​記事のインポート

MagicBlogは、ワンクリックで高品質でSEOに最適化されたブログコンテンツを生成するAI搭載のツールです。ユーザーは、ブログのタイトルを入力するか、MagicBlogにキーワードを入力して生成させることができ、関連キーワードと見出しを入力して、生成される記事の全体構造を構築する。MagicBlogは、「超秘伝の特別なソース」を使って、導入部、結論、重要なポイントを含む完全なブログ記事を生成します。ユーザーは、このコンテンツをプラットフォーム内で編集したり、好みのライティングツールにコピー&ペーストすることができます。MagicBlogは、ユーザーが品質を犠牲にすることなく、より早く、より安く、コンテンツマーケティングの取り組みを拡大できるようにすることを目的としています。

料金

MagicBlogは、​​​​​2000ワードを無料で提供しています(ChatGPT-3.5のみ)。
ChatGPT-4.0については月20ドルで100,000ワードの利用が可能です。
また単発のバンドルクレジットの購入だけも可能で、現在の価格は10,000クレジットあたり15ドルです。

料金

AIがSEOを意識してブログを書いてくれる?AISEOがすごい!

AIライティングアシスタント AISEO

https://aiseo.ai/images/aiseo-symble.png

AISEOとは

AISEOは、​クリエイターの時間を節約し、​より多くの機会を見つけることを目的とした、​AIを搭載したライティングアシスタントおよびコンテンツジェネレーターです。​AISEOは、​SEOデータを組み合わせて、​SEO最適化されたコンテンツを生成するAIライティングアシスタントです。​AISEOは、​ブログ記事、​商品説明、​広告、​メール、​SNS投稿など、​さまざまなタイプのコンテンツを生成することができます。​AISEOは、​クリエイティブ職、​エンジニア、​マーケティング、​プロダクトマネジメント、​営業&顧客管理など、​さまざまな職種の人々に役立ちます。
aiseo.ai

機能

  • ​Paraphrasing Online AI: パラフレーズを自動生成するAI機能です。​
  • ​Image generator: テキストから画像を自動生成する機能です。​
  • ​Text to image ai: テキストを画像に変換するAI機能です。​
  • ​Email generator: メールの自動生成機能です。​
  • ​Sentence rewriter: 文章を書き換えるAI機能です。​
  • ​Paragraph rewriter: 段落を書き換えるAI機能です。​
  • ​Article rewriter: 記事を書き換えるAI機能です。​
  • ​Rewording tool: 言い換えツールです。​

料金

​AISEOには、​3つのプランがあります。

Pricing | AISEO


無料プランはありませんが、すべての機能を試すことができる60クレジットの無料トライアルを提供しています。
通常価格ですと24〜74ドル/月での利用が可能ですが、ユーザーはクレジットを購入するか、年間プランを選択することで20%の割引を受けることができます。
また有料版で満足できなかった場合、​契約から5日以内にであれば100%返金保証があります。

ロードマップ

AISEOは開発途中のツールのため、随時機能が追加されていく予定です。
リリース済み機能としては、Chrome拡張機能、アカウントダッシュボードの新しいUI、コンテンツライブを最適化するためのSEOダッシュボードがあります。直近ではスケールアップした言い換えのためのAPI、チェーンプロンプトのワークフロー、より多くの公開テンプレートなどのリリースが予定されています。

chrome.google.com

DoclimeでPDF編集に革命を起こす

DoclimeでPDF編集に革命を起こす

https://doclime.com/images/doclime/banner.png

PDF文書を手作業で編集するのに膨大な時間を費やすことにうんざりしていませんか?AIを搭載したPDFツールであるDoclimeは、あなたのPDF編集を次のレベルに引き上げてくれるでしょう。Doclimeを使えば、自然言語処理を使って素早く簡単に文書を編集することができます。退屈な手作業による編集に別れを告げ、効率的で正確なAIアシストによる編集を実現しましょう。

概要

  • Doclimeは、NLPを利用して適切な修正を提案するAI搭載のPDF編集ツールです
  • スキャンしたPDFからテキストを抽出するOCRも採用されています
  • Doclimeは、PDF編集の効率と精度を向上させます。
  • 技術者でない人でも簡単に使えます
  • ツールの提案は、文脈に応じた適切なものである
  • 手作業による文書編集に比べ、時間を節約できる
  • 言語パターンを認識し、文書の文脈に沿った編集を提案します
  • ユーザーフレンドリーなインターフェイスを備えている
  • Doclimeは、画像からテキストを抽出することで、スキャンしたPDFを簡単に編集することができます
  • Doclimeは、読みやすさと正確さを向上させることで、ドキュメントをよりプロフェッショナルに見せます。

Doclimeの仕組み

高度なAIアルゴリズムを用いて、Doclimeはドキュメントの文脈を理解し、適切な修正を提案することができます。さらに、文法上の誤りを認識して修正し、文書の流れを改善するための提案も提供します。

自然言語処理

Doclimeは自然言語処理NLP)を使って人間の言葉を理解し、インテリジェントな提案をします。この処理により、ツールは言語パターンを認識し、文書の文脈に沿った編集を提案します。

光学式文字認識

Doclimeはまた、光学式文字認識(OCR)を採用し、PDFスキャンや画像ベースのファイルから自動的にテキストを識別して抽出します。この機能により、スキャンしたPDFを編集し、抽出したテキストを別の文書として保存することができます。

Doclimeの利点

Doclimeは、PDFを頻繁に扱う人にとって必携のツールとなるような、さまざまなメリットを提供します。

時間の節約

PDF文書を手動で編集する代わりにDoclimeを使うことで、何時間節約できるか想像してみてください。ワークフローがより効率的になり、他の重要なタスクに集中できる時間が増えます。

精度の向上

DoclimeのAIアシスト編集を使えば、あなたの文書がエラーフリーで読みやすくなることを確信できます。これにより、あなたの仕事はよりプロフェッショナルで洗練されたものになります。

ユーザーフレンドリーなインターフェイス

Doclimeのユーザーフレンドリーなインターフェースは、技術的な知識がない人でも簡単に使えるようになっています。シンプルで直感的なUIは、誰でもすぐに操作してツールの機能を利用できることを保証します。

まとめ

ペースの速い現代社会では、「時は金なり」です。効率と生産性を向上させることのできるツールが必要です。DoclimeはPDF編集の世界を変えるもので、時間を節約し、ドキュメントの正確さを向上させます。
手作業によるPDF編集でこれ以上時間を無駄にするのはやめましょう。今すぐDoclimeを試して、あなたの作業プロセスに革命を起こしましょう!

DoclimeでPDF編集に革命を起こす

DoclimeでPDF編集に革命を起こす

PDF文書を手作業で編集するのに膨大な時間を費やすことにうんざりしていませんか?AIを搭載したPDFツールであるDoclimeは、あなたのPDF編集を次のレベルに引き上げてくれるでしょう。Doclimeを使えば、自然言語処理を使って素早く簡単に文書を編集することができます。退屈な手作業による編集に別れを告げ、効率的で正確なAIアシストによる編集を実現しましょう。

概要

  • Doclimeは、NLPを利用して適切な修正を提案するAI搭載のPDF編集ツールです
  • スキャンしたPDFからテキストを抽出するOCRも採用されています
  • Doclimeは、PDF編集の効率と精度を向上させます。
  • 技術者でない人でも簡単に使えます
  • ツールの提案は、文脈に応じた適切なものである
  • 手作業による文書編集に比べ、時間を節約できる
  • 言語パターンを認識し、文書の文脈に沿った編集を提案します
  • ユーザーフレンドリーなインターフェイスを備えている
  • Doclimeは、画像からテキストを抽出することで、スキャンしたPDFを簡単に編集することができます
  • Doclimeは、読みやすさと正確さを向上させることで、ドキュメントをよりプロフェッショナルに見せます。

Doclimeの仕組み

高度なAIアルゴリズムを用いて、Doclimeはドキュメントの文脈を理解し、適切な修正を提案することができます。さらに、文法上の誤りを認識して修正し、文書の流れを改善するための提案も提供します。

自然言語処理

Doclimeは自然言語処理NLP)を使って人間の言葉を理解し、インテリジェントな提案をします。この処理により、ツールは言語パターンを認識し、文書の文脈に沿った編集を提案します。

光学式文字認識

Doclimeはまた、光学式文字認識(OCR)を採用し、PDFスキャンや画像ベースのファイルから自動的にテキストを識別して抽出します。この機能により、スキャンしたPDFを編集し、抽出したテキストを別の文書として保存することができます。

Doclimeの利点

Doclimeは、PDFを頻繁に扱う人にとって必携のツールとなるような、さまざまなメリットを提供します。

時間の節約

PDF文書を手動で編集する代わりにDoclimeを使うことで、何時間節約できるか想像してみてください。ワークフローがより効率的になり、他の重要なタスクに集中できる時間が増えます。

精度の向上

DoclimeのAIアシスト編集を使えば、あなたの文書がエラーフリーで読みやすくなることを確信できます。これにより、あなたの仕事はよりプロフェッショナルで洗練されたものになります。

ユーザーフレンドリーなインターフェイス

Doclimeのユーザーフレンドリーなインターフェースは、技術的な知識がない人でも簡単に使えるようになっています。シンプルで直感的なUIは、誰でもすぐに操作してツールの機能を利用できることを保証します。

まとめ

ペースの速い現代社会では、「時は金なり」です。効率と生産性を向上させることのできるツールが必要です。DoclimeはPDF編集の世界を変えるもので、時間を節約し、ドキュメントの正確さを向上させます。
手作業によるPDF編集でこれ以上時間を無駄にするのはやめましょう。今すぐDoclimeを試して、あなたの作業プロセスに革命を起こしましょう!

Unknown version 4 of samsung というエラーの解消

Unknown version 4 of samsung のエラー解消

vuecliで作成したアプリで、いろいろと入れてからローカル環境起動した時に起こったエラーです。

以下で解決しました。

$ npx browserslist --update-db
||< 

それでもダメならこれも可能性はあります。

>||
$ npm i
>||


これで解決しないなら無理やりやると以下の修正を加える。
ファイルの置き場所はエラー内容から確認して欲しいですが、自分は
>>
node_modules/browserslist/index.js 
<<
ここの1102行目でしたが、

>||
throw new BrowserslistError(
            'Unknown version ' + version + ' of ' + name)

となっているところを、空の配列を返すようにします。

return []

役に立ったら嬉しいです!

vuecliでvue-chart.jsを入れたらエラーになったので解消する

export 'default' (imported as 'Chart') was not found in 'chart.js' を解消する

f:id:duo-taro100:20160218004611p:plain

バージョンによるエラーだった

結論からいうとバージョンの問題でした。

f:id:duo-taro100:20170913114415p:plain

普通にvue-chart.jsを導入すると(npmを使う場合)

$ npm install vue-chartjs chart.js --save

とすると思います。
chart.jsバージョンが3.xxだと(どこからか分からないけど)、TypeScriptを使った実装になっていて、vue-chartでの読み込みに失敗していました。

エラー内容

エラー内容としてはこんな感じ

[Vue warn]: Error in mounted hook: “TypeError: chart_js__WEBPACK_IMPORTED_MODULE_0 ......

とか

export 'default' (imported as 'Chart') was not found in 'chart.js'

とかです。

解決策は

一度uninstallして、バージョン指定して再度installしなおして解決できました。
chart.jsは2.8を、vue-chart.jsは3.4.2にして問題なく動きました。

まずuninstall

$ npm uninstall vue-chartjs
$ npm uninstall chart.js

再install

$ npm install chart.js@2.8
$ npm install vue-chartjs@3.4.2

※2021年6月3日 コメントでご指摘いただいた点を修正済

結構ハマった。。

【一日一驚】飛行機の折り紙で遊ぶ

【一日一驚】飛行機の折り紙で遊ぶ

今朝はあまり時間がなかったので私自身が作成しました。

今日の一驚

私が作った飛行機で遊んでもらいました!
折り紙では遊んだことはあるものの、飛行機は今まで作ったことがなかったことにちょっと驚きです。
小さい頃はよく作っていたのでとても懐かしかったです。

昔みたいによく飛ぶ飛行機が作れず、ヒラヒラと落ちていくような挙動の飛行機になりました。

これは飛行機と呼べるのかw

それでもとても喜んでくれて自分で飛ばしてみたり、私に飛ばすように言って飛んでいる飛行機を追いかけたりしていました。
自分で飛ばしたときは上手くいくと「できたー♪」と喜び、上手くいかなくても「惜しい!」といいながら満面の笑み。
こちらもかなり癒されました。

飛行機の折り紙で遊ぶ
紙飛行機作成

今度は作る方も教えたいですがまだまだ早いかも。

結果

紙飛行機はかなり楽しんでいました。これはハマるかもしれません。
今度の休日にもうちょっとちゃんとした飛行機を作ってあげたいと思います。
星5つです!⭐️⭐️⭐️⭐️⭐️

その他

やはり平日の朝しかチャンスがない場合はちゃんと準備しておかないとダメだなと思いました。
休日に準備して平日に使う感じでしょうか。
もっと凝ったものは来週からできればなと思います。
(凝ってなくても子供は喜んでくれるので必要ないかもしれないですけどね)

php再install時のエラーdyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylibを解消

php再install時のエラー dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib を解消

f:id:duo-taro100:20160218004611p:plain

$ brew reinstall php@7.1

これを実行すると以下のメッセージが表示されました。またphpのバージョン確認(php -v)でも同様のエラーが出ます。

dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib
Referenced from: /usr/local/Cellar/php@7.1/7.1.33/bin/php
Reason: image not found

原因は参照しているicu4cのバージョンが違う(ない)ということです。

icu4c/lib/libicui18n.64.dylib

icu4cのver64系を参照しているけど、そんなのないよというエラーです。
icu4cがバージョンアップされたので色々な方が困っていたようです。
なので、icu4cのダウングレードが主な解決方法になります。他にicu4cのバージョンに合わせてphpを入れなおすなどもありますがここでは触れません。

まずは現在のバージョンを確認しましょう。

$ brew info icu4c

私の環境では67.1となっていました。

icu4c: stable 67.1 (bottled) [keg-only]

今回はエラーで「libicui18n.64.dylib」と記載されているので64系に変更したいということです。
「libicui18n.xx.dylib」の「xx」の部分に注目してくださいね。
xxと現在のバージョンが異なる場合はこの記事を読み進めていただけます。
同じ場合はまた別の問題の可能性が高いです。(pathが通っていないとか?)

// まずFormulaディレクトリに移動
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula

// icu4cのコミットを確認
$ git log --oneline icu4c.rb


e2c833d326 formulae: use new bottle syntax
// 省略
e7d9d76421 icu4c 67.1
22fb699a41 icu4c: update 66.1 bottle.
c78114de12 icu4c 66.1
a806a621ed icu4c: update homepage and url (#44812)
896d1018c7 icu4c: update 64.2 bottle.
c81a048b0e icu4c: update 64.2 bottle.
44895fce11 icu4c 64.2
e7f0f10dc6 icu4c: remove old code.
bc0c979524 icu4c: update 63.1 bottle.
8ce87beeae icu4c 63.1
575eb4bbef icu4c: secure/fix/follow url(s)
// 省略
9220ee6d43 icu4c: add 10.9 bottle

// 今回は「64.2」に戻したいので、「update 64.2 bottle.」の記載のあるバージョンを使います。
// ここでは以下の二つがありますが、新しい方を使います。どっちでもいいと思いますが
896d1018c7 icu4c: update 64.2 bottle. <- こっちを使う
c81a048b0e icu4c: update 64.2 bottle.

// 使用するバージョン(896d1018c7)をチェックアウト
$ git checkout 896d1018c7 icu4c.rb

// 再インストール実施
$ brew reinstall icu4c

// バージョン確認
$ brew info icu4c

バージョンを確認して自分の求めているバージョンになっていればOKです。

icu4c: stable 64.2 (bottled) [keg-only]

$ php -v
PHP 7.1.33 (cli) (built: Dec 19 2019 11:01:14) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
MacBook-Pro-2:Formula tyamauchi$ brew reinstall icu4c

結構ハマりました。

【エラー】Too many elements for Tuple: xx, allowed: 22【scala】

【エラー】Too many elements for Tuple: xx, allowed: 22【scala】

f:id:duo-taro100:20160218004611p:plain

Scalaでは関数やTupleに渡せる要素が最大で22となっているため、22以上の要素を渡した場合にこのようなエラーが出ます。
Scala 3では「渡せる要素が最大で22」の制限は撤廃されているようです。(未確認)

scalapedia.com

問題となった実装

object TestDao {
  class TargetTable(tag: Tag) extends Table[TestData](tag, "test") {
    def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
    def a = column[Long]("a")
    def b = column[String]("b")
    def c = column[String]("c")
    def d = column[Boolean]("d")
    def e = column[Boolean]("e")
    def f = column[Long]("f")
    def g = column[Long]("g")
    def h = column[Long]("h")
    def i = column[Option[Long]]("i")
    def j = column[Option[Long]]("j")
    def k = column[Option[Long]]("k")
    def l = column[Option[Long]]("l")
    def m = column[Option[Long]]("m")
    def n = column[Option[Long]]("n")
    def o = column[Option[Long]]("o")
    def p = column[Option[String]]("p")
    def q = column[Option[String]]("q")
    def updateUser = column[String]("update_user")
    def updateDate = column[Timestamp]("update_date")
    def inputUser = column[String]("input_user")
    def inputDate = column[Timestamp]("input_date")
    def activeFlag = column[String]("active_flag")

    def * = (
    	id, a, b, c, d, e,f, g, h, 
    	i, j, k, l, m, n, o, p, q,
    	updateUser, updateDate, inputUser, inputDate, activeFlag) <> (TestData.tupled, TestData.unapply)
  }

ここではidとa〜q、そしてupdateUser, updateDate, inputUser, inputDate, activeFlagの計23の要素を渡して、TestData.tupledとしています。
なので前述のエラーが発生します。

解決策

この問題の解決策としてよく提示されているものとしてHListsを使うというものがありました。
underscore.io

以下のような感じにするみたいです。

object TestDao {
  class TargetTable(tag: Tag) extends Table[TestData](tag, "test") {
    def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
    def a = column[Long]("a")
    def b = column[String]("b")
    def c = column[String]("c")
    def d = column[Boolean]("d")
    def e = column[Boolean]("e")
    def f = column[Long]("f")
    def g = column[Long]("g")
    def h = column[Long]("h")
    def i = column[Option[Long]]("i")
    def j = column[Option[Long]]("j")
    def k = column[Option[Long]]("k")
    def l = column[Option[Long]]("l")
    def m = column[Option[Long]]("m")
    def n = column[Option[Long]]("n")
    def o = column[Option[Long]]("o")
    def p = column[Option[String]]("p")
    def q = column[Option[String]]("q")
    def updateUser = column[String]("update_user")
    def updateDate = column[Timestamp]("update_date")
    def inputUser = column[String]("input_user")
    def inputDate = column[Timestamp]("input_date")
    def activeFlag = column[String]("active_flag")

    def * = id :: a :: b :: c :: d :: 省略 :: activeFlag
  }

ですが、この方法では自分はうまく動かなかったので別の方法を探ってみました。
結論としては「shaped」を使う以下の方法で実装しました。
本来CommonDataは別ファイルで定義していますが、ここでは1ファイルで完結できるようにcase classで定義しています。
TestDataは面倒なので省略しました。

case class CommonData
(
  var updateUser: String,
  var updateDate: Timestamp,
  var inputUser: String,
  var inputDate: Timestamp,
  var activeFlag: String
)


object TestDao {
  class TargetTable(tag: Tag) extends Table[TestData](tag, "test") {
    def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
    def a = column[Long]("a")
    def b = column[String]("b")
    def c = column[String]("c")
    def d = column[Boolean]("d")
    def e = column[Boolean]("e")
    def f = column[Long]("f")
    def g = column[Long]("g")
    def h = column[Long]("h")
    def i = column[Option[Long]]("i")
    def j = column[Option[Long]]("j")
    def k = column[Option[Long]]("k")
    def l = column[Option[Long]]("l")
    def m = column[Option[Long]]("m")
    def n = column[Option[Long]]("n")
    def o = column[Option[Long]]("o")
    def p = column[Option[String]]("p")
    def q = column[Option[String]]("q")
    def updateUser = column[String]("update_user")
    def updateDate = column[Timestamp]("update_date")
    def inputUser = column[String]("input_user")
    def inputDate = column[Timestamp]("input_date")
    def activeFlag = column[String]("active_flag")

    private val shapedValue = (
      id, a, b, c, d, e,
      f, g, h,
      i, j, k, l, m, n, o,p, q,
      (updateUser, updateDate, inputUser, inputDate, activeFlag)
    ).shaped

    def * = shapedValue <> ( 
    	{
	      case (
	        id, a, b, c, d, e,
	        f, g, h,
	        i, j, k, l, m, n, o,p, q,
	        commonData
	        ) =>
	        TestData(
	          id, a, b, c, d, e,
	          f, g, h,
	          i, j, k, l, m, n, o,p, q,
	          CommonData.tupled.apply(commonData)
	        )
	    }, { u: TestData =>
	      Some(
	        (
	          u.id,
	          u.a,
	          u.b,
	          u.c,
	          u.d,
	          u.e,
	          u.f,
	          u.g,
	          u.h,
	          u.i,
	          u.j,
	          u.k,
	          u.l,
	          u.m,
	          u.n,
	          u.o,
	          u.p,
	          u.q,
	          CommonData.unapply(u.commonData).get
	        )
	      )
	    }
    )
  }

なんとかできました。