ヨーロッパのBNPLレースを制するのは誰?

おそらくKlarnaだ。

Klarnaは昨年、ヨーロッパだけで800万件のモバイルダウンロードを記録した。一方、ライバルのClearpayは、わずか100万。

噂されている株式上場を前に、スウェーデンフィンテック企業にとっては良いニュースです。

しかし、競合他社との差はどの程度なのか。

BNPLヨーロッパ競合各社比較

ヨーロッパのスタートアップメディアSiftedによるとスウェーデンフィンテック企業であるKlarnaは、昨年ヨーロッパだけで800万件のモバイルダウンロードを記録しましたが、ライバル企業であるClearpayは100万件弱でした。Klarnaは、2020年には米国でもトップに立ち、長年の苦戦を乗り越えて850万ダウンロードを記録した。モバイルアプリのダウンロード数*は、買い物客が商品代金の支払いを無料で延期できるBNPL(Buy Now Pay Later)分野における顧客の導入状況を示す良い指標となる。

BNPLアプリダウンロード数比較
ヨーロッパBNPLのダウンロード数比較

先頭集団は

この1年間、BNPLプロバイダーにとって大きな出来事があったことは周知の事実です。相次ぐロックダウンの中、買い物客はオンラインに集まりました。携帯電話のダウンロードはさておき、昨年は、Klarnaが310億ドルの評価を受け、米国のAffirmが上場た。

また、BNPLを提供する新興企業の勢いも増し、新たな競争が始まっています。Klarnaの小規模な競合企業には、Butter、Zilch、Scalapay、Twisto、ViaBill、フランスのAlmaなどがあり、これらの企業のほとんどが最近新たな資金調達を発表しています。

一方、オーストラリアで上場しているZip、Laybuy、Afterpay(ロンドンのClearpayのオーナー)などは、ヨーロッパ大陸への進出計画を発表しており、英国以外の地域でも競争が激化している。

英国では4%がBNPL

すでに英国では100ポンドのうち4ポンド近くがBNPLを利用しており、米国では30%の消費者がBNPLのアカウントを持っている。

Roam でTODO管理しよう!

Roam でTODO管理ってどうやる?

RoamのTODOコマンドってしってますか?

TODOコマンドは最も強力な機能の一つ。

私が一番使っているのもこのコマンドです。

TODOはRoamの革命的な双方向リンクを最大限に活用し、TODOリストに革命をもたらしました。

RoamでTODOを作成する方法

以下のいずれかの方法で、任意のブロックをTODOアイテムにすることができます。

/と入力してEnterを押す

CMD+Enterを入力

ブロックの中で右クリックして、メニューからTODOを選択する。

左右の一重括弧 [] を入力し、Space を押します。

これであなたのブロックは次のようになります。

{{TODO}}

これだけ!

このブロックをクリックすると、TODOマークダウンがチェックボックスに変わります。

チェックボックスをクリックすると、その項目が完了したことになります(または、CMD-EnterでTODOとDONEを切り替えることができます)。

TODOと双方向性リンクを使え!!

さて、お約束の双方向性マジックです。

チェックされていない(DONEではない)TODOのあるブロックはすべて、RoamのTODOページにリンクされています。TODOに行くと、そこにはあなたのまだやっていないTODOリストの項目がすべてあります。

TODOを他のRoamのリンクと組み合わせることで、さらにその力を高めることができます。

例えば、以下のようになります。{{TODO}}  Aさんemail とすると、このTODOアイテムはTODOページだけでなく、"email "というページや "Aさん"というページにも表示されます。

TODOSを未来(または過去)に送ることもできます。

TODOブロックにRoam形式の日付を入力すると、その日のデイリーノートページにそのTODOアイテムが表示されます。

土曜日に母へのバースデーカードを買うのを忘れないようにしなければなりませんか?

{{TODO}}。Aさんにプレゼントを買うMay 9, 2020

Roamを起動すると常にデイリーノートのページが表示されるので、必要な日にタスクのリマインダーが表示されるのです。

