Com um cenário de TI em constante mudança e cada vez mais diversificado, particularmente em termos de sistemas operacionais heterogêneos (Linux, Windows, etc.) – as organizações de TI devem lidar com vários tipos de dados, diferentes idiomas de desenvolvimento e uma mistura de locais / nuvem / Ambientes híbridos, e de alguma forma simultaneamente reduzem os custos operacionais. Para permitir que você escolha a melhor plataforma para seus dados e aplicativos, o SQL Server está trazendo seu RDBMS de classe mundial para Linux e Windows com o SQL Server v.Next.

Microsoft SQL Server

O Microsoft SQL Server é um sistema gerenciador de Banco de dados relacional (SGBD) desenvolvido pela Microsoft. Foi criado em parceria com a Sybase em 1988 inicialmente para a plataforma OS/2. Esta parceria durou até 1994, com o lançamento da versão para Windows NT e desde então a Microsoft mantém a manutenção do produto. Como um Banco de dados, é um produto de software cuja principal função é a de armazenar e recuperar dados solicitados por outras aplicações de software, seja aqueles no mesmo computador ou aqueles em execução em outro computador através de uma rede (incluindo a Internet). Há pelo menos uma dúzia de diferentes edições do Microsoft SQL Server destinadas a públicos diferentes e para diferentes cargas de trabalho (variando de pequenas aplicações que armazenam e recuperam dados no mesmo computador, a milhões de usuários e computadores que acessam grandes quantidades de dados a partir da Internet ao mesmo tempo). Suas linguagens de consulta primárias são T-SQL e ANSI SQL.

Instalando MSSQL Linux – Ubuntu

1 ) Abra o terminal do linux e digite os comandos abaixo, a primeira linha ira importar as chaves GPG para o repositorio, a segunda linha ira adicionar os pacotes ao repositorio e as linhas seguintes, atualizar e instalar o MSSQL.


curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

sudo add-apt-repository "$(curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server.list)"

sudo apt-get update
sudo apt-get install -y mssql-server

mssql-linux-install-1

2) Após a instalação precisamos configurar o MSSQL, para isso digite:

sudo /opt/mssql/bin/mssql-conf setup

Aceite os termos de licença

mssql-linux-install-2-licensa

3) Escolha uma edição do MSSQL:

mssql-linux-install-3-edicao

4) Escolha o idioma desejado:

mssql-linux-install-4-idioma

5) Escolha uma senha para o usuário SA, esta senha deve ser forte o suficiente, vide imagem abaixo:

mssql-linux-install-5-senha

6) Neste ponto a configuração estará completa, para testar o seu MSSQL digite:

systemctl status mssql-server

mssql-linux-install-6-server-ok

7) Pronto! Seu servidor esta pronto e rodando para usa-lo você pode instalar uma ferramenta de banco de dados universal e pode sair administrando e programando com MSSQL no Linux:

mssql-linux-install-7-conexao

R – Tipos – Linux

Publicado: 5 de dezembro de 2016 em R

Em informática e programação de computadores, um tipo de dados ou simplesmente tipo é uma classificação de dados que informa ao compilador ou intérprete como o programador pretende usar os dados. A maioria das linguagens de programação suporta vários tipos de dados, por exemplo: real, inteiro ou booleano. Um tipo de dados fornece um conjunto de valores a partir do qual uma expressão (isto é, variável, função …) pode tomar seus valores. O tipo define as operações que podem ser feitas nos dados, o significado dos dados e a maneira como os valores desse tipo podem ser armazenados.

R-Studio

R-Studio

Tipos Basicos

  • String: Na programação de computadores, uma cadeia de caracteres ou string é uma sequência de caracteres, geralmente utilizada para representar palavras, frases ou textos de um programa.
  • Integer: Em ciência da computação, um inteiro é um dado do tipo integral, um tipo de dado que representa algum subconjunto finito dos inteiros matemáticos.
  • Float: Ponto flutuante (do inglês floating point) ou vírgula flutuante é um formato de representação digital de números reais, que é usada nos computadores.
  • Boolean: Em ciência da computação, booleano é um tipo de dado primitivo que possui dois valores, que podem ser considerados como 0 ou 1, falso ou verdadeiro.

