GitHubActions for Swift projects

13 de September de 2019


The long awaited action-based GitHub CI and CD arrived, today I received my invite and went running to test.
To join the waiting list, sign up for this GitHub Actions link. When you receive your invite your account and all your repositories receive the Actions button as below:

Well, let's go! My example follows a very simple structure: To run a Swift project build, I will base the script on one of my open projects, MLTontiatorView.
Accessing this tab you will see a GetStarted with workflow suggestions to have a base from where to start. Unfortunately there is no popular for workflow Swift yet, so you will see a button with blue text Set up a workflow yourself. Click on it and you will enter a standard GitHub edit screen as below:

You can clear the content and based on this code that I will add here:

      - develop
name: Build
    name: Build
    runs-on: macOS-latest
          destination: ['platform=iOS Simulator,OS=12.2,name=iPhone X']
      - name: Checkout
        uses: actions/checkout@master
      - name: Build
        run: |
          xcodebuild clean build -project MLTontiatorView.xcodeproj -scheme MLTontiatorView-iOS -destination "${destination}" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO ONLY_ACTIVE_ARCH=NO
         destination: ${{ matrix.destination }}
You must replace the parts:
  • branches> develop for the branch you want to workflow on
  • - project to your project's xcodeproj file
  • -scheme for Target in this case ios's gave project
The strategy matrix is very simple, it is an array of platforms that your project will execute. Soon I will make a new post with other examples of modules that run on other platforms, such as tvOS. The goal here is to make you run a build on your project via Actions.
Once the edit is done, the Start commit button can be clicked, add the comment regarding this change and wait for the action to start the process.
NOTE: I am changing the filename from main.yml to Build.yml to separate workflows. In this case, you can create a new file such as Tests.yml and configure the workflow to run your tests.
When you get back to the Actions tab you will see a screen like this:


In the Edit workflow button you edit your Build.yml file.
By clicking on develop, you get to the screen with the jobs running in your workflow with time and information whether they succeeded or not.

That's it people, good Actions!
Ah a detail: In your local repository check out the branch where you created the yml. You can edit it locally as workflow files are stored in the
.github / workflows / folder
I recommend running the xcodebuild command in your project folder to verify that the build is running and testing the command before running in Action, as some configuration may be different in your project.
In my opinion, the process of setting up and running the workflow is very fast. The free versions have an attractive runtime for small projects, but as they are still in beta, some issues may occur. Until the publication of this post I could not run a simple Command Line project and its tests. I will work a little on it and I will post news again.
Thanks for reading guys!
Some useful links:


GitHub Actions

12 de September de 2019


O Tão esperado CI e CD da GitHub baseado em actions chegou, recebi meu invite hoje e fui correndo testar.

Para você entrar na lista de espera faça sua inscrição neste link GitHub Actions. Quando receber seu invite sua conta e todos os seus repositórios recebem o botão Actions conforme imagem abaixo:


Bom vamos lá! Meu exemplo segue uma estrutura bem simples: Para rodar o build de um projeto em Swift, vou basear o script em um de meus projetos abertos, o MLTontiatorView.

Entrando nesta aba você verá um GetStarted com sugestões de workflows para ter uma base de onde começar. Infelizmente para Swift ainda não existe um workflow popular, então você verá um botão com texto azul Set up a workflow yourself. Clique nele e você entrará em uma tela de edição padrão do GitHub conforme imagem abaixo:

Pode limpar o conteudo e se basear neste código que vou adicionar aqui:

      - develop
name: Build
    name: Build
    runs-on: macOS-latest
          destination: ['platform=iOS Simulator,OS=12.2,name=iPhone X']
      - name: Checkout
        uses: actions/checkout@master
      - name: Build
        run: |
          xcodebuild clean build -project MLTontiatorView.xcodeproj -scheme MLTontiatorView-iOS -destination "${destination}" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO ONLY_ACTIVE_ARCH=NO
         destination: ${{ matrix.destination }}

Você deve subistituir as partes:

  • branches > develop para a branch que deseja executar o workflow
  • - project para o arquivo xcodeproj do seu projeto
  • -scheme para o Target neste caso ios do deu projeto

