タグ

ブックマーク / qiita.com/dankogai (14)

  • Swift - プロトコルが型になるとき - Qiita

    @koher さんの記事、なぜSwiftのプロトコルはジェネリクスをサポートしないのかにおける議論は改めて記事にするだけの価値があるのでそうすることにします。 君の型は? まずは以下のコードをご覧ください。 import Foundation protocol Animal { var binomen:String { get } init() } struct Cat: Animal { let binomen = "Felis silvestris catus" let theYoung = "kitten" } struct Dog: Animal { let binomen = "Canis lupus familiaris" let theYoung = "puppy" } var pet:Animal = (arc4random() & 1 == 1) ? Cat() : Do

    Swift - プロトコルが型になるとき - Qiita
  • SION update - now available in Rust - Qiita

    というわけでSIONですが、ぶち上げて1週間も経たないうちに言語実装が4つになりました🎉。 前回から増えたのはRust。pandaman64さんありがとうございます🙇‍♂️。 https://github.com/pandaman64/sion-rs ソースコード、綺麗ですねえ。目的ごとにファイル分割しているので読みやすいし。swift-sionもそうしたかったところなのですが、Swift Playgroundsのことを考慮すると単一ファイルに納めておきたいんですよね… そのswift-sionにもついにMessagePackとの相互変換機能が搭載されました。おかげで行数が1000行を超えましたが、1024行は超えてないので許してください。 Swift Package Managerがあるのだし、機能追加するためのモジュールを別途書くことも考えたのですが、MessagePackとの相互

    SION update - now available in Rust - Qiita
  • APFSで再燃したNFD問題 - Qiita

    iOS 10.3 でAPFSが番投入されました。それでiPhoneiPadが文鎮化するなどの深刻な問題はみられなかったものの、やはり無問題とはいかなかったようで。 iOS10.3で不具合の出るアプリは、APFS関連の影響かも(Unicode Normalizationの振る舞いが変わったらしい)。GoodReaderとDropboxの同期でエラーが出るようになったのだが、ファイル名に濁点を含むファイルを除いたら同期できるように。 — 山路達也 (@Tats_y) March 29, 2017 原因を調べてみました。 #!/usr/bin/env perl use strict; use warnings; use feature ':all'; use Encode; use Unicode::Normalize; use utf8; binmode STDOUT, ':utf8';

    APFSで再燃したNFD問題 - Qiita
  • zfs - MacBook Air (13-inch, Late 2010) をオクタブート化 - Qiita

    勇者がいないなら、自分が勇者になればいいのに。 前回記事 勇者はぜひ上記に macOS と illumos も加えたクアッドブートディスクをこさえてみてください。 というわけでやりました。 illumos は後述の理由でないけどクワッドどころかオクタブートです。それもベアメタルで。 MacBook Air (13-inch, Late 2010)。6年以上前のノートブックの未来、かつて私のメインノートで、その後長女のメインノート。だから裏蓋はこんな。 その長女のメインノートも、私と同じ MacBook Pro (Retina, 13-inch, Mid 2014) に変わって以来、しばらくお蔵入りしていたのを引っ張り出して来ました。 USB3はおろか、Thunderboltもない、CPUパワーは今日日のiPhoneに負けてしまうロートルですが、 Sierra も Windows 10 も動

    zfs - MacBook Air (13-inch, Late 2010) をオクタブート化 - Qiita
  • zfs - 単一パーティションでマルチブート - Qiita

    なんぞこれ? 事実上パーティションが一つしかないのに、UbuntuだけではなくFreeBSDもブートできます。Debian kFreeBSDとかではなく正真正銘The FreeBSD Project謹製のFreeBSD 11-RELEASEです。 FreeBSDの方は起動時はCLIのみですが、 Username: freebsd Password: zfs でログイン後にstartxするとgnome3が立ち上がります。 ubuntuの方は前回の投稿と同様です。というかそれが材料になってます。 作り方 すでにubuntuがインストール済みのVMを用意 FreeBSD-11-RELEASEのインストールディスクイメージをCDに指定してそこから起動 shellに入る FreeBSD用のデータセットを追加。こんな感じで。 # zpool import -f -N -R /mnt rpool # z

    zfs - 単一パーティションでマルチブート - Qiita
  • zfs - 持ってけ ubuntu 16.04 仮想マシン - Qiita

    OneDrive改め埃かぶってたVPSに置いときます。ご自由にお召し上がり下さい。 なにこれ? 何の Ubuntu 16.04 Desktop の仮想マシンです。100% ZFSな点を除いて。 FreeBSDでは10.0-RELEASE以降インストーラーもZFS対応済みなので Pure ZFS なシステムを作るのも実にちょろいのですが、Linuxはまだそこまで行ってません。Ubuntu 16.04 Root on ZFSというドキュメントは上がってますが、これを見た人は「なんて面倒なんだ!」とまたぎするのではないでしょうか。Ubiquityの超絶安楽インストーラーに慣れた人ならなおのこと。 しかし一旦こしらえてしまえば、あとはいつもと変わりません。デフォルトのext4で構築されたシステムと全く同じように apt できますし、同じように 16.10 にも dist-upgrade できまし

    zfs - 持ってけ ubuntu 16.04 仮想マシン - Qiita
  • swift - PONSとAccelerateをマリアージュしたら通常の3倍の倍速くなった件 - Qiita

    PONSにUInt128を加えてみました。 任意精度をサポートしているのに、なぜ? そこにAccelerateがあったから。 Accelerateは来ヴェクター演算に用いられるライブラリ。とは言っても裸に近いライブラリで、生ですと腹が壊れかねないので(下記コードで生っぷりの片鱗を見ることができます)、SwiftでもSurgeとか有名なラッパーが出てます。 このAccelerate、実は小さな数をまとめて処理するだけではなく、大きな数を処理する機能も入ってたりします。ただし現時点で OS X のみ。 ならば… OS X では Accelerate を使って それ以外では BigInt に計算代行してもらえば 安価に(128|256|512)bit固定長整数が手に入るんじゃね? と先ほど思い立ってやってみたら実に安上がりに出来ました。とりあえずUInt128から。 public struc

    swift - PONSとAccelerateをマリアージュしたら通常の3倍の倍速くなった件 - Qiita
  • Swift - Introducing PONS = Protocol Oriented Number System - Qiita

    まだ荒削りですが、お披露目してもいいところまで来たので。 https://github.com/dankogai/swift-pons 売り口上 これでSwiftでも GMPとか外部ライブラリなしで任意精度整数(BigInt)や任意精度分数(BigRat)や任意精度浮動小数点数(BigFloat)が使えるようになります。 外部依存がないので、Xcodeでなくてもswiftcがあれば使えます。もちろんOS XだけでなくてLinuxもサポート その任意精度数も、四則演算以外の演算を最初からサポートしています。整数は素数判定できますし、任意精度実数は<math.h>の関数を使えます。 これだけでもかなりハッピーになれます。 でも当のウリは、そこじゃないんですよ… 承前: 古き良きCの時代 例えばman powとしてみます。こんな答えが返ってくるでしょう。 SYNOPSIS #include <

    Swift - Introducing PONS = Protocol Oriented Number System - Qiita
  • SwiftでFunctionalといえどデータは使い捨てない方がいい理由 - Qiita

    extension SequenceType { typealias E = Generator.Element func groupBy<K: Hashable>(key: E -> K) -> [[E]] { return self.reduce([:]) { (var r: [K: [E]], x) in let k = key(x) r[k] = (r[k] ?? []) + [x] return r }.map { _, v in v } } } sampleArray.groupBy { "\($0.y)-\($0.m)" } var を parameter で使う以上の問題があります。 それは、配列を使い捨てていること。(r[k] ?? []) + [x]するたびに、古いr[k]に入っていたArrayが捨てられています。 「これってパフォーマンスに響くよねえ」と脊髄反射でベン

    SwiftでFunctionalといえどデータは使い捨てない方がいい理由 - Qiita
  • Swift 2のProtocol-Oriented Programmingっぽい書き方を理解する - Qiita

    func isEven(number: Int) -> Bool { return number % 2 == 0 } let evens = Array(1...10).filter(isEven) print(evens) // [0, 2, 4, 6, 8, 10] 何が古いかというと、いちいち1...10をArrayにしているところ。もうしなくていいんです。そう、Swift 2ならね。 実際、Swift 2では.mapはもうArrayでは定義されてないんです。公式ドキュメントのArray Structure Referenceを見ても、.mapはどこにも見当たりません。 ではどこで定義されているか? Arrayが準拠しているprotocol CollectionType です。実際にCollectionType Protocol Referenceを見てみると、.mapや.filt

    Swift 2のProtocol-Oriented Programmingっぽい書き方を理解する - Qiita
  • swiftでもテストはTAPで - Qiita

    Swift が opensource 化されてもう一月以上。みなさんテストはどうされてますか? もちろんこの場合XCTestなんてチャラいものは使えません。Linux版にSwift自体はあってもXcodeなんてありませんから。 というわけで、私はずっとTest Anything Protocolを使ってきました。 発祥はPerl Communityですが、別にPerlでなくても使えます。例えばJSの世界ではよく使われているmochaも対応してますし、TAP適合の出力であれば、それをチェックするためのスクリプトproveは、Perlが入っている環境であれば必ず入っているのでOS XとLinux Distroの過半では out-of-box で使えます。 見てのとおりシンプルなものなので、その場で都度実装してもいいですし実際そうしてきたのですが、ずいぶんとSwiftプロジェクトも増えたので、

    swiftでもテストはTAPで - Qiita
  • swiftのREPLで俺モジュールをimportする方法 - Qiita

    SwiftのREPL、最高。 何が最高かって、あの重いコンダラじゃなくてXcodeを立ち上げなくても使えるところ。Xcode不要なので、Linuxでも動くし。 しかし、perlのuseとかrubyのrequireとかpythonのimport相当のことを、自分の書いたコードに対してやろうとすると一苦労。でも、一旦やり方を掴んでしまえばちょろいもんです。 swift-complexを例に説明します。 「説明は抜きにして、とにかく俺モジュールimportしたいという人は、以下のMakefileを雛形にしてください。 MOD=Complex BIN=main MODSRC=complex/complex.swift complex/exops.swift BINSRC=$(MODSRC) complex/main.swift complex/tap.swift MODULE=$(MOD).swi

    swiftのREPLで俺モジュールをimportする方法 - Qiita
  • Swift on Linux: Getting Started ASAP - Qiita

    キター! Swift is Open Source - Swift Blog - Apple Developer 理念的にはオープンソースであることが最重要ですが、実地ではApple製品以外の環境も正式サポートされたことが大きいでしょう。これでやっと真の意味での汎用言語となったわけです。 というわけで、早速使ってみましょう。 下準備 Ubuntu 14.04 LTS or Ubuntu 15.10 (64bit) もちろんVMでも構いません。メモリー2GB、仮想ディスク16GBもあれば余裕です。ソースから debugugging symbol までサポートしたフルビルドをしたい場合は、打って変わってメモリー16GBでも足りず、さらに16GBほどswapを足してやっと事なきを得ましたが、バイナリーをダウンロードして使うのであれば最低限で事足ります。 clangのアップデート(14.04 LT

    Swift on Linux: Getting Started ASAP - Qiita
  • Swiftで面倒なJSONの取り扱いをさらに10倍便利にするclass JSON - Qiita

    Swiftで面倒なJSONの取り扱いを10倍便利にするSwiftyJSONをもってしても、まだJavaScriptよりも面倒だったのが悔しかったので書きました。 https://github.com/dankogai/swift-json/ Synopsis AnyObjectなSwiftオブジェクトも、こうして JSON Stringにできます。 let obj:[String:AnyObject] = [ "array": [JSON.null, false, 0, "",[],[:]], "object":[ "null": JSON.null, "bool": true, "int": 42, "double": 3.141592653589793, "string": "a α\t弾\n?", "array": [], "object": [:] ], "url":"http:/

    Swiftで面倒なJSONの取り扱いをさらに10倍便利にするclass JSON - Qiita
  • 1