segunda-feira, janeiro 04, 2016

MSSQL Queries Productivity

Seguem em baixo um conjunto de 15 queries bastante uteis:


  • Hostname, edition and version number SQL Server
SELECT SERVERPROPERTY('MachineName') as Host, SERVERPROPERTY('InstanceName') as Instance, @@VERSION as "Version Number", SERVERPROPERTY('Edition') as Edition, SERVERPROPERTY('ProductLevel') as ProductLevel, Case SERVERPROPERTY('IsClustered') when 1 then 'CLUSTERED' else 'STAND ALONE' end as "Server Type"
  •  Número de tabelas numa base de dados
SELECT COUNT(OBJ.ID) as "Table Count" FROM SYSOBJECTS OBJ WHERE XTYPE='U'
  •  Número de Stored Procedures numa base de dados
SELECT COUNT(OBJ.ID) as "SP Count" FROM SYSOBJECTS OBJ WHERE XTYPE='P'
  • Lista de tabela com contador de registos
SELECT OBJ.NAME as "Table Name", MAX(SI.ROWS) as "Row Count" FROM SYSOBJECTS OBJ, SYSINDEXES SI WHERE OBJ.XTYPE = 'U' AND SI.ID = OBJECT_ID(OBJ.NAME) GROUP BY OBJ.NAME ORDER BY 2 DESC
  • Mostra data de criação e modificação de tabelas
SELECT NAME as "Table Name", CREATE_DATE as "Created Date",
MODIFY_DATE as "Modified Date" FROM SYS.OBJECTS
WHERE TYPE = 'U' --AND NAME LIKE '%sys_%' ORDER BY 3 DESC 
  • Mostra data de criação e mdificação de stored procedures
SELECT NAME as "SP Name", CREATE_DATE as "Created Date",
MODIFY_DATE as "Modified Date" FROM SYS.OBJECTS
WHERE TYPE = 'P' --AND NAME LIKE '%delete%' ORDER BY 3 DESC
  • Procura lista de tabelas com determinado nome de coluna
SELECT s.[NAME] 'Schema', t.[NAME] 'Table', c.[NAME] 'Column', d.[NAME] 'Data Type', d.[MAX_LENGTH] 'Max Length', c.[IS_IDENTITY] 'Is Id',
c.[IS_NULLABLE] 'Is Nullable', t.[MODIFY_DATE] 'Date Modified', t.[CREATE_DATE] 'Date created' FROM SYS.SCHEMAS s INNER JOIN SYS.TABLES t ON s.SCHEMA_ID= t.SCHEMA_ID INNER JOIN SYS.COLUMNS c ON t.OBJECT_ID= c.OBJECT_ID INNER JOIN SYS.TYPES d ON c.USER_TYPE_ID= d.USER_TYPE_ID WHERE c.NAME like '%backup%
  • Procura uma lista de objectos que contem um determinado texto
SELECT o.NAME FROM SYSCOMMENTS (nolock) AS c INNER JOIN SYSOBJECTS (nolock) AS o ON c.ID = o.id WHERE c.TEXT LIKE '%BACKUP%';
  • Obtém localização fisica da base de dados
SELECT   DB_NAME(DATABASE_ID) as DatabaseName, NAME, TYPE_DESC,
PHYSICAL_NAME FROM SYS.MASTER_FILES
  • Obtém o login com previlegios de administrador
SELECT l.NAME, l.DENYLOGIN, l.ISNTNAME, l.ISNTGROUP, l.ISNTUSER
FROM MASTER.DBO.SYSLOGINS l WHERE l.SYSADMIN = 1 OR l.SECURITYADMIN = 1
  • Obtém o resultado do ultimo backup efetuado à base de dados
SELECT db.NAME, CASE WHEN MAX(b.backup_finish_date) IS NULL THEN 'No Backup' ELSE convert(varchar(100), MAX(b.BACKUP_FINISH_DATE)) END AS last_backup_finish_date FROM SYS.DATABASES db LEFT OUTER JOIN MSDB.DBO.BACKUPSET b ON db.NAME = b.DATABASE_NAME AND b.TYPE = 'D' WHERE db.DATABASE_ID NOT IN (2) GROUP BY db.NAME ORDER BY 2 DESC
  • Obtém a lista de queries com leitura mais intensiva (READS)