O strategy matrix é bem simples, é um array de platforms que seu projeto vai executar. Em breve farei um novo post com outros exemplos de módulos que rodam em outras plataformas, como a tvOS. O objetivo aqui é fazer você rodar um build no seu projeto via Actions.

Feita a edição, o botão Start commit pode ser clicado, adicione o comentário referente a essa alteração e aguarde a action iniciar o processo.

OBS: Estou alterando o nome do arquivo de main.yml para Build.yml para separar os workflows. No caso, você pode criar um novo arquivo como, por exemplo, Tests.yml e configurar o workflow para rodar seus testes.

Quando você entrar novamente na aba Actions verá uma tela como esta: 

No botão Edit workflow você edita seu arquivo Build.yml.

Clicando no develop, você acessa a tela com os jobs executados em seu workflow com tempo e informações se eles tiveram sucesso ou não.

É isso pessoal, bons Actions!

Ah um detalhe: Em seu repositório local faça um checkout da branch onde você criou o yml. Você pode editá-lo localmente, pois os arquivos de workflow ficam armazenados na pasta .github/workflows/ .

Recomendo você rodar o comando xcodebuild na pasta do seu projeto para verificar se o build está rodando e testar o comando antes de rodar no Action, pois pode ser que alguma configuração fique diferente no seu projeto.

Na minha opinião, o processo de configuração e execução do workflow é muito rápido. As versões free tem um tempo de execução atrativo para projetos pequenos, mas como ainda estão em versão beta, alguns problemas podem ocorrer. Até a publicação deste post não consegui rodar um projeto Command Line simples e seus testes. Trabalharei um pouco nele e volto a postar novidades.

Obrigado pela leitura pessoal!

Alguns links úteis:

WWDC 2019 - Body Invaders

22 de April de 2019

Welcome to Body Invaders


My first submission to WWDC is Rejected, no problem, the experience was fantastic and fun. Next year we will try again


The inspirations and motivations for the creation of this playgroundBook game are:

My wife Karen and the little babies Alice and Anita


To best experience use device on landscape rotation.


 This playground will teach you how your body defends itself from bacteria and viruses that we are exposed to every day ...


 The stories of superheroes show us the struggles between the defenders of planet Earth and the enemies who try to invade our space and dominate us, with intense battles of powers between good and evil. In this war all the super powers necessary to defeat the villains are used as quickly as possible and without causing much mess, establishing world peace. In the human body are battled several of these battles every time bacteria and viruses invade our body trying to multiply and make us sick. In our blood we have well-trained small soldiers to attack any invader and destroy it, lymphocytes and macrophages.

 Let's present the two main heroes




 Macrophages are the first to detect enemies and their function in the army is to neutralize, ingest (phagocytosis) and destroy the invading villains, in addition to processing them and presenting them to the lymphocytes.





 Lymphocytes protect us against viruses, fungi and bacteria and are responsible for differentiating the cells from the body from foreign bodies. When they find the invaders in the bloodstream, they produce the antibodies, responsible for the destruction of the villains.


 In this chapter your enemies are two types of bacteria











Share via Air drop a file Body Invaders.playgroundbook this file are open in Playgrounds

Tap in icon Body Invaders an enjoy de game.


Game Instructions

 Tap the bacteria to kill them.


 You have 2 types of weapons **Macrophages** and **Lymphocytes**


 ## Macrophages

 Have 2 points of power


 ## Lymphocytes

 Have 10 points of power

 To change weapons tap the hero at the bottom of the screen. You have 3 minutes to kill as many bacteria as possible


GitHub Project

Youtube Demo


Raspberry Pi DHT-SwiftyGPIO - PTBR

10 de March de 2019

Usando o Swift para exibir a temperatura e a umidade de um módulo DHT11


Raspberry Pi 2+ ou Raspberry Pi 3 Model B Model DHT11 ou DHT22

Instalando Dependências

Para usar os binários pré-construídos fornecidos, você precisará instalar as seguintes dependências:



