Skip to content

Instantly share code, notes, and snippets.

View felipecsl's full-sized avatar
⚒️
Building

Felipe Lima felipecsl

⚒️
Building
View GitHub Profile
@felipecsl
felipecsl / unless.kt
Last active December 24, 2017 13:12
Kotlin unless like Ruby just for fun
inline fun <T> unless(stmt: () -> Boolean, block: () -> T, noinline elseBlock: (() -> T)? = null) =
if (!stmt.invoke()) {
block()
} else {
elseBlock?.invoke()
}
// Use like:
unless({ foo == bar }, {
@felipecsl
felipecsl / extensions.kt
Last active September 12, 2021 18:55
Helpful Kotlin extension functions
import com.fasterxml.jackson.core.type.TypeReference
import com.fasterxml.jackson.databind.ObjectMapper
import org.gradle.api.Task
import org.gradle.api.Project
import org.gradle.api.UnknownTaskException
import org.gradle.api.GradleException
import org.gradle.api.plugins.ExtraPropertiesExtension
@SuppressWarnings("UNCHECKED_CAST")
fun <T> Project.ext(key: String): T {
@felipecsl
felipecsl / MutableLazy.kt
Created October 22, 2017 23:30
A Kotlin lazy that can be set to override the initializer value
private fun <T> mutableLazy(initializer: () -> T) = Delegate(lazy(initializer))
class Delegate<T>(private val lazy: Lazy<T>) {
private var value: T? = null
operator fun getValue(thisRef: Any?, property: KProperty<*>): T {
return value ?: lazy.getValue(thisRef, property)
}
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
@felipecsl
felipecsl / keymap.cson
Created June 12, 2017 06:23
Atom keymap
# Your keymap
#
# Atom keymaps work similarly to style sheets. Just as style sheets use
# selectors to apply styles to elements, Atom keymaps use selectors to associate
# keystrokes with events in specific contexts. Unlike style sheets however,
# each selector can only be declared once.
#
# You can create a new keybinding in this file by typing "key" and then hitting
# tab.
#
@felipecsl
felipecsl / code-of-conduct.md
Last active November 17, 2023 23:34
Brazil Tech Expats Slack group Code of Conduct

Código de Conduta

O Brazil Tech Expats se esforça para criar um espaço confortável para todos os membros da nossa comunidade em crescimento. Nós acreditamos em respeito, compaixão, compreensão e inclusão, e esperamos que todos os membros da comunidade se comportem em concordância com estes valores.

Não toleramos qualquer espécie de assédio. Qualquer pessoa que for identificada participando de comportamentos de assédio será contactada por uma pessoa da administração, que solicitará a interrupção de quaisquer atividades inapropriadas ou que a pessoa se desligue imediatamente da nossa comunidade.

Assédio inclui, mas não se limita a:

  • Comentários ofensivos sobre a identidade de uma pessoa;
  • Comentários indesejados sobre as escolhas e práticas de estilo de vida de uma pessoa;
@felipecsl
felipecsl / app.js
Created September 9, 2016 18:57
Sample use of react-native-maps with a tabbed layout
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
TouchableOpacity,
Text,
ViewPagerAndroid,
View,
} from 'react-native';
import MapView from 'react-native-maps';
@felipecsl
felipecsl / rxruby.rb
Created February 25, 2016 13:30
Super simplified and naive (but fun) version of RxRuby I wrote during an endless flight to Brazil
class Observable
def initialize(&on_subscribe)
@on_subscribe = on_subscribe
end
def self.from(arr)
new do |o|
arr.each do |i|
o.on_next(i)
end
@felipecsl
felipecsl / ExceptionParser.java
Last active January 28, 2019 12:42
Helper class to parse error response body on Retrofit 2
public static class ExceptionParser {
private final ResponseBody body;
private final String bodyString;
private final Converter.Factory converterFactory;
public ExceptionParser(Response response, Converter.Factory converterFactory) {
this.converterFactory = converterFactory;
this.body = cloneResponseBody(response.errorBody());
this.bodyString = getBodyAsString(body);
}
{
"page":1,
"totalPages":1,
"totalResults":1,
"type":"FUTPlayerItemList",
"count":1,
"items":[
{
"commonName":"Cristiano Ronaldo",
"firstName":"C. Ronaldo",
private static List<File> findAllFiles(String baseDirectory) {
List<File> files = new LinkedList<File>();
List<File> directories = new LinkedList<File>();
directories.add(new File(baseDirectory));
while (!directories.isEmpty()) {
File [] subFiles = directories.remove(0).listFiles();
for (File f : subFiles) {
if (f.isDirectory()) {