SELECT TOP 50 SUBSTRING(QT.TEXT, (QS.STATEMENT_START_OFFSET/2) +1, ((CASE QS.STATEMENT_END_OFFSET WHEN -1 THEN (QT.TEXT) ELSE QS.STATEMENT_END_OFFSET
END - QS.STATEMENT_START_OFFSET)/2)+1), QS.EXECUTION_COUNT,
QS.TOTAL_LOGICAL_READS, QS.TOTAL_ELAPSED_TIME,
QS.LAST_ELAPSED_TIME, QS.MIN_ELAPSED_TIME, QS.MAX_ELAPSED_TIME, QS.LAST_EXECUTION_TIME, QP.QUERY_PLAN
FROM SYS.DM_EXEC_QUERY_STATS QS CROSS APPLY SYS.DM_EXEC_SQL_TEXT(QS.SQL_HANDLE) QT CROSS APPLY SYS.DM_EXEC_QUERY_PLAN(QS.PLAN_HANDLE) QP WHERE QT.ENCRYPTED=0 ORDER BY QS.TOTAL_LOGICAL_READS DESC, QS.TOTAL_ELAPSED_TIME DESC
  • Obtém utilizador atual, processos bloqueados, memória, etc
sp_who2
  • Lista os índices das tabelas
SELECT A.NAME TABLE_NAME, B.NAME INDEX_NAME, D.NAME COLUMN_NAME FROM SYS.TABLES A, SYS.INDEXES B, SYS.INDEX_COLUMNS C, SYS.COLUMNS D WHERE A.OBJECT_ID = B.OBJECT_ID AND B.OBJECT_ID = C.OBJECT_ID AND B.INDEX_ID = C.INDEX_ID AND C.OBJECT_ID = D.OBJECT_ID AND C.COLUMN_ID = D.COLUMN_ID --AND A.NAME LIKE '%BACKUP%';
  • Obtém tamanho da base de dados e do log
WITH FS AS (SELECT DATABASE_ID, TYPE, SIZE * 8.0 / 1024 SIZE
FROM SYS.MASTER_FILES) SELECT NAME, (SELECT SUM(SIZE) FROM FS WHERE TYPE = 0 AND FS.DATABASE_ID = DB.DATABASE_ID) DATAFILESIZEMB, (SELECT SUM(SIZE) FROM FS WHERE TYPE = 1 AND FS.DATABASE_ID = DB.DATABASE_ID) LOGFILESIZEMB FROM SYS.DATABASES DB

Para saber mais consultar;

http://www.infobarrel.com/15_Sql_Server_Queries

domingo, dezembro 27, 2015

Linux Ubuntu 14.04 - Error displaying connection information: No valid active connections found!

O ubuntu permite a gestão de interfaces de rede por linha de comandos e por meio de applets específicos do gestor de janelas (e.g. unity).

No meu caso, o applet "Network Manager" nm-applet  está configurado pelo desktop applet. No entanto o mesmo apresentava problemas com erro na obtenção da configuração da rede.

Isto acontecia porque os ficheiros de configuração não definidos no /etc/network/interfaces mas sim no
/etc/NetworkManager
/etc/NetworkManager/system-connections
Como tinha os interface definidos como ETH0 auto no ficheiro de interfaces em /etc/interfaces, este "Network Manager" applet não geria a rede e não se responsabilizada pelo device.

Verificar o link:
https://bugs.launchpad.net/ubuntu/+source/network-manager-applet/+bug/305606


domingo, outubro 18, 2015

Aceder remotamente ao Ubuntu pelo RDP (3389) do windows

Para aceder remotamente ao desktop do Ubuntu com o remote desktop do windows, deveremos instalar o xrdp.

  • sudo apt-get install xrdp
  • Criar conta para acesso 
  • Criar .xsession na home do utilizador criado anteriormente
