Consolas retro oficiais

Ando de olhos postos nas consolas retro. Algumas delas nunca brinquei nem experimentei, pois são demasiado antigas, outras sim :)

Eis a lista do que encontrei até ao momento à venda em Portugal :)

Consola SNES Nintendo Classic Mini, 

Consola SEGA MEGA DRIVE 85 jogos (Preto),

Consola NINTENDO CLASSIC MINI NES,


Consola Retro ATARI Flashback 8 Gold,

Tags : , ,

Construir “Graphics Shaders”

Um tutorial/introdução que explica a construção de Graphics Shaders

+infos: LINK

Tags :

Conversas gráficas (em Coimbra)

duas das palestras estão relacionadas com o desenvolvimento de videojogos:
O workflow geral do desenvolvimento de videojogos, por Guilherme Santos da Empresa ZPX
e Tecnologias de motion capture para videojogos, por Durate Duque professor no IPCA

Tags : ,

Castle Jam (em Montemor o Novo)

“A Castle Jam é uma residência artística orientada para a criação colectiva de jogos digitais e analógicos. O evento decorre de dia 29 de Março 8PM a 31 de Março 8PM, decorrendo ao longo de cerca de 48h contínuas.  Existem 15 vagas para participantes para a Castle Jam, providenciando-se acesso a duches e uma sala de descanso (os participantes devem trazer os seus próprios sacos de cama e produtos de higiene). Queremos sublinhar que a tua participação não está garantida por ter inscreveres neste formulário, uma vez que esta está sujeita a um processo de seleção, que decorrerá dia 16 de Março 2019.”

+infos(oficial): inscrição

Tags : ,

MAD Game Jam (em Vila do Conde)

“As inscrições fecham à 00h do dia 17 de fevereiro e ainda temos 20 vagas para preencher!

– Inscrições validas para todas as idades
– Temos montes de prémios, ainda uns quantos por anunciar.
– Todas as refeições e snacks garantidos de borliu!
– Cafézinho do bô, Redbull pra todos…
– Salas para dormirem
– Internet toda XPTO
– Segurança all the time
– Estacionamento que nunca mais acaba

E acima de tudo, um ambiente único do qual vais querer fazer parte!”

+infos(oficial): http://eventos.esmad.ipp.pt/mad-gamejam/

Tags : ,

9th Irish Conference on Game-Based learning (iGBL2019)

iGBL2019 will be held on 26th, 27th and 28th June 2019 in Cork City, and we welcome abstracts from developers, doctoral students, instructors and researchers for game demos, presentations or workshops on the themes of games for learning, motivation and change.

If you have used or conducted research on digital or non-digital games to support change, learning and motivation, and you would like to share your experience with like-minded researchers and practitioners, you may consider presenting at iGBL2019 and submit your abstract by 22nd February 2019.

Note that this year, we plan on organising a summer school on 26th June where research students (e.g., doctoral students) can discuss their work and obtain feedback from specialists in the field. There will also be a game jam where students will be able to work as a group to create a game based on a specific theme.

+infos(oficial): http://www.igbl-conference.com/cfp/

Tags : ,

BiblioGameJam (em Marvila, Lisboa)

A Biblio Game Jam vai decorrer de 15 a 17 de Março na Biblioteca Municipal De Marvila, em Lisboa, com um prémio total de 3000€ a ser distribuído pelos vencedores.

A Biblio Game Jam insere-se no evento “Bibliogamers”, e os jogos desenvolvidos serão apresentados na sessão de jogos indie.
As equipas são de formação voluntária e podem incluir estudantes ou profissionais.  O espaço estará disponível 24h por dia e serão disponibilizadas refeições ligeiras e completas aos participantes.

+infos(inscrição): https://goo.gl/forms/nfOMp4rj3NYPBuJ12

Tags : , ,

Prémios PlayStation Portugal 2018

Na passada semana decorreu em Lisboa a iniciativa Prémios PlayStation Portugal 2018.

Da lista de concorrentes deste ano surgiram os seguintes vencedores:
Melhor Jogo – KEO (Redcatpig Studio)
Melhor Utilização das Plataformas PlayStation – Capture (OX)
Jogo Mais Inovador – Keg Wars (Flying Pan)
Melhor Jogo de Competição Online – KEO (Redcatpig Studio)
Melhor Jogo Infantil – Fayo (Team Fayo)
Melhor Arte – Ink Knight (SnakeWhirl)
Prémio Imprensa – Capture (OX)

+infos(rede social): https://twitter.com/PlayStationPT

+infos(futurebehind): LINK

+infos(tek sapo): LINK

Tags : , ,

Sons, musica… aceder a uns quantos de forma gratuita

Alguns repositórios de sons e musicas gratuitas para serem usados em videojogos:

digccMixter (http://dig.ccmixter.org/)
PlayOnLoop (https://www.playonloop.com/)
Bensound (https://www.bensound.com/)
Twin Musicom (http://www.twinmusicom.org/)
ZapSplat (https://www.zapsplat.com/)
Incompetech (https://incompetech.com/)
MusOpen (https://musopen.org/)
Bandcamp (https://bandcamp.com/)
NetLabels (https://netlabels.org/)
PartnersInRhyme (https://www.partnersinrhyme.com/)
IndieGameMusic (http://indiegamemusic.com/)
FreeSoundtrackMusic (https://www.freesoundtrackmusic.com/)

Tags : , ,

Assets, aceder a uns quantos de forma gratuita

Alguns recursos para ajudar no desenvolvimento de videojogos (assets):
Open Game Art (https://opengameart.org/)
itch.io (https://itch.io/)
Game developer studio (https://www.gamedeveloperstudio.com/)
Game art 2d (https://www.gameart2d.com/)
Craftpix (https://craftpix.net/)

Tags : ,

Cursos (2D e 3D) acerca do Godot Engine

Está a decorrer uma campanha no kickstarter acerca do desenvolvimento de jogos usando o Godot Engine..  a referencia é de 20 euros para um versão indie e 40 euros para lições para profissionais.

desta mesma malta existe um conjunto alargado de coisas gratuitas como videos e documentação

+infos(campanha): LINK

+infos(videos): LINK

+infos(documentação): LINK

Tags : , ,

SO1 – Escalonamento – Conceitos e Algoritmos

Escalonamento – Conceitos e Algoritmos

a multiprogramação simples consegue-se com:
dispositivos de memoria secundária e rápida;
boa gestão de E/S por parte do SO
mecanismo de gestão e partilha de memória
mecanismos no SO para partilhar e gerir recursos partilhados na maquina, entre todos os programas que estão em execução

a multiprogramação simples (não preemptiva: que prevê ou antecipa situações),
baseia-se na cedência voluntária (que pode ou não acontecer) do CPU, por parte do programa que está a ser executado

a multiprogramação preemptiva (ou “interactiva” ou “de tempo partilhado”),
o sistema força a cedência do CPU por parte do programa actualmente em execução, passado a CPU a outro programa e posteriormente voltando ao programa inicial

exemplo de algortimos preemptivos:
fim de quantum (interrupção do relógio, tempo partilhado)
processo mais prioritário
processo mais curto

objetivos do escalonamento preemptivo:
permitir que processos prioritários possam reagir rapidamente a um acontecimento
exemplo: windows NT, já o MSDOS é não preemptivo

exemplo de algortimos nao preemptivos:
o programa que terminou
o programa pediu acesso a um semáforo que estava fechado
o programa requisitou uma operação de E/S demorada

assim a preempção pode ser baseada em:
_intervalos de tempo fixo (um bocado de tempo à vez de todos)
_prioridade (o mais importante primeiro)
_critérios de performance (o mais pequeno/rápido primeiro)

o escalonamento multiprogramado simples:
consegue aproveitar esses tempo de E/S sem garantia que um programa impede outros de serem executados
aproveita melhor o CPU do que o monoprocessamento

o escalonamento multiprogramado:
o sistema consegue aproveitar os tempos de I/O de um programa para executar instruções de outros programas
existe a cedência do CPU

mas se existir um escalonamento preemptivo, baseado em intervalo de tempo, o utilizador obtém a garantia que todos os programas têm oportunidade de execução concorrente

Evolução dos sistemas operativos e do escalonamento
processamento em série (eniac)
processamento em lote on-line (uso de cartões perfurados junto do CPU, só existe um processo em cada instante)
processamento em lote off-line (uso de computadores auxiliares para ler os cartões perfurados, falhas na sincronização entre estes e o CPU, só existe um processo em cada instante)
processamento em lote o spooling (uso de mecanismos de interrupção, uso de discos)
multiprogramação (são sistemas de lote multi-programados ou concorrentes) e interactividade (são sistemas de tempo partilhado/time-sharing, com rotatividade de processos. Existe a pseudo execução em paralelo dos processos)

Parte 3 – conceitos de multiprogramação
o pseudo-paralelismo, consiste em ter várias actividades a decorrer ao mesmo tempo (em sistemas multiprogramados)
(existe um tempo de vista pelos processos e o que é a real desdestruição do processador)

Monoprocessamento vs multiprogramação simples

com esta acção de mutilprogramação simples o tempo total de execução diminui

Tempo não partilhado vs tempo partilhado (ou muliprogramação simples VS multiprogramação preemptiva)

resultados visíveis são errados, já que apesar do tempo de execução no tempo não partilhado (multiprogramação simples) ser menor que no tempo partilhado (multiprogramação preemptiva) o tempo apenas é explicado pelo aumento do numero de trocas entre os processos

Resumo das figuras:
sistemas multi-programados: optimização do processador
sistemas de tempo partilhado: optimizar a interactividade

As prioridades
surgem nos algoritmos de escalonamento e permite ao processo ser atendido que não fazendo uso do FIFO

As prioridades podem ser:
prioridades fixas (tem em conta o tipo de processo, associadas à importância dos acontecimentos. por exemplo: processo paginador)
prioridades dinâmicas (têm em conta o comportamento do processo, com o objectivo de ser justo, evitar a monopolização ou starvation. Neste caso são dadas prioridades aos processo que melhor se encaixam nos critérios de optimização global da máquina)

Os escalonadores
Os escalonadores podem ser:
escalonador de longo prazo (responsável por admitir um processo a execução. quantos mais processo maior a latência da máquina)
escalonador de médio prazo (através de um algoritmo determina quando e qual o processo, no estado de executável, que deve obter o processador)
escalonador de curto prazo (ou despacho, comuta os processos, após decisão do escalonado de médio prazo). O tempo de latência do despacho = tempo de parar um processo + tempo de recomeçar um processo

Quando se comuta de processo temos que ter em conta várias actividades:
invocação do despacho
salvaguarda do contexto do processo que estava a ser executado
recuperação do contexto para colocar o novo processo em execução
saltar para a localização do processo

Parte 4 – conceito de estado de processos

Modelo de dois estados:
faz uso do algoritmo de escalonamento, para determinar qual de dois processos que fica com o processo primeiro

Modelo de três estados:
surge o estado “novo” – serve para manter a informação acerca do processo, cuja criação foi pedida mas não foi admitido a execução
surge o estado “terminado” – serve para manter a informação acerca do processo, já terminado mas ainda não foi aproveitado
surge o estado de “suspenso” – pedido pelo próprio processo ou de outro processo

Modelo completo:

Parte 5 – conceitos usados em escalonamento

os diferentes algoritmos de escalonamento estão relacionados com respostas diferentes à forma como a gestão do processador tem que ser feita (desempenho, suporte, fiabilidade, robustez..).
qualquer algoritmo de escalonamento tem que manter todos os recursos do sistema. igualmente ocupados (para evitar picos de utilização)

aquando da gestão do processador tem que ter em conta os seguintes conceitos:
previsibilidade,
equilíbrio dos recursos,
justiça e starvation,
processos I/O bound e CPU bound

Existem dois tipos de processos/threads:
processos/threads I/O bound (que fazem muitas operações de E/S, bloqueando-se frequentemente)
processos/threads CPU bound (utilizam intensivamente o processador, quase nunca se bloqueando)

a Justiça
todos os processos/threads devem ter a mesma utilização dos recursos do sistema

a starvation
Surge quando o processo/thread nunca obtém o recurso pretendido, ou porque o recurso esta bloqueado ou porque o próprio processo/thread esta bloequeado
solução do starvation:
uso de prioridades dinâmicas (aumentar a prioridade para processos que estão à mais tempo à espera)

Parte 6 – indicadores de desempenho

este tipo de indicadores permitem que se verifique como está a eficiência com que o sistema gere a informação

exemplos de métricas/indicadores:
utilização do processador (importante para sistemas multiprogramados),
throughput (quantidade de processos concluídos por unidade de tempo)
tournaround (tempo de execução/conclusão. Desde a criação do processo/thread até à sua conclusão)
prazos (aplica-se em sistemas de tempo real). Exemplo:
três processos com um prazo de 15 minutos e outros com 3 com um prazo e 120 minutos
algoritmoA: todos os prazos são cumpridos à tangente
algoritmoB: os prazos dos processos de 15 minutos são ligeiramente excedidos enquanto os de 120 minutos são cumpridos com grande margem. Aparentemente o algortimo B seria melhor pois, em média, o throughput e o turnaround são melhores, mas a percentagem de prazos cumpridos é pior, pelo que o algortimo A é melhor

latência (tempo de resposta. Só se aplica a sistemas multiprogramados interactivos. É mais significado em sistemas interactivos que o throughut)
razão de penalização (é a razão entre o tempo total do processo e o tempo que demoraria se não tivesse outros processos)
exemplo:

tempo de espera (tempo total que um processo passou para o estado de executável)
previsibilidade (medida qualitativa do que quantitativa, e de implementação complexa, já que deve sempre necessitar do mesmo tempo para se executar independentemente da carga)

O escalonador tem que ser capaz de:
minimizar a latência,
maximizar o throughput,
maximizar o equilibro de uso dos periféricos,
justiça

Mas podem surgir problemas por via de:
dispositivos de E/S
optimização levar à starvation.
ocorrência de deadlocks

Parte 7 – algoritmos de escalonamento
Os algortimos de escalonamento podem ser:
preemptivos (round robin e SRT e Feedback)
não preemptivos (FCFS, SPN e HRRN) -> não servem para sistemas multiprogramados de tempo partilhado

algoritmo FCFS – Firts Come First Served
em que:
favorece o CPU Bound bloqueando os processos I/O Bound
não optimiza a utilização de dispositivos
para processos/threads nao interactivas, que têm o mesmo tempo de execução
tempo de conclusão não é importante

algoritmo RoundRobin
em que:
tem por base um quantum (intervalo de tempo)
força a interrupção de uma thread ao fim de um tempo
tempo partilhado em sistemas multiprogramados
é justo, independentemente do tamanho dos processos todos são atendidos da mesma forma
não surge o starvation
tournaround e tempo de espera melhors que o FCFS, quando a duração dos processos varia

Exemplo1 de FCFS e RoundRobin em que:
três processos do tipo CPU bound
existem um quantum
a duração do processo A=12q, do B=3q e do C=3q
ordem de chegada: A, instante 0; B, instante 1; C, instante 2

Exemplo2 de FCFS e RoundRobin em que:
duração dos processo igual para todos = 6q

algoritmo SPN, Shortest Process Next
em que:
o próximo processo a ser executado é o que se espera que demore menos tempo;
não é preemptivo, não serve para sistemas multiprogramados,
situação de starvation dos processos longos face aos curtos
tem um melhor tournaround

algoritmo SRT, Shortest Remaining Time
em que:
o próximo processo/thread a ser executada é aquele cujo tempo restante de processamento é menor,
preemptivo (se um processo que estava bloqueado passar a executável e tiver tempo restante de processamento menor do que actualmente em execução, ocorre a preempção),
não é baseado em quantum
dificuldade: e qt tempo demoram os processos

algoritmo HRRN, Highest response Ratio Next
em que:
eliminar a starvation dos processos longos
valoriza o tempo esperado e a idade do processo no sistema
escolhe sempre o processo que tiver maior response ratio

RR (response ratio) = tempo de espera (w) + tempo de execução esperado (s) / tempo de execução esperado (s)

algoritmo de Feedback
em que:
quando quando não é possivel estimar o tempo de processamento
faz-se uso de uma análise na máquina no passado, para prever o que vai acontecer
faz uso de prioridades dinâmicas: a prioridade vai diminuindo ao longo da idade do processo
faz uso de quantum variável: atribui um quantum maior ao processo que esteja a ser penalizado e vice-versa

A escalabilidade:
uma solução em engenharia é escalável, se o custo for proporcional à dimensão do problema
um algoritmo de escalonamento é escalável se o seu overhead de execução for proporcional ao numero de processo em execução

Para evitar que o escalonamento se torne não escalável usamos a técnica de escalonamento multi-lista: agrupando os processos executáveis em conjuntos, promovendo os que estão mais perto do que está a ser analisado (primeiro nível e despromovendo para o nível mais baixo os que estão no primeiro nível.

coisas maybe importantes:
descrever o que é um quantum
o que é a preempção
conceito de justiça
o que é o CPU bound e i/o bound
o que é o tempo de espera, throughput, penalty ratio, conceito de justiça,
descrever o modo de funcionamento de cada um dos algoritmos estudados,
objectivos do escalonamento e duas principais dificuldades na obtenção de uma gestão óptima absoluta
explicar a influencia da preempção ou ausência dela num sistema
comparar dois algoritmos, para um cenário, e explicar qual o melhor e porquê
descrever a influencia da optimização de alguns indicadores de desempenho sobre os outros..
calcular tempos e indicadores..

Tags :

Desenvolvimento na YoYo Games (GameMaker)..

Uma história interessante acerca de alguém que participou no desenvolvimento do GameMaker, desde a sua verão 1 até ao GMS2.

+infos(a fonte de informação): LINK

Tags : ,

iGBL2019 (em Cork City)

“iGBL2019 will be held on 26th, 27th and 28th June 2019 in Cork City (Ireland), and we welcome abstracts from developers, doctoral students, instructors and researchers for game demos, presentations or workshops on the themes of games for learning, motivation and change.”
…and submit your abstract by 25th January 2018.

+infos(oficial): http://www.igbl-conference.com/

Tags : , ,

05_IntroducaoASP.NET MVC

Introdução ao MVC:
separação do UI de uma aplicação em três aspectos:
Controller (partilha eventos com a view e faz ligação ao model)
Model (partilha propriedades com a view)
View
(vista, modelo e controlador)
vista (nterface do utilizador para apresentação dos dados, isto é, representa o UI da aplicação)
modelo
controlador (Traduz as ações do utilizador em operações apropriadas; e é o cérebro da operação, responsável por tratar o pedido HTTP)

exemplo dos procedimentos:
endereço web, controlador, modelo e depois a view

existe um Router que selecciona o controlador correcto para tratar do request

os Actions Selectores são atributos que podem ser aplicados aos Actions Methods, e permitem o mecanismo de routing identificar o action correcto para manipular determinado pedido.

//exemplo do HttpGet 
//no controlador
[HttpGet]
public ActionResult Edit(int id)
{
}
//na view
@Html.ActionLink("Editar", "Edit", new { id = item.Id })

As actions podem ter parâmetros de entrada (tipos de dados primitivos ou complexos)
e para isso é necessário que o controlador receba esses valores

public ActionResult Editar(int id)
{
return Content("id=" + id);
}
Tags :

06_ASP.NET Passagem Dados, ViewsRazorLayouts

A passagem de dados:
A passagem de dados do Controlador à Vista, e ao próximo request, pode ser efetuada de outras formas para além da passagem de dados através de um argumento da View

Pode ser usado nas passagem de dados:
ViewData emque o Objeto é do tipo dicionário, acessível usando strings como chaves e necessita do type casting para tipos complexos
ou o ViewBag, objecto do tipo dinâmico, não necessita de type casting nem verificações de null e as propriedades são adicionadas em tempo de execução

//exemplo: ViewData
//no controlador
public ActionResult Vencedor()
{
var pescador = new Pescador() { Nome = "Pedro" };
ViewData["PescadorData"] = pescador;
return View();
}
//na View
@using MVC1.Models
@model MVC1.Models.Pescador
@{
ViewBag.Title = "Vencedor";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>@(((Pescador)ViewData["PescadorData"]).Nome)</h2>

ou

//exemplo: ViewBag
//no controlador
public ActionResult Vencedor()
{
var pescador = new Pescador() { Nome = "Pedro" };
ViewBag.PescadorProp = pescador;
return View();
}
//na View
@using MVC1.Models
@model MVC1.Models.Pescador
@{
ViewBag.Title = "Vencedor";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>@ViewBag.PescadorProp.Nome</h2>

As viewes:
A view não deve executar qualquer lógica de negócio, ou interagir com a base de dados directamente.
Deve trabalhar somente com os dados que lhe são fornecidos pelo controlador.

//exemplo para obter /pescadores/Index
public ActionResult Index()
{
return View();
}
//exemplo para obter /pescadores/OutraView
public ActionResult Index()
{
return View("OutraView");
}

A Sintaxe Razor:
Minimiza a quantidade de sintaxe e caracteres extra
Codifica automaticamente qualquer output enviado através do @ de forma a prevenir ataques cross site scripting
Blocos de código estão delimitados com @{ … }
Ficheiros C# tem extensão .cshtml

//exemplo razor view
@{ var mensagem = "Programação"; }
<p>O valor da Mensagem é: @mensagem</p>
@{
var boasVindas= "Bem vindo ao Razor!";
var diaSemana= DateTime.Now.DayOfWeek;
var mensagem = boasVindas + " Hoje é " + diaSemana;
}

Os Layouts:
_Layout.cshtml, Define o que se quer apresentar em todas as páginas da aplicação
A view _Layout deve ser especificada na pasta Shared existente na secção Views
E o RenderBody permite especificar onde será apresentado o conteúdo individual das views

Tags : , , ,

07_Forms, HtmlHelpers, Validações – DataAnnotations

Os Html Helpers permitem:
Permitem a geração de elementos HTML

O Razor view engine já define um conjunto de helpers
Permite criar de forma simples pequenos blocos html tais como:
Criação de elementos de inputs;
Criação de ligações;
Criação de forms;

Existem três tipos de Html Helpers:
HTML Helpers Inline
Built-in HTML Helpers
e HTML Helpers personalizados

@Html.ActionLink(“Novo Aluno”, “Create”)
significa que:
Novo Aluno

Podemos fazer uso do @HTML.TextBox() usando o:
Método loosely typed e não apresenta erros de compilação quando se especifica o nome da propriedade errado,

ou
Método strongly typed que apresenta erro de compilação quando se especifica um nome de propriedade errado e gera o elemento TextBox para a propriedade especificada no modelo, recorrendo a uma expressão lambda

//exemplo:
@Html.TextBox("Nome", null, new { @class = "form-control" })
@Html.TextBoxFor(m => m.Nome, new { @class = "form-control" })

o uso do For permite verificar erros em tempo de compilação

//outros exemplos:
@Html.LabelFor(model => model.Numero, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.Numero, new { htmlAttributes = new { @class = "form-control" } })
@Html.HiddenFor(model => model.Id)
@Html.DisplayNameFor(model => model.Numero)
@Html.DisplayFor(model => model.Numero)

As DataAnnotations é uma forma de adicionar informação contextual a classes ou membros da classe;

Existem três categorias principais:
Validation
Display
Modelling

//exemplo:
[StringLength(50,MinimumLength = 3)]
//exemplo:
[Required(ErrorMessage = "Especifique um nome.")]
//exemplo:
[StringLength(50,MinimumLength = 3,ErrorMessage ="O nome deve ter no mínimo 3 e maximo de 50 carateres.")]
//exemplo:
[Range(0, 18, ErrorMessage ="Idade deve estar entre 0 e 18")]
//exemplo:
[Display(Name = "Endereço Eletrónico")]
//exemplo:
[DisplayFormat(ApplyFormatInEditMode =true,DataFormatString ="{0:c}")]
//exemplo:
[ReadOnly(true)]
//exemplo:
[RegularExpression(@"\d{9}", ErrorMessage = "Nº de Telemovel invalido!")]
//exemplo:
[StringLength(10, MinimumLength = 5)]

e pelo uso das ValidationMessageFor surgem:

<div class="form-group">
@Html.LabelFor(model => model.Morada, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Morada, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Morada, "", new { @class = "text-danger" })
</div>
</div>

A validação do lado do cliente pode ser feita recorrendo a expressões do jQuery
A validação dos dados:
o MVC executa a lógica de validação durante o model binding, através dos métodos métodos UpdateModel e TryUpdateModel de um controlador

//exemplo: Model Binding
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Aluno aluno = db.Alunos.Find(id);
if (aluno == null)
{
return HttpNotFound();
}
return View(aluno);
}
Tags : , ,

09_EntityFramework_CodeFirst

Os passos para trabalhar com o modo de 09_EntityFramework são:
_criar o contexto (classe que herda da DBcontext)
_especificar a connection string no ficheiro web.config

De seguida devemos:
criar os diferentes modelos de dados por exemplo:
aluno..

public class Aluno
{
public int AlunoID { get; set; }
public string AlunoNome { get; set; }
public DateTime? DataNascimento { get; set; }
public IList<Disciplina> Disciplinas { get; set; }
public Aluno()
{
}
}

Disciplina..

public class Disciplina
{
public int DisciplinaId { get; set; }
public string DisciplinaNome { get; set; }
public Curso Curso { get; set; }
public Docente Docente { get; set; }
public IList<Aluno> Alunos { get; set; }
}

Curso..

public enum Curso
{
INFORMATICA=1,
BIOMEDICA=2,
CIVIL=3,
MECANICA=4
}

Docente..

{
public class Docente
{
public int DocenteId { get; set; }
public string DocenteNome { get; set; }
}

Depois existe a necessidade de criar o contexto

public class EscolaContext : DbContext
{
public EscolaContext() : base("name=DefaultConnection")
{
}
public DbSet<Aluno> Alunos { get; set; }
public DbSet<Disciplina> Disciplinas { get; set; }
public DbSet<Docente> Docentes{ get; set; }
}

Especificar a conenection string no ficheiro web.config
Ir aos nugetpackage manager, e package manager manager console
Activar as Migrations: comando enable-migrations
Criar uma migration: comando add-migration “modeloInicialV0” (sempre que alterarmos os modelos)
E actualizar a base de dados: update-database

No ficheiro configuration.cs podemos realizar o seed das entidades e acrescentar dummy data nas tabelas
exemplo do seed (e a dummy data está noutro CS):

context.FixedStations.AddOrUpdate(
	f => new { f.RecordDateFs, f.LocalizationFs, f.StartIndexDisponibilityFs, f.EndIndexDisponibilityFs }, 
	DummyData.GetFixedStations().ToArray()
);
context.SaveChanges();

exemplo de dummy data:

context.Docentes.AddOrUpdate(a => a.DocenteNome, new Docente
{
DocenteNome = "Maria",
Disciplinas = new Collection<Disciplina>() {
new Disciplina() {DisciplinaNome="POO" }
}
});
}

É possivel alterar o que as convenções geram através de um processo de overriden:
usando DataAnnotaions ou FluentAPI

As DataAnnotaions:
simples de especificar, menos flexíveis, úteis para anotações simples: obrigações, tamanhos, máximos..

//exemplo de DataAnnotations
[Table("Alunos")]
public class Aluno
{}
//ou
[MaxLength(150), Required]
//ou
public DateTime? DataNascimento { get; set; }
//ou
[Column("Nome",TypeName="varchar")]
//ou
[ForeignKey("Docente")]
public int DocenteId { get; set; }
public virtual Docente Docente { get; set; }
//ou
[Key]
//ou
[NotMapped]

o FluentAPI:
permite configurar a configuração de relacionamentos entre classes mais complexas, separações de concerns
As fluentApi são escritas nos contextos
O código deve ser aplicado no método OnModelCreating(DbModelBuilder modelBuilder) da class que deriva do DbContext
Permite mais controlo na definição das relações usando HAS e o With

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Aplica as configurações recorrendo ao Fluent API
}
//exemplo de FluentAPI
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Disciplina>()
.Property(t => t.DisciplinaNome)
.IsRequired();
//ou
modelBuilder.Entity<Aluno>().ToTable("Alunos");
//ou
modelBuilder.Entity<Aluno>().HasKey(t => t.NAluno);

Podemos usar ambas mas temos que ter em conta que as precedências são:
FluentAPI
DataAnnotaions
Convenções

Os relacionamentos com o fluentApi:
HasMany() – Se A tem muitos objetos to B
HasRequired – Se A tem apenas um objeto de B
HasOptional – Se A tem 0 ou 1 objeto de B
WithMany() – Se B tem muitos objetos to A
WithRequired – Se B tem apenas um objeto de A
WithOptional – Se B tem 0 ou 1 objeto de A

//relacionamento 1-N
modelBuilder.Entity<Professor>()
.HasMany(p => p.Disciplinas)
.WithRequired(d => d.Professor)
.HasForeignKey(d => d.ProfessorId);
//relacionamento N-M
modelBuilder.Entity<Professor>()
.HasMany(p => p.Disciplinas)
.WithMany(d => d.Professores)
.Map(m => m.ToTable("ProfessorDisciplinas“)) 
//relacionamento 1-0..1
modelBuilder.Entity<Professor>()
.HasOptional(p => p.Disciplina)
.WithRequired(d => d.Professor);
//relacionamento 1-1
modelBuilder.Entity<Professor>()
.HasRequired(p => p.Disciplina)
.WithRequiredPrincipal(d => d.Professor);
Tags :

08_EntityFramework e DatabaseFirst

O objectivo da EntityFramework é o de aumentar a produtividade do programador, reduzindo tarefas redundantes para persistência de dados

Existem várias forma de especificar o modelo de dados:
Database First (Bd -> classes de domínio)
CodeFirst (classes de dominio -> Bd)
ModelFirst (UML e surgem as classes de dominio via EF e a base de dados)

O contexto (Model.Contex.cs):
Contem a classe que deriva da classe DbContext
Fornece a propriedade para cada classe do modelo que corresponde a tabela da BD (Fornecedor.cs Cliente.cs)

Os modelos:
os modelos representam as tabelas da base de dados
quando pretendemos usar o “maldito” scaffolding, recorremos à classe de contexto e ao modelo de classes

o Linq e a EntityFramework:
o Lazy Loading: o loading não é executado de forma imediata, é apenas quando se acede aos elementos (bom apenas para aplicações desktop)

Problema do n+1 do lazy loading:
fazer uso de inlcude

Alternativa ao lazy loading, é o explicit loading:
útil quando se pretende efectuar o load de muitos objectos e as queries ficam complexas (as queries são separadas), mas faz muitas queries na base de dados
ou o Eager loading:
quando se obtém os dados da BD em apenas um round-trip e faz uso de joins

Como adicionar objectos na BD:

//v1
var aluno = new Aluno { Nome = "Pedro",
UserName="pedro@residual.ptt",
Email ="pedro@residual.pt",
CursoId=1
};
db.Alunos.Add(aluno);
db.SaveChanges();

ou

//v2
var cursos = db.Cursos.ToList();
var curso = db.Cursos.Single(c => c.CursoId == 1);
var aluno = new Aluno { Nome = "Pedro",
UserName="pedro@residual.pt",
Email ="pedro@residual.pt",
Curso = curso
};
db.Alunos.Add(aluno);
db.SaveChanges();

Como alterar objectos na BD:

var curso = db.Cursos.Find(4); // ou var curso = db.Cursos.Single(c => c.CursoId == 4);
curso.Objectivos = "Curso bla bla bla";
curso.Nome = "Novo Nome";
db.SaveChanges();

Como remover objectos na BD:

//Com CascadeDelete ativo
var curso = db.Cursos.Find(4);
db.Cursos.Remove(curso);
db.SaveChanges();

Ou

//Sem CascadeDelete ativo
var curso = db.Cursos.Include(c => c.Alunos)
.Single(c => c.CursoId == 4);
db.Alunos.RemoveRange(curso.Alunos);
db.Cursos.Remove(curso);
db.SaveChanges();
Tags : ,

10_Security in web applications (pweb)

Segurança em aplicações Web
O que é uma vulnerabilidade? é uma fraqueza que permite aos atacantes ganharem acesso ao sistema ou a informações
Causas de vulnerabilidades:
complexidade
falhas no desenho da app
software bugs
falhas ao nível das passwords e privilégios

Uma vulnerabilidade é uma fault, que deixa espaço para a exploração maliciosa de um sistema.

Exemplo de ameaças ao software:
Denial of service (Oversize Payload, Coercive Parsing, Oversize Cryptography, Attack Obfuscation, Unvalidated Redirects and Forwards)
Brute force (Insecure Cryptographic Storage, Broken Authentication and Session Management)
Spoofing (Insufficient Transport Layer Protection, Metadata Spoofing, Security misconfiguration)
Injection (SQL Injection, Cross site Scripting (XSS), Cross Site Request Forgery, XPath Injection)
Flooding (Instantiation Flood, Indirect Flooding, BPEL State Deviation)

Exemplo de vulnerabilidades de aplicações web:
_estão expostas
_os hackers movem as suas atenções da rede para o código da aplicação web
_aplicação de vários níveis de ataques: (portas da network, tempered values, o código implementado nas aplicações)

Vulnerabilidades (injection vulnerabilities):
SQL injection (alterar a expressão de SQL que está a ser usada, alterar os dados da base de dados ou até mesmo executar comandos no sistema)
XPath injection (modificar o xpath que está previamente programado, ou ganhar acesso através do acesso a documentos XML)
Code execution (é possivel manipular os dados de entrada para enganar o ocidgo do servidor)
Cross-site request forgery (CSRF) (o utilizador pode manipular um utilizador para que este execute acções indesejadas assim que está autenticado. Faz isto enviado um link para o utilizador)

Soluções para segurança das aplicações web:
defense in depth: endurecendo todas as camadas da infraestrutura tecnológica através:
colocar restrições na capacidade do servidor de correr componentes autonomamente;
colocar ou elevar o nível dos filtros relacionados com os níveis de tráfico;
fazer uso de um IDS para identificar actividade anómala na infraestrutura;

Todas as entradas são consideradas maliciosas até prova em contrário.

Linhas de protecção:
Input validation (normalização dos dados de entrada, usar filtros para recusar valores fora do dominio)
Hotspot protection (garantir que está correctamente implementada)
Output validation (validar a saida de um determinado processo antes de este ser enviado)
Protect back-end resources (funcionalidades desnecessárias devem ser removidas, dedicar especial atenção quando se lida com informação)

Lidar com o SQL Injection:
impor validação do SQL;

Fazer uso de ferramentas online:
HP WebInspect
WSFuzzer
Acunetix
WatchFire
Rational APPScan
Foundstone
WEDigger

Tags : ,

04_Introdução ao C# (pweb)

POO, princípios básicos:
abstração
herança
encapsulamento
polimorfismo

O mundo tem objectos que possuem características e comportamentos. Todos os objectos têm: estado (conjunto de propriedades de um objecto), comportamento (conjunto de acções sobre o objecto), unicidade (todo o objecto é único).

Objecto = Dados + Código
Dados -> comunica com -> atributos
Código -> comunica com -> métodos

nivel_acesso class nome_da_classe
{
        // bloco de instruções
}

um classe tem:
nivel_acesso: nível de proteção da classe ( internal/public ou abstract ou sealed)
pode existir uma class @override -> permite substituir qualquer coisa (por exemplo um método)
pode existir numa class o virtual -> permite sobrescrever qualquer coisa  (por exemplo um método)
e o new é usado para ocultar um determinado método

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PWEB_estudoCsharp
{
    class Program
    {
        static void Main(string[] args)
        {
            @override x = new @override();
            Console.WriteLine(x.Numero);
            Console.ReadKey();
        }
    }
    class @override
    {
        public int Numero { get; set; }
        public @override()
        {
            Numero = 5;
        }
    }
}

o this serve para nos referirmos ao próprio (variável, campo, método..) do objecto e não a algo “local”

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PWEB_estudoCsharp
{
    class Program
    {
        static void Main(string[] args)
        {
            Aviao a= new Aviao();
            Aviao b = new Aviao("USA");

            Console.WriteLine("Vem com o nome {0}", a.ONome);
            Console.WriteLine("Vem com o nome {0}", b.ONome);
            Console.ReadKey();
        }
    }
    class Aviao
    {
        public string ONome="TAP";

        public Aviao()
        {
        }

        public Aviao(string nome)
        {
            this.ONome = nome;

        }
    }
}

assim uma classe tem os seguintes membros:
variáveis (campos ou atributos(members fields));
métodos
propriedades (gets e sets)

Os atributos têm sempre um nível de protecção:
private (por defeito),
public (acedido a partir de outras classes ou métodos),
protected (acedido a partir da classe onde foi declarado e/ou classes derivadas),

protected internal (acedido a partir de uma classe onde foi declarado ou de classes derivadas)

Podemos também dividir as classes, usando a terminologia partial

As classes também têm um nível de protecção:
internal (por defeito, a classe acedida apenas no projeto),
public (acedida de qualquer parte),
abstract ou internal abstract (acedida apenas no projeto e não pode ser instanciada, apenas derivada de)
public abstract (acessível de qualquer parte e não pode ser instanciada, apenas derivada de)
sealed (acessível apenas no projeto, não pode ser derivada, apenas instanciada)
public sealed
O encapsulamento tem como objectivo principal ocultar de pormenores internos da classe. Para fora vão apenas os métodos (se for o caso). Normalmente essa implementação é feita usando getters e setters

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PWEB_estudoCsharp
{
    class Program
    {
        //exemplo do encapsulamento
        static void Main(string[] args)
        {
            Aviao a= new Aviao();
            Aviao b = new Aviao();

            Console.WriteLine("Vem com o nome {0}", a.ONome);
            Console.WriteLine("Vem com o nome {0}", b.ONome);
            Console.ReadKey();
        }
    }
    class Aviao
    {
        private string nome = "TAP";
        public string ONome
        {
            get { return nome; }
            set { nome = value; }
        }
    }
}

Os métodos (funções dentro das classes) podem ter parâmetros, sendo que estes podem ser passados por valor, ou então por referência, ou uso do out.
O uso da referência (ref) permite actualizar uma variável.
Existe tambem o formato de out

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PWEB_estudoCsharp
{
    class Program
    {
        //exemplo do ref
        static void Main(string[] args)
        {
            Contas a = new Contas();
            int numero = -3;
           Console.WriteLine("mostra resultados {0}", a.FazContas(ref numero));

            Console.ReadKey();
        }
    }
    class Contas
    {
        private int valor = 10;

        public int FazContas (ref int recebe)
        {
            if (recebe &lt; 0)
            {
                valor = this.valor;
            }
            else
            {
                valor = recebe * recebe;
            }
            return valor;
        }
    }
}

Podemos também utilizar arrays, nomeadamente parâmetros como argumentos

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PWEB_estudoCsharp
{
    class Program
    {

        //exemplo do arrays
        static void Main(string[] args)
        {
            Contas a = new Contas();
            int[] numeros = {1,2,3};

            Console.WriteLine("mostra resultados {0}", a.FazContas(numeros));

            Console.ReadKey();
        }
    }
    class Contas
    {
        public int FazContas (params int[] recebeArray)
        {
            int soma = 0;
            foreach (var r in recebeArray)
            {
                soma += r;
            }
            return soma;
        }
    }
}

É possivel passar “invocar” um função ou método dependendo dos valores dos argumentos que recebe

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PWEB_estudoCsharp
{
    class Program
    {
        //exemplo do argumentos
        static void Main(string[] args)
        {
            Argumentos();
            Argumentos(texto:"Peter");
            Console.ReadKey();
        }
        static void Argumentos(int numero = 0, string texto = "Portugal")
        {
            Console.WriteLine("mostra resultados {0}, {1}", numero, texto);
        }
    }
}

O polimorfismo:
definição de métodos ou interfaces, que são genéricos e que podem ser implementados de diversas formas
Vantagens do polimorfismo:
reutilizar código;
tempo de desenvolvimento;
manutenção.
A herança:
permite reutilizar o código, permite a construção de classes baseadas noutras, sendo que a subclasse:
herda todas as propriedades e métodos da classe base;
pode incluir ou sobrepor novas propriedades e métodos.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PWEB_estudoCsharp
{
    class Program
    {
        //exemplo de herança
        static void Main(string[] args)
        {
            Filho f = new Filho();
            Console.WriteLine("mostrar {0}", f.Metodo2());
            Console.WriteLine("mostrar {0}", f.Metodo1());
            Console.ReadKey();
        }
        class Mae
        {
            private int numero = 10;
            public Mae() { }

            public int Metodo1()
            {
                return numero;
            }
        }

        class Filho:Mae
        {
            private int valor = 1;
            public int Metodo2()
            {
                return valor;
            }
        }
    }
}

Os membros da classe base, podem ser virtuais. A classe que herda uma classe com membros virtuais pode ser overridden pela classe que a herda, fazendo com que a classe derivada possa fornecer uma implementação alternativa para o membro.
O uso da palavra sealed evita que uma classe ou membros virtuais sejam herdados

uma classe base pode ser abstracta. É uma classe conceptual no qual se definem funcionalidades para as subclasses (que a herdam) e que possam implementá-las de forma não obrigatória.
se for estabelecido um método abstracto, então essa classe também o é. esse método não possui implementação na classe abstracta, apenas é e obrigatoriamente a sua definição e a implementação de ser feita na classe derivada.

Podem existir interfaces, usando a expressão interface
Todas as interfaces são publicas, os seus métodos não têm implementação, mas quem faz uso de uma interface tem que implementar as funcionalidades dos métodos.

Podem também tratar das excepções usando as expressões:
try
catch
finally
throw

Tags : ,

Livro: A History of Videogames


Mais um livro que gostava de ter acesso:
A History of Videogames, de Iain Simons, James Newman, e Ian Livingstone

+infos(comprar): LINK

Tags : , ,

A história acerca da pirataria dos videojogos no Brasil

Uma história acerca da pirataria dos videojogos no Brasil. São três episódios:
Episódio 1 – Arcades Improvisados
“Com as máquinas de pinball da Taito, a indústria dos games no Brasil teve seu começo nas lojas sujas do centro de São Paulo e nas fábricas poluídas do Amazonas. Isso marcou o início de uma cultura gamer recheada de adaptações e clones nacionais muitas vezes criados às margens da lei.”
Episódio 2 – Consoles e jogos nacionais
“O Brasil passa a ter não só um mercado estável, mas também os primeiros jogadores. O lance é que grandes empresas, como a Nintendo, não estavam oficialmente no país. Então, alguns empreendedores começaram a criar os primeiros emuladores: produtos nacionais que eram adaptações de games e consoles populares. Como o Master System, da TecToy, e o Phantom System, da Gradiente.”
Episódio 3 – Modificações e o começo do eSports
“Na virada dos anos 2000, com os cartuchos dando lugar aos CDs e DVDs, a cultura de games no Brasil teve uma febre modder. Patchs de jogos mainstream como Winning Eleven (PlayStation 2) e Counter-Strike (PC) eram mais populares que os games originais, fazendo empresas como Microsoft e Sony finalmente chegarem oficialmente ao país. Também foi o começo da cultura de eSports no Brasil.”

+infos(fonte): LINK , pela RedBull

Tags :

+1a história.. acerca do desenvolvimento de videojogos

Como não existem duas sem três, aqui fica mais uma referência acerca do desenvolvimento de videojogos ao longo dos tempos. A narrativa começa pelo uso de consolas em casa..1940

Since its commercial birth in the 1950s as a technological oddity at a science fair, gaming has blossomed into one of the most profitable entertainment industries in the world.
The mobile technology boom in recent years has revolutionized the industry and opened the doors to a new generation of gamers. Indeed, gaming has become so integrated with modern popular culture that now even grandmas know what Angry Birds is, and more than 42 percent of Americans are gamers and four out of five U.S. households have a console.

The Early Years
The first recognized example of a game machine was unveiled by Dr. Edward Uhler Condon at the New York World’s Fair in 1940. The game, based on the ancient mathematical game of Nim, was played by about 50,000 people during the six months it was on display, with the computer reportedly winning more than 90 percent of the games.
However, the first game system designed for commercial home use did not emerge until nearly three decades later, when Ralph Baer and his team released his prototype, the “Brown Box,” in 1967.
The “Brown Box” was a vacuum tube-circuit that could be connected to a television set and allowed two users to control cubes that chased each other on the screen. The “Brown Box” could be programmed to play a variety of games, including ping pong, checkers and four sports games. Using advanced technology for this time, added accessories included a lightgun for a target shooting game, and a special attachment used for a golf putting game.
According to the National Museum of American History, Baer recalled, “The minute we played ping-pong, we knew we had a product. Before that we weren’t too sure.”
Magnavox-OdysseyThe “Brown Box” was licensed to Magnavox, which released the system as the Magnavox Odyssey in 1972. It preceded Atari by a few months, which is often mistakenly thought of as the first games console.
Between August 1972 and 1975, when the Magnavox was discontinued, around 300,000 consoles were sold. Poor sales were blamed on mismanaged in-store marketing campaigns and the fact that home gaming was a relatively alien concept to the average American at this time.
However mismanaged it might have been, this was the birth of the digital gaming we know today.

Onward To Atari And Arcade Gaming
Sega and Taito were the first companies to pique the public’s interest in arcade gaming when they released the electro-mechanical games Periscope and Crown Special Soccer in 1966 and 1967. In 1972, Atari (founded by Nolan Bushnell, the godfather of gaming) became the first gaming company to really set the benchmark for a large-scale gaming community.
The nature of the games sparked competition among players, who could record their high scores … and were determined to mark their space at the top of the list.
Atari not only developed their games in-house, they also created a whole new industry around the “arcade,” and in 1973, retailing at $1,095, Atari began to sell the first real electronic video game Pong, and arcade machines began emerging in bars, bowling alleys and shopping malls around the world. Tech-heads realized they were onto a big thing; between 1972 and 1985, more than 15 companies began to develop video games for the ever-expanding market.

The Roots Of Multiplayer Gaming As We Know It
During the late 1970s, a number of chain restaurants around the U.S. started to install video games to capitalize on the hot new craze. The nature of the games sparked competition among players, who could record their high scores with their initials and were determined to mark their space at the top of the list. At this point, multiplayer gaming was limited to players competing on the same screen.
The first example of players competing on separate screens came in 1973 with “Empire” — a strategic turn-based game for up to eight players — which was created for the PLATO network system. PLATO (Programmed Logic for Automatic Teaching Operation), was one of the first generalized computer-based teaching systems, originally built by the University of Illinois and later taken over by Control Data (CDC), who built the machines on which the system ran.
According to usage logs from the PLATO system, users spent about 300,000 hours playing Empire between 1978 and 1985. In 1973, Jim Bowery released Spasim for PLATO — a 32-player space shooter — which is regarded as the first example of a 3D multiplayer game. While access to PLATO was limited to large organizations such as universities — and Atari — who could afford the computers and connections necessary to join the network, PLATO represents one of the first steps on the technological road to the Internet, and online multiplayer gaming as we know it today.
At this point, gaming was popular with the younger generations, and was a shared activity in that people competed for high-scores in arcades. However, most people would not have considered four out of every five American households having a games system as a probable reality.

Home Gaming Becomes A Reality
In addition to gaming consoles becoming popular in commercial centers and chain restaurants in the U.S., the early 1970s also saw the advent of personal computers and mass-produced gaming consoles become a reality. Technological advancements, such as Intel’s invention of the world’s first microprocessor, led to the creation of games such as Gunfight in 1975, the first example of a multiplayer human-to-human combat shooter.
While far from Call of Duty, Gunfight was a big deal when it first hit arcades. It came with a new style of gameplay, using one joystick to control movement and another for shooting direction — something that had never been seen before.
In 1977, Atari released the Atari VCS (later known as the Atari 2600), but found sales slow, selling only 250,000 machines in its first year, then 550,000 in 1978 — well below the figures expected. The low sales have been blamed on the fact that Americans were still getting used to the idea of color TVs at home, the consoles were expensive and people were growing tired of Pong, Atari’s most popular game.
When it was released, the Atari VCS was only designed to play 10 simple challenge games, such as Pong, Outlaw and Tank. However, the console included an external ROM slot where game cartridges could be plugged in; the potential was quickly discovered by programmers around the world, who created games far outperforming the console’s original designed.
The integration of the microprocessor also led to the release of Space Invaders for the Atari VCS in 1980, signifying a new era of gaming — and sales: Atari 2600 sales shot up to 2 million units in 1980.
As home and arcade gaming boomed, so too did the development of the gaming community. The late 1970s and early 1980s saw the release of hobbyist magazines such as Creative Computing (1974), Computer and Video Games (1981) and Computer Gaming World (1981). These magazines created a sense of community, and offered a channel by which gamers could engage.

Personal Computers: Designing Games And Opening Up To A Wider Community
The video game boom caused by Space Invaders saw a huge number of new companies and consoles pop up, resulting in a period of market saturation. Too many gaming consoles, and too few interesting, engaging new games to play on them, eventually led to the 1983 North American video games crash, which saw huge losses, and truckloads of unpopular, poor-quality titles buried in the desert just to get rid of them. The gaming industry was in need of a change.
At more or less the same time that consoles started getting bad press, home computers like the Commodore Vic-20, the Commodore 64 and the Apple II started to grow in popularity. These new home computer systems were affordable for the average American, retailing at around $300 in the early 1980s (around $860 in today’s money), and were advertised as the “sensible” option for the whole family.
These home computers had much more powerful processors than the previous generation of consoles; this opened the door to a new level of gaming, with more complex, less linear games. They also offered the technology needed for gamers to create their own games with BASIC code. Even Bill Gates designed a game, called Donkey (a simple game that involved dodging donkeys on a highway while driving a sports car). Interestingly, the game was brought back from the dead as an iOS app back in 2012.
While the game was described at the time as “crude and embarrassing” by rivals at Apple, Gates included the game to inspire users to develop their own games and programs using the integrated BASIC code program.
Magazines like Computer and Video Games and Gaming World provided BASIC source code for games and utility programs, which could be typed into early PCs. Games, programs and readers’ code submissions were accepted and shared.
In addition to providing the means for more people to create their own game using code, early computers also paved the way for multiplayer gaming, a key milestone for the evolution of the gaming community.
Early computers such as the Macintosh, and some consoles such as the Atari ST, allowed users to connect their devices with other players as early as the late 1980s. In 1987, MidiMaze was released on the Atari ST and included a function by which up to 16 consoles could be linked by connecting one computer’s MIDI-OUT port to the next computer’s MIDI-IN port.
While many users reported that more than four players at a time slowed the game dramatically and made it unstable, this was the first step toward the idea of a deathmatch, which exploded in popularity with the release of Doom in 1993 and is one of the most popular types of games today.
The real revolution in gaming came when LAN networks, and later the Internet, opened up multiplayer gaming.
Multiplayer gaming over networks really took off with the release of Pathway to Darkness in 1993, and the “LAN Party” was born. LAN gaming grew more popular with the release of Marathon on the Macintosh in 1994 and especially after first-person multiplayer shooter Quake hit stores in 1996. By this point, the release of Windows 95 and affordable Ethernet cards brought networking to the Windows PC, further expanding the popularity of multiplayer LAN games.
Multiplayer gaming took the gaming community to a new level because it allowed fans to compete and interact from different computers, which improved the social aspect of gaming. This key step set the stage for the large-scale interactive gaming that modern gamers currently enjoy. On April 30, 1993, CERN put the World Wide Web software in the public domain, but it would be years before the Internet was powerful enough to accommodate gaming as we know it today.

The Move To Online Gaming On Consoles
Long before gaming giants Sega and Nintendo moved into the sphere of online gaming, many engineers attempted to utilize the power of telephone lines to transfer information between consoles.
William von Meister unveiled groundbreaking modem-transfer technology for the Atari 2600 at the Consumer Electronics Show (CES) in Las Vegas in 1982. The new device, the CVC GameLine, enabled users to download software and games using their fixed telephone connection and a cartridge that could be plugged in to their Atari console.
The device allowed users to “download” multiple games from programmers around the world, which could be played for free up to eight times; it also allowed users to download free games on their birthdays. Unfortunately, the device failed to gain support from the leading games manufacturers of the time, and was dealt a death-blow by the crash of 1983.
Real advances in “online” gaming wouldn’t take place until the release of 4th generation 16-bit-era consoles in the early 1990s, after the Internet as we know it became part of the public domain in 1993. In 1995 Nintendo released Satellaview, a satellite modem peripheral for Nintendo’s Super Famicom console. The technology allowed users to download games, news and cheats hints directly to their console using satellites. Broadcasts continued until 2000, but the technology never made it out of Japan to the global market.
Between 1993 and 1996, Sega, Nintendo and Atari made a number of attempts to break into “online” gaming by using cable providers, but none of them really took off due to slow Internet capabilities and problems with cable providers. It wasn’t until the release of the Sega Dreamcast, the world’s first Internet-ready console, in 2000, that real advances were made in online gaming as we know it today. The Dreamcast came with an embedded 56 Kbps modem and a copy of the latest PlanetWeb browser, making Internet-based gaming a core part of its setup rather than just a quirky add-on used by a minority of users.
The Dreamcast was a truly revolutionary system, and was the first net-centric device to gain popularity. However, it also was a massive failure, which effectively put an end to Sega’s console legacy. Accessing the Internet was expensive at the turn of the millennium, and Sega ended up footing huge bills as users used its PlanetWeb browser around the world.
Experts related the console’s failure to the Internet-focused technology being ahead of its time, as well as the rapid evolution of PC technology in the early 2000s — which led people to doubt the use of a console designed solely for gaming. Regardless of its failure, Dreamcast paved the way for the next generation of consoles, such as the Xbox. Released in the mid-2000s, the new console manufacturers learned from and improved the net-centric focus of the Dreamcast, making online functionality an integral part of the gaming industry.
The release of Runescape in 2001 was a game changer. MMORPG (massively multiplayer online role-playing games) allows millions of players worldwide to play, interact and compete against fellow fans on the same platform. The games also include chat functions, allowing players to interact and communicate with other players whom they meet in-game. These games may seem outdated now, but they remain extremely popular within the dedicated gaming community.

The Modern Age Of Gaming
Since the early 2000s, Internet capabilities have exploded and computer processor technology has improved at such a fast rate that every new batch of games, graphics and consoles seems to blow the previous generation out of the water. The cost of technology, servers and the Internet has dropped so far that Internet at lightning speeds is now accessible and commonplace, and 3.2 billion people across the globe have access to the Internet. According to the ESA Computer and video games industry report for 2015, at least 1.5 billion people with Internet access play video games.
Online storefronts such as Xbox Live Marketplace and the Wii Shop Channel have totally changed the way people buy games, update software and communicate and interact with other gamers, and networking services like Sony’s PSN have helped online multiplayer gaming reach unbelievable new heights.
Every new batch of games, graphics and consoles seems to blow the previous generation out of the water.
Technology allows millions around the world to enjoy gaming as a shared activity. The recent ESA gaming report showed that 54 percent of frequent gamers feel their hobby helps them connect with friends, and 45 percent use gaming as a way to spend time with their family.
By the time of the Xbox 360 release, online multiplayer gaming was an integral part of the experience (especially “deathmatch” games played against millions of peers around the world for games such as Call of Duty Modern Warfare). Nowadays, many games have an online component that vastly improves the gameplay experience and interactivity, often superseding the importance of the player’s offline game objectives.
“What I’ve been told as a blanket expectation is that 90% of players who start your game will never see the end of it…” says Keith Fuller, a longtime production contractor for Activision.
As online first-person shooter games became more popular, gaming “clans” began to emerge around the world. A clan, guild or faction is an organized group of video gamers that regularly play together in multiplayer games. These games range from groups of a few friends to 4,000-person organizations with a broad range of structures, goals and members. Multiple online platforms exist, where clans are rated against each other and can organize battles and meet-ups online.

The Move Toward Mobile
Since smartphones and app stores hit the market in 2007, gaming has undergone yet another rapid evolution that has changed not only the way people play games, but also brought gaming into the mainstream pop culture in a way never before seen. Rapid developments in mobile technology over the last decade have created an explosion of mobile gaming, which is set to overtake revenue from console-based gaming in 2015.
This huge shift in the gaming industry toward mobile, especially in Southeast Asia, has not only widened gaming demographics, but also pushed gaming to the forefront of media attention. Like the early gaming fans joining niche forums, today’s users have rallied around mobile gaming, and the Internet, magazines and social media are full of commentaries of new games and industry gossip. As always, gamers’ blogs and forums are filled with new game tips, and sites such as Macworld, Ars Technica and TouchArcade push games from lesser-known independent developers, as well as traditional gaming companies.
The gaming industry was previously monopolized by a handful of companies, but in recent years, companies such as Apple and Google have been sneaking their way up the rankings due to their games sales earnings from their app stores. The time-killing nature of mobile gaming is attractive to so many people who basic games such as Angry Birds made Rovio $200 million in 2012 alone, and broke two billion downloads in 2014.
More complex mass multiplayer mobile games such as Clash of Clans are bringing in huge sums each year, connecting millions of players around the world through their mobile device or League of Legends on the PC.

The Future
The move to mobile technology has defined the recent chapter of gaming, but while on-the-move gaming is well-suited to the busy lives of millennials, gaming on mobile devices also has its limitations. Phone screens are small (well, at least until the iPhone 6s came out), and processor speeds and internal memories on the majority of cellphones limit gameplay possibilities. According to a recent VentureBeat article, mobile gaming is already witnessing its first slump. Revenue growth has slowed, and the cost of doing business and distribution costs have risen dramatically over the last few years.
Although mobile gaming has caused the death of hand-held gaming devices, consoles are still booming, and each new generation of console welcomes a new era of technology and capabilities. Two industries that could well play a key role in the future of gaming are virtual reality and artificial intelligence technology.
Virtual reality (VR) company Oculus was acquired by Facebook in 2014, and is set to release its Rift headset in 2016. The headset seems to lean perfectly toward use within the video games industry, and would potentially allow gamers to “live” inside an interactive, immersive 3D world. The opportunities to create fully interactive, dynamic “worlds” for MMORPG, in which players could move around, interact with other players and experience the digital landscapes in a totally new dimension, could be within arms reach.
There have been a lot of advancements over the last few years in the world of language-processing artificial intelligence. In 2014, Google acquired Deep Mind; this year, IBM acquired AlchemyAPI, a leading provider in deep-learning technology; in October 2015, Apple made two AI acquisitions in less than a week. Two of the fields being developed are accuracy for voice recognition technology and open-ended dialogue with computers.
These advances could signify an amazing new chapter for gaming — especially if combined with VR, as they could allow games to interact with characters within games, who would be able to respond to questions and commands, with intelligent and seemingly natural responses. In the world of first-person shooters, sports games and strategy games, players could effectively command the computer to complete in-game tasks, as the computer would be able to understand commands through a headset due to advances in voice recognition accuracy.
If the changes that have occurred over the last century are anything to go by, it appears that gaming in 2025 will be almost unrecognizable to how it is today. Although Angry Birds has been a household name since its release in 2011, it is unlikely to be remembered as fondly as Space Invaders or Pong. Throughout its progression, gaming has seen multiple trends wane and tide, then be totally replaced by another technology. The next chapter for gaming is still unclear, but whatever happens, it is sure to be entertaining.

+infos(fonte da informação): LINK, por Riad Chikhani

Tags :