Exemplo:

Para testar use o código abaixo digitando linha a linha no console do R.

R

meuTexto = 'eu sou um texto'
meuInteiro = 10
meuFlutuante = 10.5

print(meuTexto)

print(meuFlutuante)

print(meuInteiro)

print(meuInteiro + meuFlutuante)

meuBoleano = TRUE
print(meuBoleano)

isTRUE(meuBoleano)
meuBoleano = FALSE
isTRUE(meuBoleano)

 

R – Instalando o R Studio – Linux

Publicado: 30 de novembro de 2016 em R

RStudio é um ambiente de desenvolvimento integrado (IDE) para R. Ele inclui um console, editor com destaque de sintaxe que suporta execução de código direto, bem como ferramentas para plotting, história, depuração e gerenciamento de espaço de trabalho.

O RStudio está disponível em open source e edições comerciais e é executado no desktop (Windows, Mac e Linux) ou em um navegador conectado ao RStudio Server ou ao RStudio Server Pro (Debian / Ubuntu, RedHat / CentOS e SUSE Linux).

R-Studio: https://www.rstudio.com/products/RStudio/

Instalando o R Studio

1 – Após instalar o R e baixar o R studio extraia o arquivo baixado em uma pasta:

Bin

Bin

2 – Na pasta Bin execute o arquivo chamado rstudio, após a IDE abrir, crie um novo arquivo de script R, copie o código abaixo, selecione e clique em Run:

RStudio - Gráfico

RStudio – Gráfico

Você deve obter um grafico de barras degrade das cores amarelas e vermelhas. Não se precupe em entender o código R por enquanto, vamos aprender isso detalhamente ao longo dos posts sobre o R

R

barras <- c(1:10)

corDegrade <- colorRampPalette(c("yellow","red"))
corDegrade(10)

barplot(barras, col=corDegrade(10))

 

R – Instalando o R – Linux – Ubuntu

Publicado: 24 de novembro de 2016 em Linux, R

R é uma linguagem e também um ambiente de desenvolvimento integrado para cálculos estatísticos e gráficos. A linguagem de scripts R disponibiliza uma ampla variedade de técnicas estatísticas e gráficas, incluindo modelação linear e não linear, testes estatísticos clássicos, análise de séries temporais (time-series analysis), classificação, agrupamento e outras. A R é facilmente extensível através de funções e extensões, e a comunidade R é reconhecida pelos seus contributos ativos em termos de pacotes. Existem diferenças importantes, mas muito código escrito para S corre inalterado. Muitas das funções padrão do R são escritas no próprio R, o que torna fácil para os usuários seguir as escolhas algorítmicas feitas. Para tarefas computacionais intensivas, os códigos C, C++, e Fortran podem ser ligados e chamados durante a execução. Usuários experientes podem escrever código C ou Java para manipular diretamente objetos R.

R Project: https://www.r-project.org/

mosaic1
 R e SQL Databases

R junto ao SQL também conhecido como R In-Database, adiciona componentes e serviços com opções analiticas, tornando a linguagem de programação e ambiente de código aberto R pronta para a empresa de grande porte. Projetado para problemas envolvendo grandes volumes de dados, SQL e R integra R com os bancos de dados principais do mercado, como Oracle, MSSQL entre outros, podendo executar comandos R e scripts para análises estatísticas e gráficos em dados armazenados em banco de dados.

R Services In-Database é um recurso que oferece suporte à ciência de dados em escala empresarial. R é a linguagem de programação mais popular para análises avançadas e oferece um conjunto de pacotes incrivelmente rico e uma comunidade de desenvolvedores vibrante e em rápido crescimento. R In-Database ajuda você a abraçar a altamente popular linguagem de código aberto em sua empresa.

Oracle: Oracle R Enterprise

MSSQL: SQL Server R Services

IBM DB2: DashDB / R