Importante:
O Ubuntu 14.04 no ambiente desktop, o RDP do windows não funciona com o window manager que não seja o XFCE4.

Para isso deveremos instalar o xfce4:
  • sudo apt-get install xfce4
De seguida incluir na .xsession do utilizador o seguinte:
  • xfce4-session
Outro aspeto importante é a necessidade de abrir a porta na firewall do Ubuntu UFW ou no GUI GUFW.

sábado, outubro 17, 2015

Apache2 + Webserver + Owncloud armazenamento

Criar uma forma de acesso aos dados multidispositivo e multiplataforma com a solução Ubuntu+Apache2+Owncloud.

Pré-requisitos:

Uma máquina com Ubuntu 14 LTS;
Espaço em disco
Uma conta DDNS
Uma conta Cloudflare


Instalar os seguintes módulos:

  • php5 (>= 5.4)
  • PHP module ctype
  • PHP module dom
  • PHP module GD
  • PHP module iconv
  • PHP module JSON
  • PHP module libxml
  • PHP module mb multibyte
  • PHP module posix
  • PHP module SimpleXML
  • PHP module XMLWriter
  • PHP module zip
  • PHP module zlib

apt-get install apache2 mariadb-server libapache2-mod-php5
apt-get install php5-gd php5-json php5-mysql php5-curl
apt-get install php5-intl php5-mcrypt php5-imagick
Seguir instruções em https://doc.owncloud.org/server/8.1/admin_manual/installation/source_installation.html
O serviço Cloudflare permite protege e acelera o website.
Defenir em cloudflare a representatividade do dominio, parametrizando os NS do dominio com os da cloudflare.
De seguida criar CNAME que aponta para DDNS. 
Definir em SSL-AVAILABLE do apache2 o servidor web para https.
parametrizar em cloudflare o crypt para apontar para o endereço correto.

quarta-feira, junho 10, 2015

Setup Eclipse IDE with Android ADT+SDK

Para começar a desenvolver aplicações android, existem hoje diversas soluções. Aqui vou mostrar como preparar o ambiente de desenvolvimento Android com o IDE Eclipse (Luna).

Para iniciar deveremos preparar o ambiente de trabalho com as seguintes ferramentas:

  1. Elipse IDE
    1. Versão que escolhi foi a Eclipse IDE for Java Developers
  2. Android SDK
  3. Plugin ADT (Android Development Tools)
Para se proceder à instalação do Eclipse IDE,deveremos ir à página oficial e efetuar o download do IDE.
A instalação em ambiente Windows não é automática. Deveremos descomprimir o ficeiro numa localização da nossa escolha. Ter o cuidado de efetuar o download na versão 32/64 conforme a versão do nosso sistema operativo.