sudo apt-get install clang libicu-dev libcurl4-nss-dev




SwiftyGPIO faça o Download da ultima versão compátivel com sua placa.

Veja a tabela: Build Swift On ARM prebuilt-binaries e baixe.




Descompacte os arquivos para uma pasta de sua escolha. Por exemplo:  /home/michel/swift-4.2.3/ após descompactar, execute um export path:


export PATH=/home/michel/swift-4.2.3/usr/bin:"${PATH}" 


Teste se está tudo certo com o combando: 


swift --version 


A saída no terminal de ve ser algo como isso:


Swift version 4.2.3 (swift-4.2.3-RELEASE) 
Target: armv7-unknown-linux-gnueabihf



Clone e rode o projeto


$ git clone 
$ cd DHT-SwiftyGPIO
$ swift run  Waiting output should be like this: 
Temperatura: 25.0 Umidate: 41.0


Arquivos de referência

O DHT.swift foi baseado no projeto dhtxx Mas com modificações.

A DHT class init permite selecionar o sensor e o tipo de conversão de dados que por padrão é Celcius.


Enums Types


swift public enum SupportedSensor { 
    case dht11, dht22 

public enum ConversionType { 
    case Fahrenheit, Celsius 

init(pin: GPIO, for sensor: SupportedSensor, conversion: ConversionType = .Celsius) { } 


Exemplo criando objeto para um módulo DHT11


let dht = DHT(pin: gpios[.P4]!, for: .dht11) 


Problemas conhecidos


Erros de leitura iniciais ocorrem devido a falha de pulso inicial. Normalmente você terá boa leitura nos 60 segundos após rodar o programa
Veja o projeto no GitHub DHT-SwiftyGPIO
Espero que este projeto ajude a começar com a criação de projetos de IoT com o Swift



Raspberry Pi DHT-SwiftyGPIO

10 de March de 2019

Using Swift to display temperature and humidity of a DHT11 module


Raspberry Pi 2+ or Raspberry Pi 3 Model B Model DHT11 or DHT22

Installing Dependencies

To use the provided prebuilt binaries you'll need the install the following dependencies:



sudo apt-get install clang libicu-dev libcurl4-nss-dev




SwiftyGPIO Download last version swift ARM compatible with your board.

See table: Build Swift On ARM prebuilt-binaries and Download




Unzip the files to a folder of your choice: For example: /home/michel/swift-4.2.3/ After unzip, export path:


export PATH=/home/michel/swift-4.2.3/usr/bin:"${PATH}" 


Test if everything went right run command:


swift --version 


And the output should be like this:


Swift version 4.2.3 (swift-4.2.3-RELEASE) Target: armv7-unknown-linux-gnueabihf



Clone and run project


$ git clone 
$ cd DHT-SwiftyGPIO
$ swift run  Waiting output should be like this: 
Temperatura: 25.0 Umidate: 41.0


Reference files

The DHT.swift was based on the project dhtxx But with modifications

DHT class init allows you to select the sensor type and data conversion by default is used Celcius


Enums Types


swift public enum SupportedSensor { 
    case dht11, dht22 

public enum ConversionType { 
    case Fahrenheit, Celsius 

init(pin: GPIO, for sensor: SupportedSensor, conversion: ConversionType = .Celsius) { } 


Example create module DHT11 Object


let dht = DHT(pin: gpios[.P4]!, for: .dht11) 




Initial read errors occur due to initial pulse failure  Usually get a good reading within the past 60s.

See the project on Github DHT-SwiftyGPIO



I hope this project helps start with the creation of IoT projects with Swift



Vapor 3: Reutilizando o model de backend para o seu app

08 de December de 2018


Estou transpondo o tutorial para o blog enquanto isso apreie os slides =D




Vapor 3 Postgres e OneModel

30 de August de 2018





Objetivo: Criar uma api com reaproveitamento de modelo de dados para uso em aplicativo nativo.




Instalando o Vapor

Siga as instruções do site oficial:


Após instalado e com o XCode aberto, vamos instalar o Fluent para o PostreSQL, que será o responsável por toda a comunicação de model / vapor com nosso banco de dados.

Link Documentação Fluet


Adicione o pacote no arquivo Package.swift


dependencies: [

        // 💧 A server-side Swift web framework.

        .package(url: "", from: "3.0.0"),

        .package(url: "", from: "3.0.0")

        .package(url: "", from: "1.0.0"),


    targets: [

        .target(name: "App", dependencies: ["FluentSQLite", "FluentPostgreSQL", "Vapor"]),



Após adicionar as linhas e dependências execute novamente o comando: 

	$ vapor xcode

Para que sejam instaladas as dependências no projeto.

Faça isso sempre que adicionar e ou remover alguma dependência


Feito isso vamos começar as configurações:


Configurações de Serviços, IP e porta: 



/// Register providers first

try services.register(FluentPostgreSQLProvider())



IP e Porta:


//Configure IP And Port

    let serverConfiure = NIOServerConfig.default(hostname: "", port: 8080)




Fluent PostgreSQL DataBase:


/// Configure a PostgreSQL database


    var databases = DatabasesConfig()

    let databaseConfig = PostgreSQLDatabaseConfig(hostname: "localhost", username: "michel", database: "todoDemo1")

    let dataBase = PostgreSQLDatabase(config: databaseConfig)

    databases.add(database: dataBase, as: .psql)






/// Configure migrations

    var migrations = MigrationConfig()

    migrations.add(model: Todo.self, database: .psql)

    //migrations.add(model: Todo.self, database: .psql)




Configurando Model: Sources > App > Models > Todo.Swift


Vamos alterar o model Todo para o seguinte formato. Removendo o import do FluentSQLite também o protocolo SQLiteModel substituindo por Codable, vamos adicionar um atributo / campo do tipo Bool

import Foundation



/// A single entry of a Todo list.

final class Todo: Codable {

    /// The unique identifier for this `Todo`.

    var id: Int?


    /// A title describing what this `Todo` entails.

    var title: String


    /// A flag describing if this `Todo` is done.

    var done: Bool?



    /// Creates a new `Todo`.

    init(id: Int? = nil, title: String, done: Bool? = false) { = id

        self.title = title

        self.done = false




Vamos recortar agora as seguintes linhas que estão abaixo da class Todo:


/// Allows `Todo` to be used as a dynamic migration.

extension Todo: Migration { }


/// Allows `Todo` to be encoded to and decoded from HTTP messages.

extension Todo: Content { }


/// Allows `Todo` to be used as a dynamic parameter in route definitions.

extension Todo: Parameter { }



Agora abra o arquivo: Sources > App > Controllers > TodoController.Swift

Logo abaixo do import Vapor, cole o código que copiamos do arquivo Todo.swift

Vamos aproveitar e importar também a Lib FluentPostgreSQL e adicionar a Extension para o mesmo



extension Todo: PostgreSQLModel { }



Nosso arquivo após os ajustes deve ficar assim:


import Vapor

import FluentPostgreSQL


extension Todo: PostgreSQLModel { }


/// Allows `Todo` to be used as a dynamic migration.

extension Todo: Migration { }


/// Allows `Todo` to be encoded to and decoded from HTTP messages.

extension Todo: Content { }


/// Allows `Todo` to be used as a dynamic parameter in route definitions.

extension Todo: Parameter { }




/// Controls basic CRUD operations on `Todo`s.

final class TodoController {

    /// Returns a list of all `Todo`s.

    func index(_ req: Request) throws -> Future<[Todo]> {

        return Todo.query(on: req).all()



    /// Saves a decoded `Todo` to the database.

    func create(_ req: Request) throws -> Future<Todo> {

        return try req.content.decode(Todo.self).flatMap { todo in

            return req)




    /// Deletes a parameterized `Todo`.

    func delete(_ req: Request) throws -> Future<HTTPStatus> {

        return try { todo in

            return todo.delete(on: req)

        }.transform(to: .ok)





Fizemos estes ajustes para que possamos isolar o arquivo de model Todo para que possamos usá-lo tanto no Vapor quanto em um projeto de app sem se preocupar com dependências.


Neste momento já podemos rodar o projeto e ver o banco criado. com o Terget Run selecionado  aperte Command + R para rodar o projeto

Se tudo deu certo você deve ter a seguinte saída no console do XCode.


E se você abrir seu gerenciador de banco, terá o banco criado também. (Eu uso o pgAdmin)



Podemos fazer um commit de nossas alterações e partir para o próximo branch =)


Testando API com Postman:

Você pode facilmente testar a api com o Aplicativo Postman


Se fizermos um get no mesmo endereço já teremos a listagem com as todos criadas, se acessarmos no navegador o endereço http://localhost:8080/todos também teremos acesso as todos criadas.


Criando um App de Todo e Reaproveitando o Model


Primeiro precisamos adicionar um novo Target no projeto:


  1. Selecione o Projeto e ckique no icone + conforme imagem abaixo:

  2. Selecione Single View App:

  3. Preencha os campos conforme preferir e de ok:


Pronto você tem um novo target criado. Agora precisamos fazer com que o Model seja visto por nosso novo target.

Para isso selecione o arquivo de model e na coluna de Utilities marque o target do App conforme imagem abaixo:

Agora o Model Todo já está visivel para o Target do App.

Não vou entrar no melhor modo de fazer um app de Todo mas vou deixar o projeto final no github para que vocês vejam o tutorial rodando e criando registros.

Link do projeto final:

Fique a vontade e crie como você preferir.



Espero que tenham gostado e em breve trago novos posts de Vapor. 



Automatizando deploy com Fastlane

13 de March de 2018

fastlane é uma plataforma de código aberto mantida pelo Google destinada a simplificar a implantação de Android e iOS.

O fastlane permite automatizar todos os aspectos do seu desenvolvimento e liberar o fluxo de trabalho.

Link do projeto:


Suporte com Integração Contínua

Vou criar um tutorial para o setup inicial e posteriormente vou evoluindo, no final deste poste você será capas de:
  • Criar o app no Developers Portal da Apple;
  • Criar o app na Itunes Connect;
  • Gerar certigicados de provisionamento de desenvolvimento e de distribuição;
  • Enviar seu app para revisão



O processo todo foi feito em um MacOS

São necessários previamente instalados os itens abaixo.

  • Xcode instalado
  • Xcode Command Line Tools ( abra o terminal e execute ) xcode-select —install
  • Brew
  • Bundler

Instalando Brew

# Instalar
/usr/bin/ruby -e "$(curl -fsSL"

# Testes de permissões
brew doctor

# Atualizar Brew
brew update

# Instalar Brew Cask, para instalar apps pelo terminal
brew tap caskroom/cask

Instalando Budler

# Instalar Bundler
sudo gem install bundler


Além disso recomendo já ter criado também uma conta no Bitbucket ou outro de sua preferência, o Bitbucket será usado para criar um repositório privado para os certificados.
Não esqueça que é necessário também uma conta de desenvolvedor Apple ID. 

Dependências para certificados e usuários desenvolvedores e CI

O fastlane tem um controle de certificados e recomenda o uso de um repositório git privado para armazenamento destes.

Em caso de conta de desenvolvedor (empresa) Team onde se permite adicionar mais desenvolvedores, recomenda-se criar uma nova apple id (usuário e email para este na rede) com permissões especificas de gestão de aplicativos para que este usuário faça as criações, publicações e atualizações automaticamente sem precisar usar senha de desenvolvedor global.

Fastlane pode ser usado com projetos Ionic, React Native e Projetos nativos também, uma vez que se utiliza de arquivos comuns de projetos das plataformas para realizar as automatizações. 

Para geração de screenshots é necessário implementar classes (arquivos) de testes de UI para que o build seja feito. Caso contrário basta adicionar as imagens de screenshot dentro de sua pasta especifica para que quando o release for feito ele possa adicionar as imagens no Itunes Connect ou Play Store Console. Vou criar um outro post mais para frente somente com isso.


Mão na massa

Abra o Xcode e crie um projeto qualquer

Na Tala com informações do projeto.


Desmarque a caixa Automatically manage signing



Abra o Terminal e acesse a pasta raiz do projeto.

Tendo todos os requisitos de instalação ok execute o seguinte comando.

 bundle init

este comando irá iniciar o bundler dentro do seu projeto....

Próximos passos

- Abrir o arquivo Gemfile criado pelo bundler 
- adicionar a linha de dependência
     gem "fastlane"
- Executar no terminal 

bundle update
 para que o bundle instale as dependências adicionadas no arquivo  Gemfile.
- Criar projeto na apple
	bundle exec fastlane produce

Será perguntado seu ID da Apple senha  eo Bundle ID do projeto e o nome do mesmo.

Aguarde o processo. Feito isso você pode começar a usar as ferramentas do fastlane

- Inicializando fastlane

	bundle exec fastlane init
- Singin 

	bundle exec fastlane match init
colocar caminho do repositorio dos certificados gerados pelo GitHub ou Bitbucket
Para distribuição e desenvolvimento respectivamente.
	bundle exec fastlane match appstore
	bundle exec fastlane match development

É importante que neste momento você sesative o auto signing do seu projeto e selecione na caixa o perdil que tenha match elegível, conforme imagem abaixo.


Você pode adicionar no seu info.plist a sequinte linha

< key >ITSAppUsesNonExemptEncryption< / key >
  < false >

Remova os espaços ok?


A doc completa do Match você pode encontrar aqui:


No próximo post vou explicar como publicar o seu app usando o Fastlane

Até lá....

Swift - Gerando Doc com jazzy

27 de October de 2017


Olá pessoal. Hoje vou explicar de uma maneira bem simples como podemos gerar uma documentação de nosso aplicativo de uma forma bem rápida e sem dor de cabeçar. Usando o Jazzy




O Jazzy é uma ferramenta de linha de comando que gera a documentação de nosso projeto baseada na documentação de cada código fonte, classe, função , struct ...

Ele suporta alguns bons tipos de formato de marcação abaixo alguns links.

A lista completa e documentação pode ser encontradas no pŕoprio git do Jazzy

Bom vamos por a mão na massa.



Precisamos ter instaladao o Ruby em nossa maquina. portanto abra o terminal e digite:  ruby --version

Caso não tenha instalado recomendo o RVM ou instele via Brew.


Certo seguimos então com o seguinte comando:

sudo gem install jazzy

Aguarde o final da instalação e pronto já podemos usar. O Jazzy tem seu próprio help parão digitando o jazzy -h


Um exemplo basico de documentação.


         Documentação para func com param


     - Parameter login: ***String*** com login


     - SeeAlso: `Usuario`


    func testeDoc(login: String){


.   ...



Para excluir da documentação use uma declaração de comentário para documentação com  :nodoc:




class AppDelegate: UIResponder, UIApplicationDelegate {





Gerando a documentação


Feito isso você precisa voltar para o terminal entre na pasta raiz do projeto e execute o comando:  jazzy --min-acl internal

Vocë deve ter a seguinte saída



porque --min-acl internal ?

Você poderia apenas executar jazzy  Mas a  documentação deixa claro que por padrão ele procura por padrão declarações publicas e abertas.

Como nosso código é bem padrão precisamos setar o internal como parametro de requisito minimo de geração.


Acessando a documentação


Entre na pasta do projeto e procurar por outra chamada docs. Dentro dela existe um arquivo index.html dois clicks neste arquivo e a documentação é aberta no navegador padrão de sua maquina.



- Note que nesta imagem acima a classe AppDelegate ainda aparece. Se você baixar o reposiório do post verá que a documentação com :nodoc: foi adicionada e ela foi removida da documentação final.


Deixei todo o fonte e doc em meu git para darem uma olhada segue o link Git postjazzy



Em breve ... estou montando certinho o passo a passo. pois é um pouco diferente na parte de dependências.




Simples não?


Como eu gosto de dizer. Uma boa documentação vale por mil palavras.



Hello World  -  Resiliência em tempos de crise

30 de June de 2017

Primeiramente. Obrigado a você que teve interesse em ler o que começo a escrever a partir de hoje. Tenho minha conta no Medium (Texto migrado do meu Medium) a algum tempo consumo conteúdo mas nunca me dediquei a publicar algo, até não por falta de vontade mas por rotina de outras coisas. E é um pouco sobre estas outras coisas que venho escrever para vocês hoje.

Trabalho com Desenvolvimento de Sistemas atualmente Front-end em uma empresa aqui de Porto Alegre. Sou dono de uma empresa chamada Masters Mx e que em 2015 precisei infelizmente deixar um pouco o sonho de ter o próprio negócio de lado para sobreviver e alimentar um pequeno Golden Retriever de 45kg chamado Simba.



Simba JR Lütz Tiento Golden True Love


Quando em 2011 decidi largar um emprego bom na minha área para seguir um sonho que tinha des de pequeno o frio na barriga bateu mas a vontade era maior que ela. A jornada é complicada, muito energético ansiedade, medo. Os projetos vem atrasos ocorrem, problemas acontecem. Você tem seu carro arrombado em um supermercado e furtam seu notebook com um projeto de potencial muito bom que você não havia feito backup. É amigo a primeira tijolada vem e te acerta no meio. Primeiro projeto cancelado.

Você continua pois são coisas que acontecem, investe em um novo computador e segue em frente. São muitos leões para se matar e algumas mulas para se aturar. Consegui manter projetos funcionais ver a empresa prosperar por 5 anos. Vi pessoas que não acreditavam me falar que gostariam de ter tido a coragem que tive quando eram mais novos.

Tentar e fracassar entra na rotina, mas sempre vão existir pessoas que acreditam e investem em você e em seu projeto. Posso dizer que não sou de família rica e não herdei o negócio da família, mas tive a melhor investidora que se pode ter. Dona Sandra minha amada mãe, investiu em mim quando tinha e quando não tinha.
Quando inventava um negócio para fazer dinheiro mas que não ia muito adiante. Responsável por me dar meu primeiro computador 486 dx, de Com um 16 cores e um mouse que não funcionava no qual com a ajuda de um Guru chamado Gelson fez o teclado virar um mouse pelas setas do teclado numérico.
Ahh só para saberem Gelson é meu tio físico e também da área de tecnologia, lembro dele me mostrando como clicar em um botão e fazer uma imagem de um foguete andar na tela a alguns bons anos em VB6(Visual Basic) este mesmo que instalou a primeira versão do Front-Page naquele 486 e que em 2001 conversamos e eu disse que queria fazer sites, como aprendi?


  1.  Ente em um site;
  2.  Clique com o direito do mouse e exiba o código fonte;
  3.  Copie o código e cole no seu editor de html;
  4.  Abra o arquivo no navegador;
  5.  Edite o código copiado e veja o que acontece;

Foi o roteiro que me foi passado e que funcionou. Mas não é só isso.


Empreender e quem é empreendedor sabe, é deixar muitas coisas de lado, dizer não para gastos, passeios roupas da moda, lançamentos de jogos, festas …

Mas e a resiliência?

Bom pessoal do meu ponto de vista a resiliência é um exercício e que precisa de algum esforço de sua parte. Tudo o que resumi aqui e é sério não contei muita coisa para não virar um livro. Procure na sua vida coisas que te inspiram e que te fazem seguir em frente, isso te da força para levantar e seguir. Como já dizia nosso amigo Alfred Thaddeus Crane Pennyworth

Para que caímos Sr. Wayne? … Para aprendermos a nos levantar.

Hoje estou tentando levantar novamente minha empresa e sei que em breve voltamos ao trilho. E focando no desenvolvimento de aplicativos nativos iOS.
Se você leu até aqui obrigado e te desejo muita força. Pretendo trazer um conteúdo legal aqui para quem é desenvolvedor ou não.

"Não desista de seus sonhos pois sonhar é um grande passo para o futuro."
- Michel Anderson Lütz Teixeira


Minha Inspiração

Essa é minha inspiração (Eu, Simba e minha Noiva Karen)

Desenvolvido por Michel Lütz