Feed

A consolidated stream of my writing and activity, powered by RSS/Atom.

RSS

Latest Items

  • Ember PostgREST Dynamic UI — An approach to flexible & easy-to-maintain interfaces
    Medium·
    This is a pet-project I worked on during the Hack Week (July 13–15th) at eCareSoft. It emerged from a casual chat between Jorge Camargo and I discussing ways to achieve dynamic forms for different medical specialties at Nimbo X, while keeping it simple and easy to maintain.

    Ember PostgREST Dynamic UI — An approach to flexible & easy-to-maintain interfaces was originally published in The Backlog by Ecaresoft on Medium, where people are continuing the conversation by highlighting and responding to this story.

  • Dev Notes: Fuzzy Search on PostgreSQL
    Medium·

    My previous experience with search in Rails was 5+ years ago, then I used Sphinx as a Full-Text external search engine, which seems to have gone out of fashion. At Nimbo X we use pg_search rails gem for searching purposes, with Full-Text already enabled in PostgreSQL itself, which has worked for us so far. Nevertheless, with the increase of usage among practicians, along with our recent introduction of Medispan, support tickets related to mismatched search queries have become a cause of pain for the team. We knew our users deserve better. #MayThe4thBeWithYouFirst we needed to understand the current landscape on psql search. Luckily PgSearch documentation pointed us in the right direction: along with full-text search, other algorithms are supported through PostgreSQL contrib packages: fuzzystrmatch (Levenshtein, Double Metaphone) & pg_trgm (Trigrams). AlgorithmsLevenshtein (a.k.a. match difference)Levenshtein distance is a string metric for measuring the difference between two sequences. Informally, the Levenshtein distance between two words is the minimum number of single-character edits (i.e....

    Continue reading...
  • AirtableSerializer
    Gists·
    import Ember from 'ember';
    import DS from 'ember-data';
    /*
    * Override RESTSerializer since it's the closest to Airtable's afaik
    */
    export default DS.RESTSerializer.extend({
    /*
    * Normalize each response from Airtable
    * to meet expected RESTSerializer criteria
    */
    normalizeResponse(store, type, payload) {
    /*
    * Get model name pluralized
    * ToDo: pluralization with Ember.Inflector
    */
    const modelNamePlural = type.modelName + 's';
    /*
    ...
    Continue reading...
  • adapters/application.js
    Gists·
    import DS from 'ember-data';
    export default DS.JSONAPIAdapter.extend({
    host: 'https://api.airtable.com',
    namespace: 'v0/appL0nGiD3nT1f1c4t0r',
    headers: {
    'Accept': 'application/json',
    'Authorization': 'Bearer ' + 'keyS3CR3T'
    },
    });
  • keybase.md
    Gists·

    Keybase proof

    I hereby claim:

    • I am benoror on github.
    • I am benoror (https://keybase.io/benoror) on keybase.
    • I have a public key whose fingerprint is 099E C5B1 CC72 1D45 89BF AB46 CCF1 0E48 07D4 6DA6

    To claim this, I am signing this object:

    {
    "body": {
    "key": {
    "eldest_kid": "0101db568c3dc9975669cf56ee915baae1d54ba6c6a24150cf5b142fe87382cea64e0a",
    "fingerprint": "099ec5b1cc721d4589bfab46ccf10e4807d46da6",
    "host": "keybase.io",
    "key_id": "ccf10e4807d46da6",
    "kid": "0101db568c3dc9975669cf56ee915baae1d54ba6c6a24150cf5b142fe87382cea64e0a",
    "uid": "a1acc8f956a802d78c685b099e4eba19",
    "username": "benoror"
    },
    "service": {
    "name": "github",
    "username": "benoror"
    },
    "type": "web_service_binding",
    "version": 1
    },
    "ctime": 1461218032,
    "expire_in": 157680000,
    "prev": "a6d0c39e65a9764ca47b281e3fd1a266a8fe5f227baf4e5c04145f4da299e5a5",
    "seqno": 2,
    "tag": "signature"
    }

    with the key 099E C5B1 CC72 1D45 89BF AB46 CCF1 0E48 07D4 6DA6, yielding the signature:

    -----BEGIN PGP MESSAGE-----
    Version: GnuPG v1
    
    owGtUm1MHFUU3d0iBKhICCDaGugUEctCZ4aZ2ZlNWgQx0VglNJBGwMJ7M2+WgWVn
    mV0+NrhtUYIihG5qBAwI1NIWghapLZGUUm1t+rG10qZKW6io2dpQJRUEqpUFZ0j9
    p/98f17eueecd8/N9Ty6RmfQX5oNezHoWtkhvXca6nbElDyowaAsuDBzDVaKVi9k
    FZDDWVgqCZgZwwmcECDNsHyqwHOciWYYjhdpBiGOoCEAiBBoCgKGZwBJETSu1iBB
    kSJiTaksySPAUAgHmBETJZsFKXZFsjk1W45DvMrkeRNJCBTNclAEkGJ4XiRwRLG4
    SaAYATCqsFh2aAq1OQgcKEWSVUx9FK629y/8/7nvilU7QACeZ0WOZgCLk4KJ5RmW
    hloKCkFAcBrRgRQbKEMqGyKbrMgK5jZiKlgp8Uib68OiRXIWV8D/FDhddg2pQrDw
    obYQSjZBnZ4qqUSKQ5JtmJlQmbxT0sQExRAkweKppBFD1XZJQYWSxqBNDIurx4jZ
    FVSpZWAEnE/lEEMDzsRQPHiVMkGSJVCqKBCAZNRoIqJFkjRBIFKI5nGKoGiREgCp
    5qQBjWlxym0yZla/cgKL6umQLDbgrFAQ5g5pMKwP0OkNusBHDNpe6UKCw/9Ztsvu
    cF0bf0efcNs/uNwwcf6GLzrzXs94qzd4IqP9ftGfs53fdy9d/6ElTwhZU3E8oAWv...
    
    Continue reading...
  • PGP Public Key
    Gists·
    -----BEGIN PGP PUBLIC KEY BLOCK-----
    Version: GnuPG v1
    mQINBFMgUU0BEAC50m+8R2DVAG6hP9FurOBez+6ebhFWwzLqU5cTmS1jiNJvcQlf
    keEhyYvqpncrcxAy+NCa/x1pLBWgOkJ0yEC85CNgLJOvmYj2zBE+y3ZWz9or72bB
    KyrhnVkY7L3VE7fX0yhrKTsVrbRal/IRm8T8H2RXAxKnacybqEFksEBkS/lezu6S
    EUVrLVJPPkjUWJypIi+4J9/iDtJ2nkblndlfQTxHgOR1xdpDpPIqRLBX0g+ppm2K
    jH+LCovln9zKXUaxxLnFZs43XHbiRijsISxHjIVMkY/6c38khX4kFehSJ3LwmTo2
    J5g/GvYhP+IaD5dvQGTuvVOP3El1M0nLGLxNo0tYqgwx7gsWdXLxdxWeJio1Z7Up
    sjWxalaX8sEMYiK+JOlzSM5rDWfrvugviRYQyTFj8XrRyVj6EdqJ5v16ofQRw+0+
    AoilxhStNaRdHRUDJM8o/K2qAOqASauMdrl/4/zI4NRNTNE1t93GuEMIoBhYM1UB
    cLRqgNUP+4k0EPJm4+zY7OlLAroGZLBR+TR0khLXLab/+tWyRI884x8Z6/JLlJZn
    r3E4LoETEWNR9kyHH8adZknawCKsf0CWZBl72pHmk32Ssq4M4zuYsAUsK+r2cruO
    v+khT4s/90e9qqogXrWDcNYnJX3YBdJxfxRot4zXKzPqvKry9VYHqOOknwARAQAB
    tElCZW5qYW1pbiBPcm96Y28gKEJlbmphbWluIE9yb3pjbyAtIGJlbm9yb3JAZ21h
    aWwuY29tKSA8YmVub3JvckBnbWFpbC5jb20+iQI8BBMBCgAmBQJTIFFNAhsDBQkJ
    ZpcjBQsJCAcDBRUKCQgLBBYCAQACHgECF4AACgkQzPEOSAfUbaY4Mg//eYi2lyJq
    evmHLuxUCV8BMKN7K+C/HOQzjc02C9eXXdGVkMSUJ+f9aQ7gyEGxD5l3dnJzPZ2E
    +chWsEIq9dNak5QugQGArLr3XlhjYF+N0r4xnSmiua3edbVruGSpDXG5zUqNaI5u
    2vN8KsX9nB0r6Aq8Np66SFT+xmtypt72iaBDUB/AtHTd3Z+WtrGlP8u1AK5yGQ6w
    ...
    Continue reading...

Generated at Nov 9, 2026, 5:23 PM

❯
Try:""