Ter em atenção que deveremos instalar o SDK do Android.
  • Visitar a página de download do SDK Android (http://developer.android.com/sdk/index.html)
  • Ir até ao fundo da página e carregar em "Download the SDK Tools";
Picture of Install the Android SDK

Após instalação, abrir o aplicativo SDKManager.exe e instalar a versão do Android e as ferramentas extra.
Picture of Install Android Version and Extras for SDK

Para a definição do Eclipse, efetuar os seguintes passos:
Após encontrarmos o executável do eclipse, podemos criar um atalho no nosso ambiente de trabalho.

Para que o ambiente IDE do eclipse esteja pronto para trabalharmos com o framework do Android, deveremos efetuar alguns passos, nomeadamente a atualização do mesmo.

Picture of Add ADT Plugin Repository 
O plugin ADT foi feito especificamente para o Eclipse para aumentar a produtividade e o nível de integração com o ambiente de desenvolvimento Android.
Para o adicionar deveremos ir ao menu Help->Install new software.
  • Clicar no botão Add...e uma nova janela vai aparecer;
  • Deveremos dar um nome ao repositório (e.g. ADT REPO);
  • Colocar o link http://dl-ssl.google.com/android/eclipse/
  • Clicar Ok...;
Após a instalação dos pacotes necessários, devermos reiniciar a aplicação. Ao iniciarmos a aplicação, ir a Window-> Preferences->Android. Verificar se o caminho para o SDK do android está definido.

TroubleShooting

A instalação pode não ter sucesso, nomeadamente no arranque do Eclipse ou na instalação do ADT. Este é um excelente troubleshoot para ter em atenção:

http://www.ashout.com/fix-java-started-returned-exit-code13-eclipse/

sábado, maio 09, 2015

ASP:NET MVC Programming Model

O MVC é um de três modelos de programação ASP.NET.

  1. Web forms
  2. MVC
  3. Web Pages

MVC é uma framework de desenvolvimento Web usando o padrão de arquitetura MVC (Model-View-Controller).

Este modelo providencia um controlo quase absoluto sobre CSS, HTML e Javascript.
MVC
São definidas 3 camadas lógicas.


  • Business Layer (Model logic);
  • Display layer (View logic);
  • Imput layer (Controller logic);

Model - É a parte da aplicação que trata da lógica dos dados. Os objectos definidos são resposnaveis por carregar e armazenar os dados de uma base de dados.
View - É a parte da aplicação que trata da visualização dos dados. As views são criada muitas vezes do dados carregados do Model.
Controller - É a parte que trata da interacção dos dados com o utilizador. Os controllers lêm dados da view, controlam os inputs e enviam os dados para o Model.

Esta separação MVC pode auxiliar no desenvolvimento de aplicações complexas porque podemos focar-nos em cada um dos aspetos separadamente. Para além disto o desenvolvimento em grupo pode ficar mais simples com elementos a focarem-se na View e outros no Controller.

Application Folders

Uma aplicação WEB típica MVC tem normalmente as seguintes pastas:

Solution

Application information

Properties
References

Application folders

App_Data Folder - Esta pasta existe para serem armazenados os dados da aplicação. (e.g.Dados BD SQL)
Content Folder - Local para armazenar as páginas estáticas tais como ficheiros CSS, icones e imagens.
Controllers Folder - Local que contém as classes controller responsaveis pelo tratamento dos inputs.É obrigatório que cada classe deste género temine em Controller.
Models Folder
Scripts Folder
Views Folder

Configuration files

Global.asax
packages.config
Web.config




sábado, abril 11, 2015

Integração de Google Mobile Ads SDK

Pequeno guia para entender o processo de integração do Google mobile Ads SDK.

O Google Mobile Ads SDK, é utilizado para mostrar um simples banner publicitário em qualquer aplicativo desenvolvido para Android.

Aqui está explicado o processo utilizando o IDE Android Studio, no entanto os mesmos passos podem ser utilizados em diferentes plataformas.

Deveremos em primeiro SDK Manager e efetuar o download do repositório Google (ou update). O principal cmponente que estamos interessados é o Play-services que contem os recursos e o código compilado java para o Google Play services SDK que inclui o Google Mobile Ads SDK.



Configuração Gradle.

Gradle é um sistema de build open source que incorpora um número de características interessantes para developers.

Para continuar, deveremos modificar o ficheiro build.gradle,

...

dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:appcompat-v7:21.0.0'
        compile 'com.google.android.gms:play-services:7.0.0'
    }
...

Modificar o ficheiro Manifest

Qualquer aplicação Android usa um ficheiro chamado de Manifest que informa o sistema Android acerca dele próprio. A informação encontrada neste ficheiro diz respeito a questões de permissões necessárias pela aplicação, as atividades que contem, etc.
xml version="1.0" encoding="utf-8"?>
 xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.android.gms.example.bannerexample" >

    
     android:name="android.permission.INTERNET"/>
     android:name="android.permission.ACCESS_NETWORK_STATE"/>

    
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        
         android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
        
            android:name=".MainActivity"
            android:label="@string/app_name" >
            
                 android:name="android.intent.action.MAIN" />

                 android:name="android.intent.category.LAUNCHER" />
            

       

       

       
android:name="com.google.android.gms.ads.AdActivity"
           
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
           
android:theme="@android:style/Theme.Translucent" />

   


Definir um App Id