SAP Hana: SAP Hanna R Integration

 

Instalando o R – Ubuntu

1 – Para instalar use os comandos do script abaixo:

r1-keys

R – Keys

2 – Após a instalação digite R no terminal para abrir o console:

Console

Console

R

Use os scripts abaixo para instalar o R:

sudo sh -c 'echo "deb http://cran.rstudio.com/bin/linux/ubuntu trusty/" >> /etc/apt/sources.list'

gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-key E084DAB9

sudo apt-get update

sudo apt-get -y install r-base

R

 

 

Oracle – Qual a diferença entre SQL e o PL/SQL?

Publicado: 3 de novembro de 2016 em Sql

Uma das dúvidas mais comuns entre estudantes e profissionais de TI que não trabalham diretamente com Banco de Dados é a diferença entre essas duas linguagens. Vou te confessar que é um pouco complicado e eu entendo isso, afinal até o nome delas é parecido e isso pode confundir e muito os profissionais. 

 

O que é o SQL?

O SQL é uma linguagem de programação que foi criada na década de 70 pela IBM para os Banco de Dados Relacionais da empresa, com o objetivo de implementar as regras de relacionamento de um banco de dados.

Mais tarde ela entrou para o padrão ANSI e todas as empresas que desenvolvem SGDBs adotaram ele como padrão de banco de dados relacionais.

logoazuresql

O que é o PL/SQL?