「Buy Now Pay Later」の何がすごい?

フィンテックの中でもニッチな分野である「Buy Now Pay Later」企業が、投資家の注目の的となっている。その理由を探る。

www.nikkei.com

BNPL(Buy Now Pay Later)のコンセプトはシンプルで、eコマースの利用者がクレジットカードに頼らずに商品を購入できる方法を提供することです。BNPL企業は、消費者が商品を分割して支払うことを可能にします。例えば、400ドルのテレビを購入する際、BNPLサービスを利用して、100ドルずつ数カ月かけて支払うことができます。この仕組みは、住宅ローンや長期の支払いに似ていますが、少額の商品で、しかも金利が高くないのが特徴です。

パンデミックやオンラインショッピングへの移行が進んだことで、BNPLの成長が加速しています。ペイパル(PYPL)出身のマックス・レフチンが設立した米国のBNPL企業であるアファーム(AFRM)は、昨年の売上高が2019年の2億6440万ドルから2020年の5億950万ドルへとほぼ倍増しました。同社は1月に株式を公開し、現在では約200億ドルの評価を受けています。今週初めには、欧州でBNPLをリードするKlarna社が、310億ドルの評価額で10億ドルの民間資金を調達し、欧州で最も価値のあるスタートアップとなりました。

"BNPLの分野では小規模な企業であるSplitit(STTTF)のCEOであるブラッド・パターソンは、「BNPLは、これらの支払い形態を受け入れる消費者や企業に意味のある利益を提供することで、ファイナンシャル・インクルージョンを拡大しています」と述べています。最近のニュースリリースによると、Splititの昨年の収益は300%増の840万ドルで、Stripe、Visa(V)、Mastercard(MA)などの知名度の高い企業とのパートナーシップ契約を締結しました。

Splititの2020年は、オーストラリアのAfterpay(AFTPY)、ミネアポリスのSezle、ニューヨークのQuadpayなど、あまり知られていないBNPLプロバイダーの驚異的な成長を反映している。"企業にとっては、BNPLオプションを提供することで、カートへの転換率や平均注文額が向上します」とPatersonは言う。"消費者にとっては、必要なものを購入し、サプライズを管理し、また、後払いで憧れのものを手に入れることができる素晴らしい方法です」。

実際、クレジットと比較したBNPLの利点は数多くあり、説得力があります。

まず、ほとんどのBNPLサービスプロバイダーは、消費者にコストを上乗せするのではなく、パートナーであるマーチャントに手数料を請求することで収益を上げています。消費者は、クレジットカードによる借金や複利の利息にうんざりしています。低金利または無利息の分割払いに焦点を当てたBNPLは、現実的で魅力的な代替手段です。実際、Motley Foolが最近行った調査によると、BNPLを購入した人の約40%が、クレジットカードの利息支払いを避けるためにBNPLを利用したと回答しています。

第二に、BNPLは、商取引の将来性がますます高まっているオンラインショッピングを中心に展開しています。BNPLのサービスプロバイダーは、オンラインショッピングのカートの横やチェックアウトページに小さなウィジェットとして表示され、消費者にワンクリックで簡単に購入できるオプションを提供しています。電子商取引が主流の世界では、BNPLは成功を収めるのに適しています。

第三に、ミレニアル世代やZ世代の若い消費者は、クレジットでの消費に消極的です。最近のエクスペリアン社の調査によると、Z世代のうちクレジットカードを持っているのはわずか30%です。さらに、若い消費者はデジタルネイティブな体験に慣れているため、BNPLの洗練されたウィジェットを水を得た魚のように受け入れてくれる可能性があります。

業界の勢いと人口動態のトレンドを背景に、BNPLの新興企業が最も懸念しているのは、独自にBNPLの取り組みを行っている金融大手かもしれません。2020年、PayPalはBNPLの新商品「Pay in 4」を発表しました。American Expressは、分割払いサービス「Plan It」を展開。また、MastercardとVisaは、決済会社と提携してBNPLサービスを導入した。