Um App id é um identificador unico. Para duas atividades com dois banners, será necessário definir um App Id diferente para cada um deles.

Deveremos incluir uma view da seguinte forma:

 
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_ad_unit_id">
    
Na activity, chamamos o ad da seguinte forma:

package ...
import ...
import ...
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
public class MainActivity extends ActionBarActivity {

    ...

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AdView mAdView = (AdView) findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
    }

    ...
}
Seguir o seguinte link para mais informação:
https://developers.google.com/mobile-ads-sdk/docs/admob/android/quick-start
https://developers.google.com/mobile-ads-sdk/docs/admob/android/banner?hl=pt#play

quinta-feira, setembro 25, 2014

Linux network useful commands

GNU/Linux oferece uma vasta gama de comandos para configuração e manutenção de uma rede ou interfaces de rede.

Eis os mais destacados:

host - Comando serve para efetuar lookups DNS;
dig - Efetua também pesquisas em registos DNS. Por defeito devolve sempre o registo A.
nslookup - Utilitário de administração de redes que permite efetuar consultas ao DNS.
ip addr show - Mostra e permite manipular dispositivos, routing, politicas de routeamento e tuneis.

Os comandos seguinte são excelentes para monitorizar uma rede de dados.

ethtool - Consulta os diferentes dispositivos de rede e pode também efetuar a alteração de diversos parametros;
netstat - Mostra todas as ligação activas (active connections) e tabelas de routeamento. Comando optimo para monitorizar a performance da rede e efetuar despiste.
nmap - Efetua a verificação das diversas porta que poderão ou não estar abertas. Analise de segurança.
tcpdump - efetua o dump do trafego para ser analisado;
iptraf - Monitoriza o trafego em modo texto.

sexta-feira, setembro 19, 2014

Linux Boot Process

Linux NFS

NFS ou Network File System é um dos métodos utilizados para partilhar dados entre sistemas.

Na distribuição Ubuntu, deveremos instalar o NFS com o comando apt-get.

~$ sudo apt-get install nfs-kernel-server

O deamon NFS é iniciado com o comando:

~$ sudo service nfs start

O ficheiro de texto /etc/exports contem os diretórios e permissões que um anfitrião disponibiliza por NFS a todos os outros sistemas remotos.

A seguinte entrada poderá existir no ficheiro:

/projects *.example.com(rw)

Esta entrada no ficheiro indica que a pasta /projects será "mounted" utilizando NFS com permissões Read e Write e partilhado com todos os hosts do domínio example.com.

Depois de configurar o ficheiro, deveremos entrar com o seguinte comando:

~$ exportfs -av

CLIENTE

No sistema cliente, é desejavél que o sistema de ficheiros remoto seja montado automáticamente.
Para isso editamos o /etc/fstab . Por exemplo, uma entrada no ficheiro seria como:

servername:/projects /mnt/nfs/projects nfs defaults 0 0



quarta-feira, setembro 03, 2014

Debug Linux bash scripts

Efetuar o debug de scripts é essencial para se entender a origem do erro. Em bash shell scripting podemos fazer:

$ bash -x script.sh

Vai efetuar o trace de todos os comandos colocando um prefixo + antes de cada comando. Mostra cada um dos comandos antes de o executar.

Para além disto é possível efetua o debug apenas em determinadas partes do script, fazendo para isso set +x a partir do momento que queremos efetuar debug e set -x quando queremos acabar o debug.

quarta-feira, agosto 06, 2014

KVM - Kernel based Virtual Machine

KVM - Kernel-based Virtual Machine é uma solução completa de virtualização para Linux em Hardware x86 (com as extensões Intel VT ou AMD-V). Consiste num módulo kernel, kvm.ko que providencia a infraestrutura de virtualização core e um módulo especifico para processador, kvm-intel.ko ou kvm-amd.ko.

Gestão KVM

libvirt é a principal biblioteca de virtualização que o KVM utiliza. Providencia uma API de gestão de máquinas virtuais e gestão básica de storage e redes.

Como solução avançada de gestão existe o Open Source ovirt com uma GUI fabulosa.

