sexta-feira, 15 de janeiro de 2016

Como setar o img src com CSS?

Opa :)

Eu não queria colocar o src da minha logo em todos os lugares que iam utilizar a logo, então ao invés de fazer isso:

  <img class="img/minha-logo.png" />

Eu fiz isso:

  <img class="minha-logo" />

  .minha-logo {
      content: url("img/minha-logo.png");
  }

Pronto, está "componentizado" :D

Abraço!
Adriano Schmidt

domingo, 10 de janeiro de 2016

Como mockar o document com Jasmine?

Oi :)

Eu tinha no meu código AngularJs (Ionic) o seguinte trecho de código:
document.getElementById("canvasId").getContext("2d")

Quando eu fui rodar o meu teste com Jasmine obtive o erro:
User Controller
    ? when the user creates the product
        TypeError: 'null' is not an object (evaluating 'document.getElementById('canvasId').getContext')
            at C:/Dropbox/workspaces/ws-ionic/my-app/www/js/user/userCtrl.js:9
            at C:/Dropbox/workspaces/ws-ionic/my-app/www/lib/angular/angular.js:11659
            at C:/Dropbox/workspaces/ws-ionic/my-app/www/lib/angular/angular.js:11745

Para resolver isso eu tinha que fazer um mock da variável document.

Para isso, bastou adicionar as duas linhas abaixo no beforeEach do meu teste (ou em qualquer lugar do teste antes de chegar nas linhas que geraram o erro):
$document = angular.element(document);
$document.find('body').append('<canvas id="bar"></canvas>');

É isso aí, abraço!!
Adriano Schmidt

quinta-feira, 7 de janeiro de 2016

Como converter e formatar datas em Angular?

Faaala :D

Se você tem a data, mas ela está como String, você precisa primeiro transformá-la numa data:

var myDate = new Date(myStringDate);

Depois, é só formatar como quiser:

var formattedDate = $filter('date')(myDate, 'dd/MM/yyyy');

Veja que usamos o $filter, então você deve ter ele acessível :)

Abraço!!
Adriano Schmidt

quinta-feira, 3 de dezembro de 2015

Lista de imagens em Ionic

Faaala galera,

Tô trabalhando em projeto com Ionic para desenvolver uma app mobile híbrida e precisei exibir uma lista de imagens colocando 4 imagens por linhas...

Segue abaixo o código:

    <div ng-repeat="myObject in myList">
        <div class="row" ng-if="$index % 4 === 0">
            <div class="col col-25" ng-repeat="obj in [myList[$index], myList[$index + 1], myList[$index + 2], myList[$index + 3]]">
                 <img ng-src="{{obj.imgSrc}}" style="width: 100%;" />
            </div>
        </div>
    </div>

Para fazer isso me baseei nesse exemplo:

   <div ng-repeat="number in numbers"> 
        <div class="row" ng-if="$even">
            <div class="col col-50" ng-repeat="num in [numbers[$index],numbers[$index + 1]]">
                {{num}}
            </div>
        </div>
    </div>

Fonte: http://stackoverflow.com/questions/26688086/create-row-every-after-2-item-in-angular-ng-repeat-ionic-grid

Abraço!
Adriano Schmidt

quarta-feira, 4 de novembro de 2015

Instalar postgresql no ubuntu

Para instalar o postgresql no ubuntu vamos instalar também o pgadmin (cliente e gerenciador do postgres).

O pgadmin vamos instalar via interface gráfica:
- Procure por ubuntu software center na pesquisa do ubuntu
- Procure por pgadmin e o instale

Agora vá em um terminal e digite o comando abaixo para instalar o postgres
sudo apt-get install postgresql

Depois digite o comando abaixo para acessar o postgres que foi instalado utilizando o usuario default
sudo -u postgres psql

Depois altere a senha do usuário default:
ALTER USER postgres PASSWORD 'postgres';

Aperte Ctrl+D para sair do terminal psql

Agora volte no pgadmin, adicione uma nova conexão com localhost 5432 user postgres senha postgres

Pronto :D

Abraço!
Adriano Schmidt

Error: pg_config executable not found

Peguei um projeto com backend em phyton... e quando rodei o comando "pip install" deu o erro:

Collecting psycopg2 (from django-toolbelt==0.0.1->-r requirements.txt (line 7))
  Downloading psycopg2-2.6.1.tar.gz (371kB)
    100% |################################| 372kB 652kB/s
    Complete output from command python setup.py egg_info:
    running egg_info
    creating pip-egg-info\psycopg2.egg-info
    writing pip-egg-info\psycopg2.egg-info\PKG-INFO
    writing top-level names to pip-egg-info\psycopg2.egg-info\top_level.txt
    writing dependency_links to pip-egg-info\psycopg2.egg-info\dependency_links.txt
    writing manifest file 'pip-egg-info\psycopg2.egg-info\SOURCES.txt'
    warning: manifest_maker: standard file '-c' not found

    Error: pg_config executable not found.

    Please add the directory containing pg_config to the PATH
    or specify the full executable path with the option:

        python setup.py build_ext --pg-config /path/to/pg_config build ...

    or with the pg_config option in 'setup.cfg'.

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\Adriano\AppData\Local\Temp\pip-build-ihjedt2y\psycopg2