フィンテックの熱気の中で、BNPL企業は独自の領域を開拓しています。しかし、既存の企業に対抗するためには、さらなる技術革新が必要です。

Next.jsは自動的にコードを分割してくれる

Next.jsは自動的にコードを分割してくれるので、各ページはそのページに必要なものだけを読み込みます。つまり、ホームページがレンダリングされたときに、他のページのコードが最初に読み込まれることはありません。

これにより、何百ものページがあっても、ホームページの読み込みが速くなります。

リクエストしたページのコードだけを読み込むということは、ページが分離されるということでもあります。特定のページでエラーが発生しても、他のアプリケーションは動作します。

さらに、Next.jsの製品版では、ブラウザのビューポートにLinkコンポーネントが表示されると、Next.jsは自動的にバックグラウンドでリンク先のページのコードをプリフェッチします。リンクをクリックしたときには、リンク先のページのコードはすでにバックグラウンドで読み込まれており、ページの遷移はほぼ瞬時に行われます。

Next.jsは、コード分割、クライアント側のナビゲーション、プリフェッチ(本番環境では)によって、アプリケーションを自動的に最適化し、最高のパフォーマンスを実現します。

ページの下にファイルとしてルートを作成し、組み込みの Link コンポーネントを使用します。ルーティングライブラリは必要ありません。

Link コンポーネントの詳細については、ルーティングのドキュメントにある next/link およびルーティングの API リファレンスを参照してください。

C++開発環境としての(neo)vim :LSPを使おう

イントロ

C++開発環境としてVimを使って、コード補完、リンティング、フォーマット、スニペットなどの機能を追加していく方法を紹介する。

問題点

IDE勢だった自分的にはやはりVimIDEのような機能を提供するプラグインはほしい。YouCompleteMeのようなプラグインを導入するのがよいだろう。しかし設定は複雑だ。そんなときは以下のようにするといい。

解決策 : language server protocol

イデアは、ルールのセットを作成し、サーバーとルールに従うクライアントを実装し、プロトコルを介して通信し、自動保管なような機能性を提供することができるThe language server protocol (LSP)を使うことだ。定義にJump、検索機能の呼び出しなどができるようになる。

langserver.org goもつかえるよ!

セットアップ

サーバーはホストシステムにインストールする必要があり、クライアントはエディタがプラグインまたはビルドインとして提供する必要がある。Vimではプラグインでなければならないが、NeoVimでは実験的にサポートしている。CLionのようないくつかのIDEは、両方をパッケージ外で提供している。

GitHub - neovim/nvim-lspconfig: Collection of (useful, but unsupported) configurations for the Nvim LSP client

server

C++ のために活発に開発されている言語サーバは clangd と ccls の 2 つ。私は clangd の方がインストールが簡単。

apt-add-repository 'deb http://apt.llvm.org/buster/ llvm-toolchain-buster-11 main'

wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -

apt-get update

apt-get install -qq clang-11 clang-tools-11 clang-11-doc libclang-common-11-dev \
   libclang-11-dev libclang1-11 clang-format-11 clangd-11 clang-tidy-11 \
   libc++-11-dev libc++abi-11-dev

とかやればok さて、clangdと一緒に、最新の安定したC++コンパイラ、標準ライブラリの実装(言語に追加された最新の機能を楽しむことができる)、リンタ、コードフォーマッタを手に入れた。サーバは手に入れたが、クライアントはどうする?

というわけで、

client

clangdを利用するには、言語クライアント/LSPが必要です。様々な実装が用意されていますが、とりあえずcoc.nvimを使う。TypeScriptで書かれているのでNode.jsのランタイムが必要だ。

https://github.com/neoclide/coc.nvim/

apt-get install npm

coc.nvimなどのプラグインを簡単に追加するには、プラグインマネージャーをつかうとよい。vim-plugを使えば

call plug#begin('~/.vim/plugged')