More:
https://openvirtualizationalliance.org/sites/ova/files/resources/files/251810.pdf




Saber a versão de um programa Linux (Debian Alike)

dpkg -l nano

apt-cache show nano

sábado, julho 12, 2014

Failed do decrypt protected XML node

Quando um  package do Microsoft SQL Server 2008 Integration Services (SSIS), devolve erro, na tentativa de correr dentro de um step do SQL AGENT (Jobs), o mais provável é a conta que utiliza para correr o package não tem permissões suficientes para desencriptar o XML.

Para ultrapassar este problema, criei uma conta proxy no SQL Server Agent.

A primeira coisa a fazer é criar uma credencial para ser usada pela conta proxy. Deveremos definir a conta que vai ser usada para se ligar fora do SQL Server.

create a job with a single job step which will execute a SSIS package using a proxy account

De seguida criamos a conta de proxy.

You can even use SSMS to create a proxy

Associa-se a conta de proxy com um subsistema de Sql Server Agent. Uma conta proxy pode ser associada a 1 ou todos os subsistemas disponiveis, tais como TSQL, CMDEXEC, SSIS, PowerShell, etc...

No nosso JOB, definimos a conta:

you can change the same job step using SSMS to use the proxy

quinta-feira, março 27, 2014

Linux SED and AWK

O comando SED é um poderoso utilitário de processamento de texto e é um dos mais antigos e populares utilitários UNIX.

É utilizado para alterar o conteúdo de um ficheiro, geralmente colocando os conteúdos num outro ficheiro daí o se nome "Stream Editor".

SED pode filtrar texto e efetuar substituições em streams de dados.

$sed s/pattern/replace_string/ file
Substituir a primeira string encontrada numa linha.

$sed s/pattern/replace_string/g file
Substituir todas as ocorrências na linha.

$ sed s/pattern/replace_string/g file > file2
O comando anterior vai substituir todas as ocorrências de "pattern" por "replace_string" no ficheiro "file" e copiar par "file2".

O comando AWK é utilizador para extrair e imprimir conteúdos especificos de ficheiros.

$awk '{ print $0 }' /etc/passwd
O comando anterior permite imprimir o ficheiro passwd.

$awk -F: '{ print $1 }' /etc/passwd
O comando anterior permite imprimir a primeira coluna do ficheiro passwd, cujos campos estão separador pelo limitador ":" definido com ".F:".

$awk -F: '{ print $1 $6 }' /etc/passwd
O mesmo que o anterior, mas desta vez permite mostrar a coluna 1 e 6.

domingo, março 23, 2014

Process Isolation

Linux é considerado, desde há muito tempo, um sistema operativo muito seguro relativamente a outros sistemas operativos. Isto deve-se em grande parte à forma como os processos correm.

Um processo é uma instancia de uma ou mais tarefas relacionadas (threads) que estão a executar no computador. Não são necessariamente programas ou comandos pois um programa pode iniciar vários processos ao mesmo tempo. Alguns processos são independentes, outros são relacionados.

Os processo são corridos de forma isolada, ou seja, não utilizam os recursos de outros processos que estão a correr, mesmo que tenham sido chamados pela mesma conta.

Assim sendo é muito difícil ser atacado por vírus ou exploits (mas não impossível obviamente).

Outros mecanismos de segurança foram acrescentados ao longo do tempo:

  • cgroups (control groups) - permitem ao administrador agrupar processos em grupos e alocar recursos finitos a esses grupos;
  • (LXC) linux containers - Possibilita correr multiplos sistemas isolados Linux (containers) num unico sistema com cgroups;
  • Virtualization - Hardware é emulado por forma a que não só apenas os processos são isolados, mas também todos os sistemas de forma isolada num host fisico.

Tipos de processos:

Process TypeDescriptionExample
Interactive ProcessesNeed to be started by a user, either at a command line or through a graphical interface such as an icon or a menu selection.bash, firefox, top
Batch ProcessesAutomatic processes which are scheduled from and then disconnected from the terminal. These tasks are queued and work on a FIFO (First In, First Out) basis.updatedb
DaemonsServer processes that run continuously. Many are launched during system startup and then wait for a user or system request indicating that their service is required.httpd, xinetd, sshd
ThreadsLightweight processes. These are tasks that run under the umbrella of a main process, sharing memory and other resources, but are scheduled and run by the system on an individual basis. An individual thread can end without terminating the whole process and a process can create new threads at any time. Many non-trivial programs are multi-threaded.gnome-terminal, firefox
Kernel ThreadsKernel tasks that users neither start nor terminate and have little control over. These may perform actions like moving a thread from one CPU to another, or making sure input/output operations to disk are completed.kswapd0, migration, ksoftirqd

domingo, março 16, 2014

Gandolada - Jogo educativo?

Resolvi fazer um jogo para a minha filha. Ela gosta muito dos jogos do tipo "Hit The Mole". Achei interessante faze-lo com os principais protagonistas da pouca vergonha que está a acontecer no nosso país atualmente.

www.grandolada.tk

 Grandolada

sábado, fevereiro 15, 2014

ADB - Android Debugging Bridge

O ADB é uma ferramenta de linha de comandos que permite comunicar com instancias de emuladores ou dispositivos ligados. É uma aplicação cliente-servidor que inclui três componentes:


  1. Um cliente que corre na máquina de desenvolvimento;
  2. Um servidor que corre como processo em background na máquina de desenvolvimento;
  3. Uma aplicação que corre em background (Daemon) para cada emulador ou instancia de ligação ao dispositivo;
A ferramenta vem com o SDK do android. Pode ser encontrada em  /platform-tools/.

Quando se corre ao cliente pela primeira vez, este verifica se já existe um processo adb a correr em background. Se não estiver, o processo corre automaticamente. Quando o servidor corre, é efetuado um bind à porta 5037, o qual fica à escuta por comandos de clientes adb.

Sintax:

adb [-d|-e|-s ]

Para gerar uma lista de dispositivos ou emuladores ligados:

  • adb devices
Instalação de uma apk:
  • adb install
Assinar a aplicação:
jarsigner -verbose -keystore ...\.android\debug.keystore -storepass android -keypass android app.apk androiddebugkey

Assinar para envio playgoogle:
  • keytool -genkey -v -keystore grandolada.keystore -alias grandolada -keyalg RSA -keysize 2048 -validity 10000
  • jarsigner -keystore grandolada.keystore Grandolada_2014_02_16-04_05_36_GooglePlaystoreV3_release_unsigned.apk grandolada
  • tools>zipalign -f -v 4 \Users\pessanha\Documents\Jogo\apk\grandolada.apk \Users\pessanha\Documents\Jogo\apk\grandolada_ziped.apk

quinta-feira, dezembro 12, 2013

Ubuntu VirtualBox - No ALTGR key

No Ubuntu instalado no Virtualbox, reparei que a tecla altgr não funciona em tty modo texto.


Para resolver temos de remapear as teclas do teclado no Ubuntu. Usamos para isso o editor Xmodmap.

Fazer:

$cat > ~/.Xmodmap
keycode 108 = Mode_switch
(CTRL+D)
$xmodmap ~/.Xmodmap

sexta-feira, novembro 22, 2013

Segurança informática

Realizou-se no dia 21 de Novembro no auditório do ISEP uma Palestra sobre segurança informática com Vincent Naessens que é docente da Universidade KU Leuven (Bélgica).

O tema era muito abrangente e tenho pena que nas três horas de palestra, não se tenha detalhado o suficiente. Os temas abordados foram:

  1. Authentication technologies
  2. Security on mobile platforms
  3. Cryptographic protocols
Discutiram-se formas de ataque a um sistema nomeadamente:
  • Social engeneering
  • Dictionary attack
  • Spoofing/phishing
  • Sniffing
  • Brute force attack
Não existe forma definitiva de resolver estes problemas, mas existem formas de atenuar ou prevenir:
  • Single sign-on
  • Computer generated password
  • One-time passwords
  • Biometry
  • Multi factor authentication