terça-feira, 9 de janeiro de 2024

Dica de livro sobre compiladores

Recentemente, encontrei um livro muito bom (para o nível de graduação) sobre compiladores que tem um ótimo diferencial: cópias são gratuitas para uso pessoal e não comercial. O título é:

"Basics of Compiler Design - Anniversary edition"

De Torben Ægidius Mogensen, que é professor no Departamento de Ciência da Computação da Universidade de Copenhague, na Dinamarca. Esta edição foi publicada pelo próprio autor em 2010.

O livro pode ser encontrado (e baixado) no link seguinte:

http://hjemmesider.diku.dk/~torbenm/Basics/index.html

É importante notar que tal texto serviu como base para uma obra mais recente chamada: "Introduction to Compiler Design", que foi publicada pela editora Springer e está disponível para aquisição em:

https://link.springer.com/book/10.1007/978-3-319-66966-3

domingo, 5 de novembro de 2023

Projetos

Os projetos são as sementes da mudança,
Que germinam em nossos corações
E crescem em nossas mãos.

Com eles nós conseguimos
Transformar ideias em realidade,
E melhorar o mundo ao nosso redor.

Nos permitem
Sonhar e criar,
Inovar e colaborar,
Construir um futuro melhor.

Projetos são como luz na escuridão,
Nos guiam nos árduos caminhos,
E ao mesmo tempo nos desafiam
A crescer e nos tornarmos melhores.

Com eles temos esperança,
E acreditando que é possível,
Com trabalho e dedicação,
Conquistamos o impossível.

domingo, 19 de fevereiro de 2023

Pontos de corte nos principais cursos de tecnologia e engenharia da UFBA em 2023

A Universidade Federal da Bahia (UFBA) está selecionando discentes para os cursos de graduação com início no ano atual, por meio Sistema de Seleção Unificada (SISU).

Fiquei curioso em analisar como anda a procura por cursos nas áreas de engenharia e tecnologia. Para isso, selecionei algumas das principais áreas profissionais: engenharias, geociências e informática, com seus respectivos cursos de bacharelado, e observei a nota de corte para a modalidade de seleção em ampla concorrência.

Como é apenas uma análise superficial, e para simplificar o modelo, não considerei ainda as outras categorias de seleção no SISU e nem a seleção que é feita com os egressos dos Bacharelados Interdisciplinares.

Segue uma tabela, com dados extraídos de ingresso.ufba.br:

Nome do curso Vagas em ampla concorrência Nota de corte
CIÊNCIA DA COMPUTAÇÃO 18 749,69
ENGENHARIA QUÍMICA 18 743,00
ENGENHARIA ELÉTRICA 18 740,61
ENGENHARIA DE COMPUTAÇÃO 18 739,43
ENGENHARIA MECÂNICA 18 723,79
SISTEMAS DE INFORMAÇÃO 18 716,41
ENGENHARIA CIVIL 36 710,87
ENGENHARIA DE PRODUÇÃO 18 701,76
ENGENHARIA DE CONTROLE E AUTOMAÇÃO DE PROCESSOS 18 699,81
ENGENHARIA SANITÁRIA E AMBIENTAL 18 673,67
OCEANOGRAFIA 12 667,29
ABI - ENGENHARIA DE MINAS 20 655,09
GEOLOGIA 20 646,09
GEOFÍSICA 12 638,88
ENGENHARIA DE AGRIMENSURA E CARTOGRÁFICA 18 636,89

Existem cursos que estão sobrepostos em mais de uma categoria, como exemplo, engenharia de computação, e de certo modo geologia. Contudo, fica evidente que a busca por cursos na área de informática e nas engenharias que têm como foco atuação na indústria de transformação segue sendo alta.

segunda-feira, 23 de janeiro de 2023

O Papel de um Líder na Motivação de sua Equipe

Autor: Tiago Matos Santos


Existe, já há um certo tempo na recente história da administração, um movimento de mudança no paradigma de gerenciamento de equipes. Evoluindo, assim por dizer, de um enfoque autocrático e engessado em suas estruturas, para um outro, focado mais no lado humano. Isto é, no aspectos psicológicos das pessoas e também nas interações sociais de grupos de pessoas.

Posto que a eficiência, o desempenho, e o bom funcionamento das equipes e das organizações depende da forma como se comportam seus indivíduos constituintes, e mais internamente, de seus sentimentos, o desenvolvimento da motivação se configura como um dos fatores cruciais a serem discutidos quando se trata de liderança, pois, a partir disto, é possível levar o ser humano a determinados comportamentos que possibilitam o alcance de resultados positivos.

Segundo a Escola de Relações Humanas, por meio de estímulos, fazem-se surgir necessidades nas pessoas. Tais necessidades as levam a estados de tensão que acabam por conduzi-las a comportamentos que objetivem sua satisfação. Caso a satisfação seja atingida, há uma volta ao estado inicial que é o de equilíbrio. Contudo, caso obstáculos venham a impedir que isto aconteça, é possível que prevaleça o sentimento de frustração.

