1.  

    Rails Girls: # RailsGirls Summer of Code: Student application now open! →

    railsgirls:

    We’re extremely excited to announce that the RailsGirls Summer of Code student application is now open!

    The Berlin team, especially the incredible Rails Girls Hero Sven from Travis CI have been working unimaginably hard to bring this to you. Big ups!!

    image

    RailsGirls Summer of Code is a…

    Source: railsgirls

  2.   ?

    Full image link →

    ?

  3.  
    If you are a professional writer – i.e., if someone else is getting paid to worry about how your words are formatted and printed – Emacs outshines all other editing software in approximately the same way that the noonday sun does the stars. It is not just bigger and brighter; it simply makes everything else vanish.
    Neal Stephenson - In the Beginning … Was the Command Line
  4.  

    O Processo de Compilação

    Muitas vezes na compilação de um código fonte pensamos que existe somente um processo de uma única etapa, mas na verdade o processo se dividem em quatro estágios realizados por componentes diferentes:

    • Pre-processador
    • Compilador
    • Montador
    • Ligador

    A figura abaixo exemplifica as etapas do processo de compilação e os arquivos “auxiliares” que são gerados apos a execução de cada estagio. A seguir cada processo será explicado.


    Pré-processamento:

    No estagio de pré-processamento as diretrizes #define, #if, #include e etc são resolvidas.

    Compilação:

    Neste estagio o compilador executa a “tradução” ou a compilação propriamente dita dos códigos fontes em linguagem de montagem que serão utilizados na próxima etapa do processo.

    Montagem:

    Ao final o estagio de montagem um arquivo objeto .o é gerado com o montador paradão normalmente o as.

    Ligação:

    No estagio final o ligador faz a junção entre todos os códigos objetos .o, colocando os códigos objetos no seus locais adequados no executável. O ligador padrão na maiorias dos sistemas é o ld.

    No próximo post pretendo exemplificar cada etapa do processo de compilação utilizando o GNU GCC, uma ferramente essencial na vida de todos nos, mesmo que indiretamente.

  5.  

    Linguagem C++ Conselhos 5˚

    Ponteiros, Vetores e Estruturas

    [1] Evite a aritmética de ponteiros que não são triviais; § 5.3.

    [2] Tome cuidado para não escrever além dos limites de um vetor; § 5.3.1.

    [3] Use 0, em vez de NULL; § 5.1.1.

    [4] Use vector e valarray ao invés de vetores (C-style); § 5.3.1.

    [5] Use strings ao invés de vetor de char terminado com zero; § 5.3.

    [6] Minimizar o uso de argumentos de referência em tipos primitivos; § 5.5.

    [7] Evite void* exceto em código de baixo nível; § 5.6.

    [8] Evite literais não triviais (“números mágicos”) no código. Em vez disso, defina e use constantes simbólicas; § 4.8, § 5.4.   

  6.  

    Linguagem C++ Conselhos 4˚

    Capitulo 4 Tipos e Declarações

    [1] Mantenha escopos pequenos; § 4.9.4. 

    [2] Não use o mesmo nome em um escopo que é delimitador por um outro escopo ; § 4.9.4. 

    [3] Declare um nome (só) por declaração; § 4.9.2. 

    [4] Mantenha nomes comuns e locais curtos, e manter os nomes incomuns e não-locais maiores; § 4.9.3. 

    [5] Evite nomes similares; § 4.9.3. 

    [6] Manter um estilo de nomenclatura consistente; § 4.9.3. 

    [7] Escolha nomes para refletir cuidadosamente significado ao invés de implementação; § 4.9.3.

    [8] Use um typedef para definir um nome significativo para um tipo de dados nos casos em que o tipo de dado é usado para representar um valor pode mudar; § 4.9.7.

    [9] Use typedefs para definir sinônimos para os tipos; use enumerações e classes para definir novos tipos; § 4.9.7.

    [10] Lembre-se que cada declaração deve especificar um tipo (não há int “implícito”); § 4.9.1.

    [11] Evite suposições desnecessárias sobre o valor numérico de caracteres; 4.3.1 §, § C.6.2.1.

    [12] Evite suposições desnecessárias sobre o tamanho de inteiros; § 4.6.

    [13] Evite suposições desnecessárias sobre a variedade de tipos de ponto flutuante; § 4.6.

    [14] Prefira um int normal ao invez de um short int ou um long int; § 4.6.

    [15] Prefira um double sobre uma float ou um long double; § 4.5.

    [16] Prefira char sobre signed char e unsigned char; § C.3.4.

    [17] Evite fazer suposições desnecessárias sobre os tamanhos dos objetos; § 4.6.

    [18] Evite a aritmética sem sinal; § 4.4.

    [19] Veja conversões signed para unsigned e unsigned to signed com suspeita; § C.6.2.6. 

    [20] Ver conversões de ponto flutuante para inteiro com suspeita; § C.6.2.6. 

    [21] Ver as conversões para um tipo menor, como int para char, com suspeita; § C.6.2.6.

  7.  

    Linguagem C++ Conselhos 3˚

    Capitulo 3 Uma volta na biblioteca padrão

    [1] Não reinvente a roda; use bibliotecas (libraries).

    [2] Não acredite em mágica; entenda o que as bibliotecas fazem, como eles fazem isso, e a que custo elas fazem isso.

    [3] Quando você tem uma escolha, prefira a bibliotecas padrão (standard library) a outras bibliotecas.

    [4] Não pense que a biblioteca padrão é ideal para tudo.

    [5] Lembre-se de por #include nos cabeçalhos para as incluir bibliotecas ou arquivos que você utiliza; § 3.3.

    [6] Lembre-se que as facilidades da biblioteca padrão são definidos no namespace std; § 3.3.

    [7] Use string, em vez de char *; § 3.5, § 3.6.

    [8] Em caso de dúvida use um verificador de intervalos em vector (tais como em Vec); § 3.7.2.

    [9] De preferencia use vector<T>, lista<T>, e map<key,value> a T[]; § 3.7.1, § 3.7.3, § 3.7.4.

    [10] Ao adicionar elementos para um recipiente (container), use push_back() ou back_inserter(); § 3.7.3, § 3.8.

    [11] Use push_back() em um vetor ao invés de realloc() em um array; § 3.8.

    [12] Capturar exceções comuns em main(); § 3.7.2.

  8.  
    LISP and Java programmers take garbage collection for granted. With the Boehm-Demers-Weiser library, you easily can use it in C and C++ projects, too
    – A biblioteca BDWGC ou libgc é um coletor de lixo (garbage collector) para c/c++. Por enquanto estou estudando e dando uma olhada geral. Em breve pretendo escrever um post sobre como utilizar essa lib.
  9.  

    Linguagem C++ Conselhos 2˚

    [1] Não entre em pânico! Tudo ficará claro no tempo; § 2.1.
    [2] Você não tem que saber todos os detalhes do C + + para escrever bons programas, § 1.7.
    [3] Foco em técnicas de programação, e não em recursos de linguagem; § 2.1.

  10.  

    Linguagem C++ Conselhos 1˚

    Aqui está um conjunto de “regras” que você pode considerar enquanto aprende C++. Quando você obter mais proficiência poderá evoluir em algo adequado para seu tipo de aplicações e seu estilo de programação. Os conselhos são deliberadamente muito simples, para que eles careçam de detalhes. Não leve-os muito literalmente. Para escrever um bom programa você precisa ter inteligência, gosto e paciência. Você não vai acertar na primeira vez. Experimente! 

     [1] Quando você programa, você cria uma representação concreta das idéias em sua solução para algum problema. Deixe a estrutura do programa refletir essas idéias tão diretamente quanto possível: 

    • [A] Se você pode pensar que “isso” é uma idéia separada, crie uma classe (class).
    • [B] Se você pode pensar que “isso” é uma entidade separada, crie um objeto de alguma classe.
    • [C] Se duas classes possuem uma interface comum, crie essa interface (interface) como uma classe abstrata (abstract).
    • [D] Se as implementações de duas classes têm algo significativo em comum, faça com que classe comum seja uma classe uma base. 
    • [E] Se uma classe é um recipiente (contêiner) de objetos, crie um modelo (template).
    • [F] Se uma função implementa um algoritmo para um recipiente, crie uma função de modelo implementando o algoritmo para uma família de recipientes.
    • [G] Se um conjunto de classes, modelos, etc, são logicamente relacionados, os coloque em um namespace comum.

    [2] Quando você define uma classe que não implementa qualquer uma entidade matemática como uma matriz ou um número complexo ou um tipo de baixo nível, como uma lista ligada:

    • [A] Não use dados globais (use membros).
    • [B] Não use as funções globais.
    • [C] Não use membros de dados públicos.
    • [D] Não utilize friends, exceto para evitar [a] ou [c]. 
    • [E] Não coloque um “tipo de campo” em uma classe; use funções virtuais. 
    • [F] Não use funções inline, exceto como uma otimização significativa.

    Referencias

    Stroustrup, Bjarne. The C++ Programming Language. Third Edition. pg 16-17. 1997.