Eu já tinha o PostgreSQL instalado, caso você não tenha, instale-o.
Depois adicione no PATH (variável de ambiente) a pasta bin que fica dentro da pasta de instalação do PostgreSQL

Pronto, rode de novo o comando e funcionará :)

quarta-feira, 21 de outubro de 2015

Como pegar a localização atual no Android?

Hoje precisei fazer uma app que usava a localização atual, é muito simples!

O projeto inteiro está aqui: https://github.com/adrianoschmidt/android-location-sample

Mas o segredo está nesta classe: MainActivity.java

Basicamente você tem q seguir esses 6 passos:

1) Sua Activity deve implementar as classes GoogleApiClient.ConnectionCallbacks e GoogleApiClient.OnConnectionFailedListener

    public class MainActivity extends Activity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

2) Criar um atributo do tipo GoogleApiClient

    private GoogleApiClient googleApiClient;

3) No onCreate ou na chamada de um botão você deve verificar se está tudo certo com a API que pega a localização e se estiver construir a API e se conectar nela.

        if (this.checkIfGooglePlayServicesAreAvailable()) {
            this.buildGoogleApiClient();
            this.mGoogleApiClient.connect();
        }

Verificando:

    private boolean checkIfGooglePlayServicesAreAvailable() {
        int errorCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
        if (errorCode != ConnectionResult.SUCCESS) {
            System.out.println("GooglePlayServices errorCode: " + errorCode);
            GooglePlayServicesUtil.getErrorDialog(errorCode, this, 0).show();
            return false;
        }
        return true;
    }


4) Implementar o método onConnected e pegar a localicação (aqui no exemplo seto em dois TextViews que tenho na minha tela)

    @Override
    public void onConnected(Bundle bundle) {
        TextView textViewLatitude = (TextView) findViewById(R.id.textViewLatitude);
        TextView textViewLongitude = (TextView) findViewById(R.id.textViewLongitude);

        Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
        if (mLastLocation != null) {
            textViewLatitude.setText("Lat: " + String.valueOf(mLastLocation.getLatitude()));
            textViewLongitude.setText("Lng: " + String.valueOf(mLastLocation.getLongitude()));
        }
    }

5) Implementar os métodos de suspensão e de falha:

    @Override
    public void onConnectionSuspended(int i) {
    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
    }

6) Solicitar a permissão no manifest

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

Basicamente é isso, qualquer coisa baixe o projeto no github ou comenta aqui no post.

Abraço!
Adriano Schmidt

quinta-feira, 15 de outubro de 2015

count com distinct

Opa..

Se eu faço uma query com distinct:

SELECT distinct o FROM tabela1 o JOIN tabela2

Quando eu faço count dela não vai bater:

SELECT distinct count (o) FROM tabela1 o JOIN tabela2

Pra resolver posso fazer assim:

SELECT count (distinct o) FROM tabela1 o JOIN tabela2

Obrigado ao meu chará Adriano de Souza pela dica!

Abraço!
Adriano Schmidt

Atalhos IntelliJ

Opa :)

Eu uso o Eclipse desde sempre... então quando fui usar o IntelliJ IDEA para desenvolver para Android (Android Studio) eu me perdia nos atalhos... então fiz essa tabelinha com os principais atalhos para não me perder :D

O quê 
Eclipse 
IntelliJ 
Deleta a linha 
Ctrl+D 
Ctrl+Y 
Procura por arquivo 
Ctrl+shift+R 
Ctrl+shift+N 
Troca linha de lugar 
Shift+Up/Down 
Alt+shift+Up/Down 
Duplica a linha 
Ctrl+shift+Down 
Ctrl+D 
Navegar entre abas 
Ctrl+PgUp/PgDn 
Alt+Left/Right 
Organizeimports 
Ctrl+Shift+O 
Ctrl+alt+O 
Format 
Ctrl+sfhit+F 
Ctrl+alt+L 

Tem algum atalho que você acha que devia estar nessa lista? Comenta aí :)

Abraço!!
Adriano Schmidt

segunda-feira, 12 de outubro de 2015

Executar comandos linux no Android

Fala galera, precisei executar comandos linux pela minha app Android, para isso usei o código abaixo.

Troque o "date" que é o comando para pegar a data da máquina pelo comando que você quer executar.

No final deste exemplo, peguei o valor retornado e o mostrei em um TextView.

        try {
            String commandLine = "date";
            Process process = Runtime.getRuntime().exec(commandLine);
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String value = bufferedReader.readLine();

            TextView dateTextView = (TextView) findViewById(R.id.text_info_line_6);
            dateTextView.setText(value);
        } catch (IOException e) {
            e.printStackTrace();
        }

No GitHub: https://gist.github.com/adrianoschmidt/8c83f972c20358a098a4

Caso você não queira fazer isso programaticamente pode usar o ADB Shell https://developer.android.com/tools/help/shell.html
É bem simples, basta acessar o terminal e ir até a pasta plataform-tools dentro da pasta do SDK do Android "cd <sdk_folder>\platform-tools"
Digite "adb devices" e tendo um dispositivo na lista basta digitar "adb shell" e você já pode digitar os comandos linux.

Vaaleu!
Adriano Schmidt