O sentimento de satisfação de necessidades dos indivíduos se reflete, ainda segundo a Escola de Relações Humanas, no clima organizacional, que pode ser favorável ou não, e no seu moral, que pode ser mais alto ou mais baixo. O moral, por exemplo, pode acompanhar de forma direta as atitudes das pessoas. Se elevado, tem como alguns resultados: mais otimismo, cooperação e aceitação de objetivos. Se por outro lado, o moral for baixo, tende-se a resultados opostos: pessimismo, dispersão, má vontade e até agressividade.

A liderança é necessária e essencial na administração da organização humana. Líderes são os que, através de sua influência, conduzem as pessoas ao alcance de objetivos específicos, e são vistos por essas pessoas como um meio de atenuar incertezas e, em última instância, levá-las à satisfação de suas necessidades humanas. Sendo assim, líderes são figuras centrais no estímulo das atividades do grupo, e nesse ponto a motivação é um dos ingredientes que serão utilizados para focar esforços, dando coesão no processo de atingir os objetivos estabelecidos pela organização.

Existe uma certa variedade nas características do líder e seus estilos de liderança. Enquanto há um certo descredito quanto a influência de características de personalidade do líder, há evidências contudo que suportam a ideia de que os diferentes estilos de liderança implicam em diferentes resultados. E, além disso, cada estilo, seja mais autocrático, democrático, ou liberal, tem um apelo maior em diferentes situações.

Em suma, o líder deve ter a sensibilidade e saber adaptar-se aos diferentes contextos que são apresentados. Deve comunicar-se efetivamente e conhecer o sentimento de seus subordinados. Assim, terá meios de poder usar sua influência para incentivar e explorar os aspectos humanos que levam a comportamentos congruentes com objetivos desejados.

domingo, 16 de outubro de 2016

Gramática não ambígua para expressões

Aqui está uma gramática não ambígua para expressões aritméticas e/ou lógicas.
Os operadores foram divididos conforme sua precedência, isto é,
precedência de op_prec_5 > op_prec_4 > ... > op_prec_1 > op_prec_0.

Estão inclusas algumas operações usuais:

op_prec_0 : OR

op_prec_1 : AND


op_prec_2 : MENOR_QUE

          | MENOR_OU_IGUAL
          | MAIOR_QUE
          | MAIOR_OU_IGUAL
          | IGUAL
          | NAO_IGUAL

op_prec_3 : MAIS

          | MENOS

op_prec_4 : VEZES

          | DIVISAO

op_prec_5 : NOT

          | MENOS


exp   : exp op_prec_0 exp1
      | exp1

exp1  : exp1 op_prec_1 exp2

      | exp2

exp2  : exp2 op_prec_2 exp3

      | exp3

exp3  : exp3 op_prec_3 exp4

      | exp4

exp4  : exp4 op_prec_4 exp5

      | exp5

exp5  : op_prec_5 exp5

      | exp_f

exp_f : NUMERO

      | VARIAVEL
      | ABRE_PARENTESE exp FECHA_PARENTESE
      | outra_coisa_qualquer


A última regra de operadores foi usada para os operadores unários:
a negação lógica e o sinal "-" unário.
Eles em geral tem uma maior precedência na maioria das linguagens.

terça-feira, 17 de dezembro de 2013

Plot da Função de Ackermann no Scilab

A função de Ackermann é um exemplo de função computável que não é recursiva primitiva.
Ela cresce muito rapidamente e mesmo pequenos valores de entrada como (4,2) geram números com muitos dígitos.

A função de Ackermann para duas variáveis é definida utilizando recursão:


Tentar calcular num computador para valores maiores que (3,3) pode consumir muitos recursos devido ao excesso de chamadas recursivas.

Eu implementei no Scilab o cálculo de 32 pontos, isso foi o máximo que consegui para preencher uma matriz antes dos problemas de recursão. Por exemplo, para os valores (4,1) ou (5,0) já não é possível o cálculo.
Com os dados obtidos, gerei um gráfico 3d.

Segue o código:

function h = ack(a, b)
  if(a==0) then
    h = b+1
  elseif (b==0) then
    h = ack(a-1, 1)
  else
    tmp = ack(a, b-1)
    h = ack(a-1, tmp)
  end
endfunction

xmax = 3
ymax = 7

x = [0:1:xmax]
y = [0:1:ymax]
z = zeros(xmax, ymax)

for i=0:xmax
  for j=0:ymax
    z(i+1, j+1) = ack(i, j)
  end
end

plot3d(x,y,z, theta = 225, alpha = 1)


A matriz com os dados (m X n):

    1.    2.     3.     4.     5.      6.      7.      8.     
    2.    3.     4.     5.     6.      7.      8.      9.     
    3.    5.     7.     9.     11.     13.     15.     17.    
    5.    13.    29.    61.    125.    253.    509.    1021.  

E seu correspondente gráfico:

Mais perto, vemos os primeiros valores pequenos e depois um "salto":