O PL/SQL é uma linguagem de programação procedural que foi implantada pela Oracle Database no ano de 1991, Clique aqui para ver a história do PL/SQL (http://aprendaplsql.com/2013/08/conheca-historia-da-linguagem-plsql/) e ela surgiu com a necessidade da Oracle de ter uma linguagem interna, já que o SQL tem a função apenas o objetivo de pesquisas, recuperar e formatar dados de forma simples. 

Qual a grande vantagem de usar o PL/SQL?

O PL/SQL é uma linguagem de programação que é compilada dentro do Banco de Dados e com isso temos uma economia gigantesca de tempo e o poder da utilização do Hardware do Database para processar as informações, esta é uma grande vantagem tendo em vista que o Banco de Dados possuí recursos muito poderosos.

Vale lembrar que esses recursos devem ser usados com moderação, como eu costumo defender para os meus alunos o Banco de Dados é o coração da empresa e se ele ficar fora do ar, simplesmente todos os sistemas ficam fora do ar. Então tome muito cuidado com as suas implementações.

É possível fazer um sistema apenas com o SQL?

A resposta é sim, e eu como especialista nas duas linguagens te digo que qualquer programador deve saber SQL, afinal você vai precisar sempre fazer a interface com um Banco de Dados, inclusive criei um artigo com os 10 motivos pelos quais todo programador deve saber SQL(http://aprendaplsql.com/2016/03/10-motivos-pelos-quais-todo-programador-deve-saber-sql/).

Um bom desenvolvedor PL/SQL deve dominar o SQL, isso porque apesar do PL/SQL ser muito rápido e resolver os seus problemas quando um código simples não funciona, o SQL sempre tem que estar muito bem feito, senão você vai ter problemas de performance.

O que é SQL e o que é PL/SQL?

Segue abaixo o que o SQL suporta

Elementos da linguagem: Clausulas, Expressões, Consultas, Statments (Demonstrações), Condições de uma consulta;

Operadores: =, >, =, <=, BETWEEN, LIKE, IN, NOT IN, IS, IS NOT, AS, etc;

Consultas (Queries): que inclui SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, etc;

Tipos de Dados: NUMBER,  CHAR, BIT, DATE e TIME

DDLs(CREATE, REPLACE), DMLs(INSERT, DELETE, UPDATE) e DCLs (COMMIT ROLLBACK)

Já o PL/SQL suporta os seguintes objetos/comandos.

Objetos: Packages, Procedures, Functions, Triggers, Types

Variáveis: NUMBER, PLS_INTEGER, BOOLEAN, BINARY_INTEGER, VARCHAR2, RAW, etc

Estruturas de Decisão e Repetição: IF, ELSE, THEN, LOOP, WHILE, CASE

Cursores Explícitos e Implícitos.

Conclusão

Com as informações passadas acredito que você agora consiga distinguir o SQL e o PL/SQL mas o mais importante deste artigo é que você entenda que é impossível saber um sem saber o outro e que essas linguagens são altamente poderosas e que podem fazer total diferença no seu dia-a-dia de programador.

 

Autor:  William Miranda

Site: aprendaplsql.com

Flask é um pequeno framework web escrito em Python e baseado na biblioteca WSGI Werkzeug e na biblioteca Jinja2. Flask está disponível sob os termos da Licença BSD.

Flask tem a flexibilidade da linguagem de programação Python e provê um modelo simples para desenvolvimento web. Uma vez importando no Python, Flask pode ser usado para economizar tempo construindo aplicações web. Um exemplo de aplicação desenvolvida com Flask é a página da comunidade de desenvolvedores do framework.

É chamado de microframework porque mantem um núcleo simples mas estendível. Não há uma camada de abstração do banco de dados, validação de formulários, ou qualquer outro componente onde bibliotecas de terceiros existem para prover a funcionalidade. Assim, Flask suporta extensões capazes de adicionar tais funcionalidades na aplicação final. Há uma vasta coleção de bibliotecas para resolver essas questões em Python, isso simplifica o framework e torna sua curva de aprendizado mais suave.

Flaskhttp://flask.pocoo.org/

Instalando e configurando o Flask

Primeiramente você precisa ter uma instalação do Python em sua maquina, e no caso do sistema operacional Windows, que esta instalação inclua o caminho do ambiente Python na variável de ambiente Path:

1 – Por questões de preferências, utilizamos uma instalação do Python 2.7.x.

Variável de ambiente - Windows

Variável de ambiente – Windows

2 – Neste primeiro exemplo, vamos instalar, configurar e criar um servidor Flask e exibir uma pagina web utilizando o próprio exemplo do framework Flask. Para isto abra a linha de comando para criar um ambiente virtual:

Ambiente - Virtual

Ambiente – Virtual


pip install virtualenv

cd\

mkdir DesenvolvimentoAberto\FlaskPrj

cd DesenvolvimentoAberto\FlaskPrj

virtualenv flask

3 – Apos criar o ambiente virtual e o diretório para o nosso projeto, vamos instalar o Flask:

Instalando o Flask

Instalando o Flask


C:\DesenvolvimentoAberto\FlaskPrj\flask\Scripts\pip install flask

4 – Com o Flask instalado, você pode abrir sua IDE ou editor Python preferido e utilizar o exemplo Hello World do site do Flask. Salve o arquivo como o nome reservado de __init__.py em uma pasta chamada App que você irá criar:

__init.py__

__init.py__

5 – No diretório de Scripts, ative o Flask e chame sua aplicação Python:

Activate Flask

Activate Flask

C:\DesenvolvimentoAberto\FlaskPrj\flask\Scripts\activate

cd C:\DesenvolvimentoAberto\FlaskPrj\App
C:\DesenvolvimentoAberto\FlaskPrj\App Python __init__.py

6 –  Com o servidor rodando abra o navegador e digite a URL padrão: http://127.0.0.1:5000/

Website - Flask - Navegador

Website – Flask – Navegador

E Pronto! Você já possui uma servidor web Flask e uma aplicação Python rodando.

Exemplo:

Neste exemplo instalamos, configuramos e criamos uma aplicação web inicial Python com o Flask.

Python

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

O Apache Maven é uma ferramenta de gerenciamento de projetos de software e compreensão de pacotes. Baseado no conceito de um modelo de objeto do projeto (POM), O Maven pode gerir um projeto de construção (compilação), elaboração de relatórios e documentação de uma única central de informações.

Um Project Object Model, fornece todas as configurações para um único projeto. A configuração geral cobre o nome do projeto, seu proprietário e suas dependências de outros projetos. Também pode configurar fases individuais do processo de construção, que são implementados como plug-ins. Projetos maiores poderiam ser divididos em vários módulos, ou subprojetos, cada um com seu próprio POM. Cada um pode então escrever um POM raiz através do qual pode-se compilar todos os módulos com um único comando.

O Maven utiliza templates chamados de Archetypes ou arquétipos que são um conjunto de ferramentas de modelagem do projeto Maven. Um arquétipo é definido como um padrão ou modelo inicial a partir da qual todos os outros objetos do mesmo tipo são feitos contemplando as melhores praticas para cada modelo. Os Arquétipos ajudam autores a criar modelos de projeto Maven para os usuários, e oferece aos usuários os meios para gerar versões parametrizadas desses modelos de projeto.

Versões mais modernas do Eclipse já contemplam uma instalação para criar projetos Maven, mas não habilita comandos no ambiente de console do Linux, siga os passos abaixo para instalar o Maven para ser utilizado pela linha de comando no console, isto é muito versátil quando você precisa instalar arquivos jar no repositório do Maven.

Maven: https://maven.apache.org/

Instalando o Apache Maven no Linux openSuse

1 – Abra o console do Linux e digite as seguintes linhas de comando:


java -version

cd Downloads

tar xvzf apache-maven*.tar.gz -C /tmp/

sudo su

rm /home/[myUser]/Downloads/apache-maven*bin.tar.gz

chown -R root:root /tmp/apache-maven*

mv /tmp/apache-maven* /opt/

exit

kdesu kwrite $HOME/.bashrc

//*** Adicione a linha abaixo dentro do arquivo no kwrite e salve (vide imagem)
//export PATH=$PATH:/opt/apache-maven-3.3.9/bin/
//****
source $HOME/.bashrc

mvn -version

Os comando acima tem a seguinte ação

  • Verifica se você possui o Java (Obrigatório).
  • Abre a pasta de download do usuário, descompacta o arquivo em um diretório temporário.
  • Eleva direitos de super usuário, atribui propriedade ao usuário, exclui o arquivo baixado e move a instalação para o diretório correto.
  • Abre o arquivo de configuração do Linux usando a GUI para que você o altere e aplique as alterações no sistema.
  • Testa o Maven instalado.
Instalar Maven

Instalar Maven

Você deve adaptar os comandos de acordo com a realidade do arquivo binário do Maven no qual baixou e o usuário do seu sistema operacional.

2 – Atente-se para a alteração no arquivo bashrc e coloque a linha para inserir o caminho do Maven a variável de ambiente $PATH. Apos completar todos os comandos você deve obter a versão do Maven  indicando que a instalação foi um sucesso:

Maven -version

Maven -version

O Apache Maven foi instalado com sucesso no seu openSuse e você já pode utilizar o Maven através da linha de comando no console.

O Apache Tomcat  é um servidor web desenvolvido pela Apache Software Foundation (ASF). O Tomcat implementa o Java Servlet e JavaServer Pages (JSP) especificados pela Oracle, e fornece um ambiente de servidor puro JavaHTTP web para o código Java.

TomCat 8: http://tomcat.apache.org/

Instalando o Apache Tomcat

1 – Após o download do arquivo você precisa instalar o JDK 8, caso ainda não tenha instalado basta dar duplo clique no arquivo jdk-8u65-linux-x64.rpm para efetuar a instalação.

Linux JDK 8 RPM: Download

Para Instalar o tomcat8:

sudo tar -zxvf apache-tomcat-8.0.28.tar.gz -C /usr/local/

2- Caso não tenha nenhum servidor rodando na porta 8080, pule este passo. Caso tenha um outro servidor web em sua maquina ou pretenda trabalhar com o Oracle Database (Oracle usa APEX na 8080) mude as todas portas do arquivo de configuração para que iniciem o valor 9, por exemplo: 9080 e assim por diante, utilize a figura abaixo para referencia:

kdesu kwrite /usr/local/apache-tomcat-8.0.28/conf/server.xml

 

Server.xml

Server.xml

3 – Você precisa definir um usuário e senha para que possa acessar as configurações do Tomcat, digite a seguinte linha de comando para alterar o arquivo de usuários:

kdesu kwrite /usr/local/apache-tomcat-8.0.28/conf/tomcat-users.xml
Users.xml

Users.xml

Inclua os dados abaixo no arquivo xml:

<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>

4 – Digite o comando a seguir para iniciar o servidor Tomcat:

sudo /usr/local/apache-tomcat-8.0.28/bin/startup.sh
Iniciando o Tomcat

Iniciando o Tomcat

5 – Abra o seu navegador e digite o seguinte endereço, “localhost:9080“:

Localhost:9080 - Tomcat

Localhost:9080 – Tomcat

6 – Para finalizar atribua o diretório do Tomcat ao seu usuário pois vai necessitar assim que utilizar o Eclipse ou alguma outra IDE de sua preferencia para que possa acessar os arquivos do Tomcat e iniciar uma nova instancia de sua IDE. Atente-se que no comando abaixo DevAberto é o usuário logado no Linux, você também deve ficar atento as versões do arquivo que você está baixando e adaptar as linhas de comandos para que você não obtenha erros:

sudo chown -R DevAberto /usr/local/apache-tomcat-8.0.28/

Tudo pronto e você já está apto a criar suas aplicações Java para Web, utilize nossos exemplos para aprender mais sobre Java EE.

Desenvolver aplicativos que possam rodar em varias plataformas é uma vantagem nos dia de hoje. Até as empresas mais tradicionais como a Microsoft há tempos resolveu quebrar de vez a barreira de sua plataforma e investir em portabilidade e interoperabilidade. Seja adquirindo e disponibilizando aplicativos para outras plataformas como o Skype, ou mesmo desenvolvendo suas próprias ferramentas, como o Visual Studio Code ou também firmando parcerias com outros sistemas operacionais como já vem de algum tempo a aliança entre a Microsoft e a Novell proprietária da edição Linux Suse Enterprise.
Nos desenvolvedores, estudantes, entusiastas e profissionais de tecnologia amantes da programação podemos também participar desta parceria desenvolvendo aplicativos profissionais para o mercado corporativo no qual podemos tirar vantagem da interoperabilidade entre os sistemas operacionais Linux e Windows. Para começar esta empreitada precisamos do básico, ou seja instalar os dois sistemas operacionais em um computador, este recurso nada mas é do que o conhecido Dual Boot, que na verdade não precisa ser exatamente “Dual” podemos ter vários sistemas operacionais instalados em um computador e usar o que desejarmos, escolhendo na hora do boot qual sistema operacional vamos carregar e trabalhar.

 

Criando um Dual Boot Windows 10 e openSuse à partir do Windows com um Pen Drive

 

1 – Vamos criar um dual boot entre o Windows 10 e Linux openSuse de um modo simples e fácil. No Windows 10,  vamos primeiro baixar uma cópia no formato “.iso” do sistema operacional openSuse Linux:
OpenSuseopensuse.org
Para criar um pen drive para a instalação do openSuse baixe o seguinte programa:
Para criar o pen drive de instalação siga os quatro simples passos do programa que são, selecionar o pen drive, escolher a opção “Write image to USB“, selecionar o arquivo iso do openSuse e clicar no botão Write para começar a criação do pen drive de boot Linux.
ImageUSB

ImageUSB

2 – Na nova pesquisa do Windows 10 ao lado do botão iniciar, escreva a palavra “disco” e escolha a opção criar e formatar partições do disco rígido:
Gerenciador de Disco

Gerenciador de Disco

3 – Selecione a partição onde o Windows 10 está instalado, geralmente o volume C: e com o botão direito do mouse escolha diminuir volume:
Partições de disco

Partições de disco

4 – Diminua a quantidade de Gigabytes desejada, neste exemplo vou diminuir 1 GB:

Diminuir partição

Diminuir partição

5 – Você vai visualizar o espaço não alocado em seu disco, matenha assim, não formate pois o Linux irá reconhecer automaticamente este espaço e assim teremos uma instalação simples:

Não Alocado

Não Alocado

6 – Reinicie o sistema operacional e dê o boot pelo pen drive. Antes tenha certeza que você habilitou o boot USB e o colocou como primeiro boot na configuração da sua BIOS. Use a tecla para escolher o Boot no meu caso F12 mas isso vai depender da sua placa mãe:

Boot Pen Drive

Boot Pen Drive

7 – Instale o openSuse normalmente com todas as opções recomendadas use o particionamento sugerido a não ser que você seja um usuário avançado e queira escolher suas partições manualmente.

Caso tenha duvidas de como instalar o openSuse use nosso post no link abaixo. Atente-se para a opção de disco onde o Linux irá dividir seu espaço não particionado em 3 partições Linux, ext4, swap e /home, além disso ira criar o boot/Efi na partição /sda1 que é nada mais que o C: do Windows:

Instalando o openSuse (pule a maquina virtual neste post)

Disco e partições Linux

Disco e partições Linux

Você também pode escolher entre as duas interfaces gráficas padrão na instalação do openSuse, a Gnome e a KDE, sendo que a KDE se assemelha mais ao estilo do Windows com o botão iniciar e tudo mais. Você também pode escolher uma outra interface gráfica se  desejar, segue abaixo uma previa das duas interfaces mais comuns quando o openSuse estiver instalado:

KDE

KDE

Gnome

Gnome

8 – Após a instalação do openSuse o sistema irá reiniciar, você já poderá ver a tela de escolha de boot do Grub do Linux, escolha openSuse mais uma vez para que o sistema termine a instalação. Assim que terminar a instalação do openSuse você já pode reiniciar e alternar os sistemas operacionais como desejar:

Grub - Dual Boot

Grub – Dual Boot

Você já pode começar a utilizar os sistemas operacionais Windows 10 e Linux Suse e tirar proveito da interoperabilidade disponível para desenvolver seus aplicativos corporativos.

Quando utilizamos um mapeamento objeto relacional para usar duas tabelas do banco de dados que estão ligadas entre si através de um identificador comum nos deparamos com algumas diferenças de conceitos do tradicional método de usar o banco de dados relacional no qual estamos acostumados. O que podemos fazer simplesmente com a linguagem SQL como declarar uma instrução Join se torna um pouco mais complicado no mundo ORM, está diferença é chamada de impedância objeto-relacional.

Existem vários métodos para que se possa lidar com esta diferença de conceitos no qual os bancos de dados ainda não estão preparados para lidar, pois os maiores banco de dados do mercado ainda são os relacionais. Podemos utilizar um método chamado Bind que apesar de simples não é muito usual devido a sua sintaxe ser um pouco diferente do padrão do qual estamos acostumado no C#.

No seu uso mais simples, o Bind nos permite utilizar entre outros um prefixo para trazer o identificador do modelo de uma visão para que possamos utiliza-lo em outra visão para filtra dados.

BindAttribute:
https://msdn.microsoft.com/en-us/library/system.web.mvc.bindattribute(v=vs.118).aspx

Deste modo podemos facilmente escrever aplicações que usam dados relacionais e manipula-los através do framework MVC. Você pode manualmente criar modelos e identificadores entre eles e liga-los utilizando bind, apesar de não muito usual está estratégia permite mais controle sobre o SQL que seu framework ORM irá utilizar para manipulação do seu banco de dados.

Relacionado dados entre modelos

1 – Crie uma aplicação C# – MVC Razor, utilize o exemplo anterior para criar os modelos, visões e Scaffold para que você obtenha um CRUD totalmente funcional sem que tenha que escrever linhas de código.

CRUD ASP.NET MVC – Entity Framework

2 – Altere a visão de apresentação chama Index do controlador de cadastro e substitua o link detalhes pelo link horários e alimente os dados que desejar.

Cadastro - Cursos

Cadastro – Cursos

3 – Crie um novo Scaffold para o modelo grade e alimente os dados utilizando os identificadores do cadastro anterior, visto que neste momento você ainda não pode vê-los, pois não são exibidos na View. Os identificadores são sequenciais, você pode utilizar a instrução Select no SQL Studio para visualiza-los ou pode exibi-los na sua View de cadastro adicionando mais um campo para ser exibido se desejar.

Horários - Grade

Horários – Grade

4 – Altere o controlador da grade de horários como no código abaixo:

Grade - Bind

Grade – Bind

Exemplo:

Neste exemplo criamos dois modelos e utilizamos um Scaffold de escrita e leitura para criar toda funcionalidade para nossa aplicação. Relacionamos os modelos manualmente através do atributo Bind.

Nesta aplicação o item JAVA EE possui o identificador 6, no qual somente o item relacionado será mostrado caso tenha um horário na tabela grade no banco de dados.

C#
Cadastro
Index.cshtml

@model IEnumerable<WebApplication1.Models.CursosModelo>

@{
    ViewBag.Title = "Index";
}


<h2>Index</h2>




    @Html.ActionLink("Create New", "Create")



<table class="table">

<tr>

<th>
            @Html.DisplayNameFor(model => model.Curso)
        </th>


<th>
            @Html.DisplayNameFor(model => model.Linguagem)
        </th>


<th>
            @Html.DisplayNameFor(model => model.Descr)
        </th>


<th></th>

    </tr>


@foreach (var item in Model) {

<tr>

<td>
            @Html.DisplayFor(modelItem => item.Curso)
        </td>


<td>
            @Html.DisplayFor(modelItem => item.Linguagem)
        </td>


<td>
            @Html.DisplayFor(modelItem => item.Descr)
        </td>


<td>
            @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |

            
            @*Altere os detalhes para que você chamar a visão de horarios*@ 
            @Html.ActionLink("Horarios", "Index", "GradeModeloes", new { id=item.Id }, null) |
            @Html.ActionLink("Delete", "Delete", new { id=item.Id })
        </td>

    </tr>

}

</table>


Controlador
GradeModeloesController

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using WebApplication1.Models;

namespace WebApplication1.Controllers
{
    public class GradeModeloesController : Controller
    {
        private MinhaAppMeuDB db = new MinhaAppMeuDB();

        

        // GET: GradeModeloes
        // Use o Bind para relacionar os dados exibidos entre as visões
        public ActionResult Index([Bind (Prefix ="id")]int CursosId)
        {
            var MeuCurso = from m in db.Grades
                           where m.IdCursoModelo.Equals(CursosId)
                           select m;
            
            if (MeuCurso != null)
            {
                return View(MeuCurso);
            }

            return HttpNotFound();
        }

        // GET: GradeModeloes/Details/5
        public ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            GradeModelo gradeModelo = db.Grades.Find(id);
            if (gradeModelo == null)
            {
                return HttpNotFound();
            }
            return View(gradeModelo);
        }

        // GET: GradeModeloes/Create
        public ActionResult Create()
        {
            return View();
        }

        // POST: GradeModeloes/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "Id,Dia,hora,IdCursoModelo")] GradeModelo gradeModelo)
        {
            if (ModelState.IsValid)
            {
                db.Grades.Add(gradeModelo);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(gradeModelo);
        }

        // GET: GradeModeloes/Edit/5
        public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            GradeModelo gradeModelo = db.Grades.Find(id);
            if (gradeModelo == null)
            {
                return HttpNotFound();
            }
            return View(gradeModelo);
        }

        // POST: GradeModeloes/Edit/5
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include = "Id,Dia,hora,IdCursoModelo")] GradeModelo gradeModelo)
        {
            if (ModelState.IsValid)
            {
                db.Entry(gradeModelo).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(gradeModelo);
        }

        // GET: GradeModeloes/Delete/5
        public ActionResult Delete(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            GradeModelo gradeModelo = db.Grades.Find(id);
            if (gradeModelo == null)
            {
                return HttpNotFound();
            }
            return View(gradeModelo);
        }

        // POST: GradeModeloes/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            GradeModelo gradeModelo = db.Grades.Find(id);
            db.Grades.Remove(gradeModelo);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}