Plug 'neoclide/coc.nvim', {'for':['zig','cmake','rust',
     \'java','json', 'haskell', 'ts','sh', 'cs',
     \'yaml', 'c', 'cpp', 'd', 'go',
     \'python', 'dart', 'javascript', 'vim'], 'branch': 'release'}

call plug#end()

プラグインはplug#beginとplug#endの間にPlug 'Github_URI_path'としてリストアップされ、プラグインが特定のファイルタイプで動作するようにするものでforの後に表示されます。私はこのプラグインを.txt, .mdなどの他のファイルタイプで動作させる必要はない。

coc.nvimはサーバの設定をcoc-settings.jsonというJSONファイル( :CocConfigと一緒に)に格納します。このファイルを使ってサーバの動作をカスタマイズすることができる。全てのスキームはここから確認できる。とりあえず、言語サーバを登録して、他はデフォルトのままにしておく。

{
  "languageserver":{
    "clangd":{
      "command":"clangd",
      "filetypes":[
        "c",
        "cpp"
      ],
      "rootPatterns":[
        "compile_commands.json",
        ".git"
      ],
      "args":[
        "--compile-commands-dir=build",
        "--compile_args_from=filesystem",
        "--all-scopes-completion",
        "--background-index",
        "--clang-tidy",
        "--completion-parse=always",
        "--completion-style=detailed",
        "--cross-file-rename",
        "--function-arg-placeholders",
        "--header-insertion-decorators",
        "--query-driver=/usr/bin/**/clang-*,/home/adem/GCC-10/bin/g++*",
        "--header-insertion=never",
        "--cross-file-rename",
        "--limit-results=0",
        "-j=6",
        "--pch-storage=memory",
      ]
    }
  }
}

args配列のパラメータを指定してclangdを呼び出します。clangdのすべてのオプションはclangd --helpで確認可能だ。

languageserverオブジェクトには何台でもサーバーを追加することができ、同じエディター上で異なる言語の編集経験、マッピング、テーマなどを同じにすることができます。

{
  "languageserver":{
    "clangd":{
       // clangd options
     }, 
    "rls" {
      // rls options
    },
    "bash-lsp" {
      // bash-lsp options
    }
  }
}

マッピングVimでは再割り当て可能なショートカットに使われる用語)については、設定例から始めるべきだ。見たい方は、このバカがGithubで設定を公開しています。

これでサーバーとクライアントができましたが、もう一つ必要なものがある。

compile_commands.jsonファイル生成

式の最後にはCMakeを使います。必要なのは、トップレベルのCMakeLists.txtに一行の定義を追加することだけです。

set(CMAKE_EXPORT_COMPILE_COMMANDS ON) ビルドディレクトリに compile_commands.json というファイルを生成します。これには、インクルードパス、コンパイラコマンド、オプションが含まれています。これらは、何がどこにあるのかを把握するのに役立ちます。

CMakeを使わずにmakeを使うプロジェクトの場合は、Bearを使って bear makeコマンドでこのファイルを生成することができます。

リンティング clangdを経由して呼び出すことができるclang-tidyリンターというツールがあります。リンターとは、コードの怪しい部分を叫ぶためのツールです。coc-setting.jsonファイルのclangdに--clang-tidy argを渡したことを確認してください。

いくつかのチェックのファミリーを有効にして、それをファイルにダンプすることができます。

clang-tidy --checks='-,bugprone-' --dump-config > .clang-tidy。 Clangdはこのファイルを検出し、いくつかの基準に基づいてコードをリントします。全てのチェックを見るには次のようにします: clang-tidy --list-checks

ファイルの行を1行1行Bufferからprintする。

ファイルの行を1行1行Bufferからprintする。 bufio.NewReaderを使う。

package main

import (
    "bufio"
    "fmt"
    "io"
    "os"
)

func main() {
    f, _ := os.Open("log.txt")
    defer f.Close()
    bf := bufio.NewReader(f)
    for {
        line, err := bf.ReadString('\n')
        fmt.Printf("%v", line)
        if err == io.EOF {
            break
        }
    }
}