Quem tem um PC, sabe que praticamente qualquer dispositivo atualmente esta conectado na USB.
Os dispositivos USB são cada vez mais populares, por sua praticidade e simplicidade.
O desenvolvimento e integração no linux, sempre foi um caminho tortuoso, neste post estarei desvendando um pouco de como funciona o desenvolvimento e o caminho a ser traçado.
O projeto libusb, é uma lib desenvolvida em C, para Linux, ela permite utilizar o protocolo USB da versão 1.0 até a 3.1.
CEF é o anacrônico de Chromium Embedded Framework, é uma interface para o Chromium em outras aplicações.
Estaremos tratando aqui, como realizar a instalação deste frame work.
Existem dois caminhos para realizar tal feito, o primeiro e mais complicado é através do procedimento de compilação total, o segundo é através da baixa dos binários já montados.
Compilação total
O Passo a passo que se segue foi tirado em pesquisa da web e consta entre outros links:
Rode o script, em ./code/chromium_git/chromium/src/cef/
cd ./code/chromium_git/chromium/src/cef/
./cef_create_projects.sh
Passo 9
Gera o binario com Debug usando Ninja
cd ~/code/chromium_git/chromium/src
ninja -C out/Debug_GN_x64 cefclient cefsimple ceftests chrome_sandbox
Caso queira versão final, substitua a palavra Debug por Release.
Passo 10
Configure o Linux SUID Caixa de areia, se voce esta usando um kernel antigo, versão inferior a 3.8.
# This environment variable should be set at all times.
export CHROME_DEVEL_SANDBOX=/usr/local/sbin/chrome-devel-sandbox
# This command only needs to be run a single time.
cd ~/code/chromium_git/chromium/src
sudo BUILDTYPE=Debug_GN_x64 ./build/update-linux-sandbox.sh
Passo 11
Rode o cefclient, cefsimple e ou ceftests. Note que o cefclient somente compilará se voce estiver usando um parametro nao root, no passo 7.
cd ~/code/chromium_git/chromium/src
./out/Debug_GN_x64/cefclient
Instalação através de Baixa de Binários
Neste processo não há de fato a compilação, apenas a etapa de linkagem dos binários.
Este é o processo que recomendo, pois além de ser mais rápido é mais fácil e dá menos problema na hora da instalação.
Passo 1 – Baixa dos Binários
O primeiro passo é baixar os binários através do site abaixo:
Nele existem diversas distribuições que podem ser vistas, é importante observar qual será o alvo da sua instalação. Para não baixar a distribuição errada, e eventualmente ter problemas com isso.
Lembrando que não é possível compilar um linux 32 com uma distribuição 64, pois a lib terá problemas na linkagem do mesmo. Então sempre escolha a versão que coincide com seu sistema operacional.
Caso não saiba qual é sua distribuição, recomendo, que use o comando,
uname -a
Conforme figura abaixo, podemos ver que meu linux é 64 bits, desta forma recomenda-se o uso da lib 64 bits.
Mostrando que é 64 bits
Desta forma seguiremos, com o padrão, conforme passado:
Agora baixe o binário, e instale na sua maquina linux descompactado.
Renomeie o arquivo para apenas cef, conforme figura abaixo.
Pasta montada no linux
Apenas para elucidar, estou usando o samba, que permite eu acessar as pastas do linux na minha maquina windows. Isso facilita a edição dos fontes.
Passo 2 – Preparação e Dependências.
Entre no linux pela console, entrando na pasta do cef. Digite o seguinte comando:
cmake .
Preparação para o make, onde irá peparar o makefile
Se não houver problemas de dependências, ele irá estar pronto para linkagem.
Caso dê problema, consulte a documentação, no link abaixo:
Ninja é um pequeno conjunto de ferramentas, desenvolvido por Evan Martin, um empregado da Google. Ninja foi usado em diversas construções de aplicações.
Entre suas vantagens estão a facilidade de montagem de aplicação, a velocidade e rapidez.
Outra vantagem é a capacidade de construir aplicações em multiplos SOs. (Windows, Linux, MacOS).
Iremos apresentar um pequeno projeto construído com NINJA.
O srvOuve é um projeto que visa integrar o CMU sphinx, estaremos construindo uma build com ninja.
Primeiramente precisamos criar o arquivo CMakeLists.txt , que fará a magica acontecer.
Criamos o arquivo conforme aparece no fragmento abaixo:
cmake_minimum_required (VERSION 3.8)
#Define o projeto
project(srvOuve VERSION 1.0)
#Diretorios de Include
include_directories( "/usr/local/include/pocketsphinx"
"/usr/local/include/sphinxbase"
)
set(CMAKE_CXX_STANDARD 14)
add_executable(srvOuve ouve.cpp)
Agora precisaremos dizer ao sistema para gerar os arquivos do ninja, para tanto chamamos o cmake, conforme a sintaxe abaixo:
$ cmake -G Ninja
Execução na console
Com este passo o cmake criará dois arquivos:
build.ninja – Este arquivo contem as configurações de compilação (build)
O build.ninja conterá as regras de construção da aplicação.
# CMAKE generated file: DO NOT EDIT!
# Generated by "Ninja" Generator, CMake Version 3.10
# This file contains all the build statements describing the
# compilation DAG.
# =============================================================================
# Write statements declared in CMakeLists.txt:
#
# Which is the root file.
# =============================================================================
# =============================================================================
# Project: srvOuve
# Configuration:
# =============================================================================
#############################################
# Minimal version of Ninja required by this file
ninja_required_version = 1.5
# =============================================================================
# Include auxiliary files.
#############################################
# Include rules file.
include rules.ninja
#############################################
# Utility command for rebuild_cache
build CMakeFiles/rebuild_cache.util: CUSTOM_COMMAND
COMMAND = cd /home/maurinsoft/projetos/srvOuve/srv && /usr/bin/cmake -H/home/maurinsoft/projetos/srvOuve/srv -B/home/maurinsoft/projetos/srvOuve/srv
DESC = Running CMake to regenerate build system...
pool = console
restat = 1
build rebuild_cache: phony CMakeFiles/rebuild_cache.util
# =============================================================================
# Object build statements for EXECUTABLE target srvOuve
#############################################
# Order-only phony target for srvOuve
build cmake_object_order_depends_target_srvOuve: phony
build CMakeFiles/srvOuve.dir/ouve.cpp.o: CXX_COMPILER__srvOuve ouve.cpp || cmake_object_order_depends_target_srvOuve
DEP_FILE = CMakeFiles/srvOuve.dir/ouve.cpp.o.d
FLAGS = -std=gnu++14
INCLUDES = -I/usr/local/include/pocketsphinx -I/usr/local/include/sphinxbase
OBJECT_DIR = CMakeFiles/srvOuve.dir
OBJECT_FILE_DIR = CMakeFiles/srvOuve.dir
# =============================================================================
# Link build statements for EXECUTABLE target srvOuve
#############################################
# Link the executable srvOuve
build srvOuve: CXX_EXECUTABLE_LINKER__srvOuve CMakeFiles/srvOuve.dir/ouve.cpp.o
OBJECT_DIR = CMakeFiles/srvOuve.dir
POST_BUILD = :
PRE_LINK = :
TARGET_FILE = srvOuve
TARGET_PDB = srvOuve.dbg
#############################################
# Utility command for edit_cache
build CMakeFiles/edit_cache.util: CUSTOM_COMMAND
COMMAND = cd /home/maurinsoft/projetos/srvOuve/srv && /usr/bin/cmake-gui -H/home/maurinsoft/projetos/srvOuve/srv -B/home/maurinsoft/projetos/srvOuve/srv
DESC = Running CMake cache editor...
pool = console
restat = 1
build edit_cache: phony CMakeFiles/edit_cache.util
# =============================================================================
# Target aliases.
# =============================================================================
# Folder targets.
# =============================================================================
# =============================================================================
# Built-in targets
#############################################
# The main all target.
build all: phony srvOuve
#############################################
# Make the all target the default.
default all
#############################################
# Re-run CMake if any of its inputs changed.
build build.ninja: RERUN_CMAKE | /usr/share/cmake-3.10/Modules/CMakeCInformation.cmake /usr/share/cmake-3.10/Modules/CMakeCXXInformation.cmake /usr/share/cmake-3.10/Modules/CMakeCommonLanguageInclude.cmake /usr/share/cmake-3.10/Modules/CMakeGenericSystem.cmake /usr/share/cmake-3.10/Modules/CMakeLanguageInformation.cmake /usr/share/cmake-3.10/Modules/CMakeSystemSpecificInformation.cmake /usr/share/cmake-3.10/Modules/CMakeSystemSpecificInitialize.cmake /usr/share/cmake-3.10/Modules/Compiler/CMakeCommonCompilerMacros.cmake /usr/share/cmake-3.10/Modules/Compiler/GNU-C.cmake /usr/share/cmake-3.10/Modules/Compiler/GNU-CXX.cmake /usr/share/cmake-3.10/Modules/Compiler/GNU.cmake /usr/share/cmake-3.10/Modules/Platform/Linux-GNU-C.cmake /usr/share/cmake-3.10/Modules/Platform/Linux-GNU-CXX.cmake /usr/share/cmake-3.10/Modules/Platform/Linux-GNU.cmake /usr/share/cmake-3.10/Modules/Platform/Linux.cmake /usr/share/cmake-3.10/Modules/Platform/UnixPaths.cmake CMakeCache.txt CMakeFiles/3.10.2/CMakeCCompiler.cmake CMakeFiles/3.10.2/CMakeCXXCompiler.cmake CMakeFiles/3.10.2/CMakeSystem.cmake CMakeLists.txt
pool = console
#############################################
# A missing CMake input file is not an error.
build /usr/share/cmake-3.10/Modules/CMakeCInformation.cmake /usr/share/cmake-3.10/Modules/CMakeCXXInformation.cmake /usr/share/cmake-3.10/Modules/CMakeCommonLanguageInclude.cmake /usr/share/cmake-3.10/Modules/CMakeGenericSystem.cmake /usr/share/cmake-3.10/Modules/CMakeLanguageInformation.cmake /usr/share/cmake-3.10/Modules/CMakeSystemSpecificInformation.cmake /usr/share/cmake-3.10/Modules/CMakeSystemSpecificInitialize.cmake /usr/share/cmake-3.10/Modules/Compiler/CMakeCommonCompilerMacros.cmake /usr/share/cmake-3.10/Modules/Compiler/GNU-C.cmake /usr/share/cmake-3.10/Modules/Compiler/GNU-CXX.cmake /usr/share/cmake-3.10/Modules/Compiler/GNU.cmake /usr/share/cmake-3.10/Modules/Platform/Linux-GNU-C.cmake /usr/share/cmake-3.10/Modules/Platform/Linux-GNU-CXX.cmake /usr/share/cmake-3.10/Modules/Platform/Linux-GNU.cmake /usr/share/cmake-3.10/Modules/Platform/Linux.cmake /usr/share/cmake-3.10/Modules/Platform/UnixPaths.cmake CMakeCache.txt CMakeFiles/3.10.2/CMakeCCompiler.cmake CMakeFiles/3.10.2/CMakeCXXCompiler.cmake CMakeFiles/3.10.2/CMakeSystem.cmake CMakeLists.txt: phony
#############################################
# Clean all the built files.
build clean: CLEAN
#############################################
# Print all primary targets available.
build help: HELP
O cmake tambem cria o arquivo rules.ninja, responsável pelas regras de compilação.
# CMAKE generated file: DO NOT EDIT!
# Generated by "Ninja" Generator, CMake Version 3.10
# This file contains all the rules used to get the outputs files
# built from the input files.
# It is included in the main 'build.ninja'.
# =============================================================================
# Project: srvOuve
# Configuration:
# =============================================================================
# =============================================================================
#############################################
# Rule for running custom commands.
rule CUSTOM_COMMAND
command = $COMMAND
description = $DESC
#############################################
# Rule for compiling CXX files.
rule CXX_COMPILER__srvOuve
depfile = $DEP_FILE
deps = gcc
command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in
description = Building CXX object $out
#############################################
# Rule for linking CXX executable.
rule CXX_EXECUTABLE_LINKER__srvOuve
command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD
description = Linking CXX executable $TARGET_FILE
restat = $RESTAT
#############################################
# Rule for re-running cmake.
rule RERUN_CMAKE
command = /usr/bin/cmake -H/home/maurinsoft/projetos/srvOuve/srv -B/home/maurinsoft/projetos/srvOuve/srv
description = Re-running CMake...
generator = 1
#############################################
# Rule for cleaning all built files.
rule CLEAN
command = /usr/bin/ninja -t clean
description = Cleaning all built files...
#############################################
# Rule for printing all primary targets available.
rule HELP
command = /usr/bin/ninja -t targets
description = All primary targets available:
Para processar o ninja precisamos fazer uma pequena mudança, alterar as extensões de .c para .cpp, para que o sistema identifique que se trata de compilador C.
Incluindo dependências
Para incluir diretorios para Include, basta incluir a linha
Para reproduzir um audio, utilizamos o comando aplay, porem eu pessoalmente gosto mais do mplayer.
apt install mplayer
Tocador de multimídia
Selecionar mixer
alsamixer é um mixer de audio, que permite ligar e desligar entradas de audio de seu pc.
>alsamixer
aplicação alsamixer
Para capturar o dispositivo de audio, é necessario ir até o dispositivo que deseja capturar.
Então pressionar space (Espaço), desta forma o dispositivo ficara capturado como default.
Dispositivo capturado para gravação.
Nota do autor, alguns dispositivos de som 7.1 tive dificuldades em conseguir capturar, tive que incluir um device usb 2.0, para conseguir capturar o audio.
Sou fã de star trek, aqui no Brasil, Jornada nas Estrelas.
set de filmagem, trabalhado apenas do lado da câmera.
Como podemos ver nesta foto, o set de jornada nas estrelas, demonstra bem, o que as vezes vemos em tecnologia da informação.
O que o cliente vê é sempre o que esta no olhar das câmeras. Um ambiente produzido, perfeito e muitas vezes trabalhado, horas a fio por uma equipe muito competente.
Imagem que a câmera mostra
De fato, esta é a imagem, que o empresário e os vendedores passam para os clientes.
Ambientes perfeitos, sem detalhes.
Mas a verdade esta por traz dos camarins, nos sets de filmagem.
Ator Paulo Silvino, eterno Severino.
As vezes para fazer a porta abrir sozinha na filmagem, existe o nosso amigo Severino, que fica no set de filmagem, abrindo e fechando a porta com a mão. Pois algo deu errado no equipamento, e de fato, o cliente não pode esperar, por isso precisou dele, de forma rápida e pontual.
Muitas vezes vi, empresas de grande monta, apresentarem sua imagem ao grande publico, como a demonstrada no set. Tudo perfeito, funcionando. Mas de fato é trabalho duro de tantos Severinos da TI, que atuam exaustivamente para garantir que o publico tenha também essa visão.
Até ai, tudo bem! O cliente assim como o grande publico, realmente precisa ver o lado belo da arte da tecnologia, e pouco importa se iremos mostrar as agruras e problemas dessa maratona para chegar a esse estado de arte.
Mas o que vejo, as vezes com certo espanto, é gerentes, diretores, vendedores, compartilhar o olhar do grande publico, as vezes, eles tambem se perdem na grande arte, e começam a acreditar na magia que vendem.
Acredito que um bom gerente ou diretor, é como um bom produtor de filme, vende o sonho da tecnologia, mas trabalha ao fim, sabendo que o palco precisa de tantos Severinos da TI, que fazem o publico sonhar com a tecnologia, que de fato é nossa, e aos olhos dos clientes acontece como mágica.
Aos tantos Severinos da TI, parabéns vcs são os que realmente fazem a magica acontecer.