logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!
Dez 14

Mudanças para 2012

Escrito por Daniel Schmitz em 1, 2.0, 4, 6, Adobe, Adobe Air, Adobe Flex, Air, api, app, AR, auto, BI, blog, C#, class, cultura, Desenvolvimento, Dica, Diversos, email, exemplo, Flex, for, Formação, framework, Frameworks, html, html 5, ide, IE, if, Java, Javascript, JQuery, Livro, Livros, Mate, mg, mobile, mudanças, NaN, Notícias, O, on, Opinião, processo, prova, pt, Revistas, RIA, Ria’s Geral, S+S, site, Sugestões, Sun, Tecnologia, Tema, UI, XP @ 12 14th, 2011 | via http://flex.etc.br | Sem comentários
Daniel Schmitz
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

2012 será mais um ano de ascensão dos dispositivos mobile em todo o mundo. Mesmo que aqui no Brasil tudo seja mais lento, com preços mais altos, estamos seguindo em frente. Já temos frameworks javascript adaptados ? s telinhas, como o Sencha, ? e o jQueryMobile, além do Flex Mobile, claro. Outras tecnologias estão crescendo a cada dia, e a quantidade de informação que é “jogada” para nós programadores aumenta em um ritmo alucinante. Seguindo esta tendência, estamos também nos adaptando, e para que tudo fique bem claro ao leitor, decidi comentar as principais mudanças do site neste post.

Neste novo ano estaremos adotando algumas mudanças que visam melhorar a qualidade de nossas obras. As principais mudanças que estão por vir são:

1)? Fim do suporte por email: Nestes quatro anos de suporte por email, pude observar diversos prós e contras, e sempre tentei agradar a “gregos e troianos”. Nunca fiz nenhuma distinção de quem comprou ou quem não comprou meus livros, sempre respondendo as dúvidas em menos de 48 horas. Todo esse tempo foi um aprendizado enorme, e agora tenho a necessidade de “lapidar” este processo de suporte. Observei que muito das dúvidas dos leitores eram repetidas e que sempre respondia ? s mesmas questões. Observei também que, ? s vezes, dava prioridade a alguém que não tinha comprado um livro, e deixava “na fila” uma outra pessoa que tinha dúvidas relativas aos livros. Também cheguei ao ponto de responder 10, 15 e-mails por dia, tornando uma tarefa bastante trabalhosa. Neste contexto, estarei “movendo” o suporte para um fórum especial, aberto a qualquer pessoa e destinado a sanar dúvidas dos livros. Falarei mais deste fórum em um outro post, mas deixo claro que, para quem é leitor, terá como sempre o suporte 100% garantido.

2)? eBOOKs serão predominantes: Todo o processo de criação/distribuição de um ebook é perfeito aos olhos do autor se não fosse a pirataria. Realmente encontrar meus livros que consumiram várias horas de preparo e trabalho nos torrents por aí não é uma sensação boa. Mas eu quero acreditar que isso é possível! Eu quero acreditar que o brasileiro é gente honesta, que deseja pagar por um conteúdo útil sem ser “assaltado”. Por isso, em 2012, eu vou priorizar o desenvolvimento de eBooks, cobrando um preço justo, e com a meta de criar muito mais ebooks do que já foi criado atualmente.

3)? Flex não será prioridade: Nestes últimos quatro anos tenho me dedicado muito ao Flex. Fui o primeiro a escrever um livro sobre Adobe Flex no Brasil e desde então foram quase 10 livros abordando o tema. Sei que está chegando o momento em que eu terei que “dissipar” o meu conhecimento para outras áreas, pois o tema Flex já está bastante difundido, felizmente hoje em dia existe bastante conteúdo dedicado a cultura Flex e só não aprende quem não quer. Veja que, para quem escreve livros, as tecnologias saturam, mas não morrem. Este é o caso do Flex, o conteúdo está saturado, eu não tenho muito mais a escrever, por isso o foco será distribuído para outras áreas. O livro “Adobe Air em Ação” será o último livro a ser escrito para a tecnologia Flex, e não haverá mais edições previstas. O suporte continuará normalmente para quem comprou qualquer livro sobre Flex.

4)? Mobile será prioridade: Daremos certa prioridade ao desenvolvimento mobile, e dependendo de novas tecnologias que deverão surgir, estaremos pesquisando e publicando material sobre elas. Isso significa que determinados livros poderão conter menos páginas, por exemplo, 100, mas que expliquem um conceito ou tecnologia emergente.

5)? Tendências serão prioridade:? A rapidez com que uma tecnologia emerge abre uma lacuna de desinformação para nós tupiniquins. E a? idéia? é preencher esta lacuna com um livro. Por exemplo, ainda não temos um livro sobre SENSHA, muito menos EXTJS. Um livro sobre HTML 5, custa nada mais, nada menos que 73 reais. Nem temos um livro sobre a linguagem SCALA ou sobre DJANGO. Enfim, existe muito assunto para se escrever.

6)? Site flex.etc.br deixa de conter informações sobre os livros:? Todas as informações estarão no site danielschmitz.com.br. O blog flex continua, mas aos poucos deixará de ser atualizado.

Resumindo:

- Vamos publicar ebooks com qualidade e a preços atraentes, sobre diversos temas. Contamos com a aprovação de vocês, enviando críticas e sugestões, .

- Haverá um fórum dedicado ao suporte dos livros.

- Estaremos em breve publicando quais serão os primeiros eBooks a serem lançados e contamos com a sua opinião. Mande ideias !

Out 30

Windows Phone Mango – Local Database

Escrito por Alexandre Tadashi em .NET, 1, 2.0, 4, 6, abas, AMF, Aplicativos, app, AR, Arquitetura, arte, Artigo, auto, BI, blog, Blogs, botão, C#, camp, class, classe, classes, cliente, código, collection, cultura, Curso, Cursos, dados, demo, desempenho, Desenvolvedor, Design, designer, Documentação, dotnet, DRE, err, event, Evento, exemplo, Ferramenta, for, Formação, handle, html, ide, IE, if, int, interface, layout, library, Links, linq, Linq to Sql, map, mg, Microsoft, monitor, MSDN, mudanças, O, on, Otimização, Outros, Partilha, processo, pt, rest, RIA, Ria’s Geral, S+S, SDK, server, serviço, silverlight, SQL Server, state, string, TAT, Tecnologia, Tema, template, Treinamento, UI, UX, Ved, vs, window, windows, XAML @ 10 30th, 2011 | via http://alexandretadashi.net/ | Sem comentários
Alexandre Tadashi
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Na versão Mango do Windows Phone, você pode manipular uma base de dados localmente, chamada de local database na documentação oficial, o recurso permite que o desenvolvedor crie aplicativos com registros de dados em tabelas, além de manipular seus registros utilizando o LINQ to SQL.

Uma base de dados local no WP7 fica localizada no Isolated Storage, um local acessível somente pela aplicação corrente, a arquitetura fica conforme a figura abaixo, onde temos a aplicação que contém um DataContext e através de LINQ to SQL, fazemos o acesso a base de dados local no Isolated Storage

Arquitetura Local Database

Arquitetura Local Database

Para saber mais sobre Isolated Storage acessem os links:

http://msdn.microsoft.com/en-us/library/ff402541(v=vs.92).aspx

http://www.windowsphonebrasil.net/windowsphonebrasil/post/2010/10/08/Salvando-e-restaurando-o-Application-State-no-Windows-Phone-7.aspx

No WP7 as aplicações ficam eram áreas isoladas uma das outras, ou seja, uma aplicação não tem acesso ao Isolated Storage de outra aplicação, portanto até o momento não é possível compartilhar uma base de dados local com diversas aplicações. Diferente de uma base de dados SQL Server, um local database não pode rodar como um serviço continuo, visto que ele é executado somente durante o processo da aplicação.

Você pode criar um local database para manipular uma quantidade de dados razoável utilizando as facilidades de consultas do LINQ to SQL juntamente com o relacionamento de tabelas, similar a uma base de dados comum, o local database é uma implementação do SQL CE para o WP7, permitindo realizar facilmente tarefas com incluir, alterar , excluir e realizar consultas com LINQ.

Até o momento não existe uma ferramenta de designer visual e oficial para criar as tabelas, relacionamentos, etc, com a base de dados local, o que poderia facilitar muito, neste artigo faremos um exemplo simples, somente com uma tabela, porém, em um projeto mais complexo, essa tarefa poderia ser um pouco trabalhosa, uma forma não oficial de criar o modelo seria utilizar o SQL Metal, para mais informação, acessem o Centro de Treinamento Oficial do Windows Phone no MSDN ou através do link : http://windowsphonegeek.com/articles/Using-SqlMetal-to-generate-Windows-Phone-Mango-Local-Database-classes .

Com o SQL Metal podemos criar o Data Context através de um comando e com poucas modificações deixá-lo compatível com o Mango e poupar a codificação manual da criação de tabelas e relacionamentos.

Exemplo de comando do SQL Metal:

%ProgramFiles(x86)%Microsoft SDKsWindowsv7.0ABin>SqlMetal.exe
/code:”C:CaminhoClienteDC.cs” “C:CaminhoClienteDB.sdf”

Outras formas:

http://claudiufarcas.blogspot.com/2011/10/windows-phone-mango-sql-ce-tips-and.html

http://blogs.ugidotnet.org/corrado/archive/2011/06/05/using-local-database-in-wp7-mango.aspx

Nesta primeira parte do artigo vou criar uma base de dados muito simples, com uma tabela somente e um único campo, dessa forma podemos focar em como criar e entender os conceitos envolvidos Vou criar uma base de dados Cliente.sdf, com uma tabela chamada Cliente e um campo chamado Nome.

A primeira classe que vamos criar é a entidade Cliente e decorar com alguns atributos utilizados para a manipulação da base de dados, a classe servirá de apoio para a criação da tabela cliente. Para que você possa inserir os atributos nas propriedades da classe, é necessário adicionar o using System.Data.Linq.Mapping, em seguida adicione o atributo [Table] logo acima da criação da classe e adicione o atributo [Column()] em cada propriedade, na primary key da tabela, personalize com :

[Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)]

Dessa forma a coluna será criada na tabela como sendo Primary Key, não permitindo registros duplicados e gerando automaticamente um número a cada inclusão. Com a adição do atributo Column() nas outras propriedades, cada coluna correspondente será criado na tabela.

Com os atributos de colunas você pode definir uma série de recursos, para saber quais são os atributos de colunas que você pode utilizar no LINQ to SQL para WP7 acesse o link http://msdn.microsoft.com/en-us/library/system.data.linq.mapping.columnattribute(VS.95).aspx

Um atributo em especial que adiciona uma coluna de versão pode auxiliar no desempenho de grandes atualizações de dados, apresentando uma significativa melhoria na aplicação, é o IsVersion=true, essa otimização é exclusiva para o LINQ to SQL do WP7 e usado internamente para identificar a versão da coluna modificada:

[Column (IsVersion = true)]
_VERSION Binary privado;

Igualmente importantes são os atributos de associações, que permitem realizar o relacionamento entre as tabelas, para mais informações acesse:

http://msdn.microsoft.com/en-us/library/system.data.linq.mapping.associationattribute(v=VS.95).aspx

Exemplo de Associação:

[Association(Storage = "_cliente", ThisKey = "_clienteId", OtherKey = "Id", IsForeignKey = true)]

Código da Classe Cliente:

? ? ?  [Table]
? ? ?  public class Cliente : INotifyPropertyChanged, INotifyPropertyChanging
? ? ?  
? 
? ? ? ? ? ? ?  #region INotifyPropertyChanged Members
? 
? ? ? ? ? ? ?  public event PropertyChangedEventHandler PropertyChanged;
? 
? ? ? ? ? ? ?  private void NotifyPropertyChanged(string propertyName)
? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  if (PropertyChanged != null)
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ?  }
? 
? ? ? ? ? ? ?  #endregion
? 
? ? ? ? ? ? ?  #region INotifyPropertyChanging Members
? 
? ? ? ? ? ? ?  public event PropertyChangingEventHandler PropertyChanging;
? 
? ? ? ? ? ? ? 
? ? ? ? ? ? ?  private void NotifyPropertyChanging(string propertyName)
? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  if (PropertyChanging != null)
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ?  }
? 
? ? ? ? ? ? ?  #endregion
? 
? 
? ? ? ? ? ? ?  [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)]
? ? ? ? ? ? ?  private string id;
? ? ? ? ? ? ?  public string Id
? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  get
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  return id;
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  set
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  if (id != value)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  NotifyPropertyChanging("Id");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  id = value;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  NotifyPropertyChanged("Id");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  }
? 
? ? ? ? ? ? ?  }
? ? ? ? ? ? ? 
? ? ? ? ? ? ?  [Column()]
? ? ? ? ? ? ?  private string nome;
? ? ? ? ? ? ?  public string Nome
? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  get
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ?  ? ? ? ? ? ? ? ? return nome;
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  set
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  if (nome != value)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  NotifyPropertyChanging("Nome");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  nome = value;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  NotifyPropertyChanged("Nome");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  }
? 
? ? ? ? ? ? ?  }
? ? ? ? ? ? ? 
? 
? ? ?  }

Em aplicações Silverlight é comum implementar a interface INotifyPropertyChanged para monitorar mudanças nas propriedades da classe , e tirar um melhor proveito do recursos de databinding da tecnologia, para auxiliar o LINQ to SQL, também vamos implementar a interface INotifyPropertyChanging, com ela é possível monitorar quando uma propriedade será modificada e com isso o DataContext é informado e pode identificar as mudanças e melhorar a performance da aplicação.

O Data Context é o local onde definimos o contexto dos dados que servirão para criar a base de dados local, o LINQ to SQL depende do mapeamento entre o modelo de objetos e o esquema da base de dados. Dependendo da complexidade do modelo, esse arquivo pode ser trabalhoso de ser criado manualmente, mas existem formas de utilizar alguma ferramenta para cria-lo, o SQL Metal é uma delas conforme comentado acima no artigo.

Crie uma classe chamada ClienteDataContext , ela vai herdar de DataContext, o DataContext contém diversas propriedades e métodos que auxiliam na manipulação de base de dados, como por exemplo, verificar se uma base de dados existe, criar e excluir uma base de dados, entre outros, mais adiante vamos utilizar o método CreateDatabase() para criar fisicamente a base de dados local no Windows Phone.

A próxima etapa é criar a string de conexão com a base de dados, utilizaremos a palavra chave “isostore” para informar que o arquivo ficará no Isolated Storage, após isso informaremos o nome da base de dados como Cliente.sdf. É na string de conexão que você pode inserir um senha de acesso a base de dados, informar uma cultura específica ou até mesmo criar uma base de dados somente leitura, para mais informações sobre string de conexões para o WP7 acesse http://msdn.microsoft.com/en-us/library/hh202861(v=vs.92).aspx

Por último vamos definir uma tabela Cliente de acesso público e única no DataContext através de public Table Cliente.

No App.xaml.cs da aplicação , localize o construtor da classe e no final adicione o código abaixo, neste momento vamos criar uma base de dados usando o DataContext criado anteriormente, o código verifica se existe uma base de dados e caso não exista ele já cria uma nova base de dados.

using (ClienteDataContext ctx = new ClienteDataContext(ClienteDataContext.DBConnectionString))

? ? ?  if (ctx.DatabaseExists() == false)
? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ?  ctx.CreateDatabase();
? ? ? ? ? ? ?  
? 
}

Para finalizar o artigo vou criar uma tela simples em Silverlight, sem se preocupar com o layout, a tela tem um botão chamado “add” que vai adicionar um registro na base de dados e logo abaixo um ListBox chamado “lst”, que está ligado através de databinding a propriedade ItemSource com uma ObservableCollection chamada Items, na propriedade Text vamos mostrar o nome do cliente também ligando através de databinding.


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  ? Grid.Row="1" Margin="12,0,12,0">
? ? ? ? ? ? ? ? ? ? ?  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? 
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? 

No constructor do MainPage vamos criar uma instância do DataContext chamado clienteDB :

clienteDB = new ClienteDataContext(ClienteDataContext.DBConnectionString);

No evento ? Loaded da MainPage, realizamos um consulta LINQ to SQL e já adicionamos o resultado em uma ObservableCollections chamada Items, que está ligado ao ItemSource da ListBox, veja como é prático ligar as informações na tela, neste exemplo como o foco é o conceito de local database, o projeto foi criado todo no code-behind da MainPage, mas você poderia criar usando o ViewModel e ligando o ObservableCollection com a View.

var result = from Cliente r in clienteDB.Cliente
select r;
Items = new ObservableCollection(result);

Para mais informações sobre LINQ:

http://msdn.microsoft.com/en-us/library/bb397897.aspx

http://msdn.microsoft.com/en-us/library/bb386976.aspx

http://msdn.microsoft.com/en-us/library/bb386913.aspx

Vamos agora para o código do botão “add” que vai adicionar os registros na base de dados, através do InsertOnSubmit() adicionamos o objeto ao DataContext e através do SubmitChanges(), o objeto é registrado na base de dados, por último, inserimos o objeto na coleção para que seja apresentado na tela.

Cliente c = new Cliente();
c.Nome = txtNome.Text;
clienteDB.Cliente.InsertOnSubmit(c);
clienteDB.SubmitChanges();
Items.Add(c);

?

Código completo da MainPage:

? ?  public partial class MainPage : PhoneApplicationPage, INotifyPropertyChanged
? ? ?  
? ? ? ? ? ? ? ?  ClienteDataContext clienteDB;
? ? ? ? ? ? ? ?  #region INotifyPropertyChanged Members
? ? ? ? ? ? ? ?  public event PropertyChangedEventHandler PropertyChanged;
? ? ? ? ? ? ? ?  private void NotifyPropertyChanged(string propertyName)
? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  if (PropertyChanged != null)
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ?  }
? ? ? ? ? ? ? ?  #endregion
? ? ? 
? ? ? ? ? ? ?  private ObservableCollection _items;
? ? ? ? ? ? ?  public ObservableCollection Items
? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  get
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  return _items;
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  set
? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  if (_items != value)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  _items = value;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  NotifyPropertyChanged("Items");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  }
? ? ? ? ? ? ?  }
? ? ? ? ? ? ? 
? ? ? ? ? ? ?  // Constructor
? ? ? ? ? ? ?  public MainPage()
? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  InitializeComponent();
? ? ? ? ? ? ? ? ? ? ?  clienteDB = new ClienteDataContext(ClienteDataContext.DBConnectionString);
? ? ? ? ? ? ? ? ? ? ?  this.DataContext = this;
? ? ? ? ? ? ? ? ? ? ?  Loaded += new RoutedEventHandler(MainPage_Loaded);
? ? ? ? ? ? ?  
? ? ? ? ? ? ?  void MainPage_Loaded(object sender, RoutedEventArgs e)
? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  var result = from Cliente r in clienteDB.Cliente
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  select r;
? ? ? ? ? ? ? ? ? ? ?  Items = new ObservableCollection(result);
? ? ? ? ? ? ?  
? ? ? ? ? ? ?  private void add_Click(object sender, RoutedEventArgs e)
? ? ? ? ? ? ?  
? ? ? ? ? ? ? ? ? ? ?  Cliente c = new Cliente();
? ? ? ? ? ? ? ? ? ? ?  c.Nome = txtNome.Text;
? ? ? ? ? ? ? ? ? ? ?  clienteDB.Cliente.InsertOnSubmit(c);
? ? ? ? ? ? ? ? ? ? ?  clienteDB.SubmitChanges();
? ? ? ? ? ? ? ? ? ? ?  Items.Add(c);
? ? ? ? ? ? ?  
? ? ?  }

Links:

Boas Práticas:

http://msdn.microsoft.com/en-us/library/hh286406(v=vs.92).aspx

Mais informações sobre local database no Windows Phone :

http://msdn.microsoft.com/en-us/library/hh202860(v=vs.92).aspx

http://msdn.microsoft.com/en-us/library/hh202876(v=VS.92).aspx

Alterações do esquema da base de dados:

http://msdn.microsoft.com/en-us/library/hh394018(v=VS.92).aspx

Set 24

Gestão 3.0 – Para Líderes Ágeis – Parte 1

Escrito por Edgard Davidson em .NET, 1, 2.0, 4, Agile, AR, arte, auto, BI, bug, C#, camp, Componente, Componentes, control, cultura, demo, Desenvolvedor, desenvolvedores, Desenvolvimento, Desenvolvimento de Software, developer, dynamic, economia, err, exemplo, for, game, gestão, ide, IE, if, int, jogo, Jogos, Livro, Mestrado, mg, O, on, Outros, Pessoal, problema, processo, Projetos, pt, rest, RIA, Ria’s Geral, S+S, social, Software, Tema, UI, Ved, XP @ 09 24th, 2011 | via http://edgarddavidson.com | Sem comentários
Edgard Davidson
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Ol? Pessoal.

Este post ? o primeiro de uma s?rie de posts que pretendo publicar, em formato de resenha, sobre “livros que estou lendo“. Como partida, fiz a primeira de v?rias outras do livro Management 3.0 Leading Agile Developers, Developing Agile Leaders. O livro pretende mostrar como ser um bom gerente ?gil. A base para isso ? o entendimento sobre pessoas e sistemas e a maneira como as pessoas pensam sobre sistemas. Antes de tudo, os gerentes devem compreender como sistemas sociais funcionam.

Introdu??o

GEST?O 1.0 = HIER?RQUICA

Representada por organiza??es hierarquizadas, onde o comando parte da alta ger?ncia funcional, de cima para baixo. Aqueles que est?o no alto da hieraquia tem altos sal?rios, grandes egos. em contrapartida, aqueles que est?o na base da hierarquia normalmente tem baixos sal?rios, poucas responsabilidades (especializado), e pouca motiva??o para fazer um bom trabalho. Fortemente baseada nos modelos fordistas e tayloristas do in?cio do s?culo. Sua gest?o ? focada no comando controle.

GEST?O 2.0 = MODISMO

S?o as organiza??es essencialmente “Gest?o 1.0”, mas que cont?m pessoas que j? perceberam que esse modelo n?o funciona bem “fora da caixa”. Ent?o s?o criados v?rios modelos adicionais de servi?os e processos como BSB, six-sigma, ITIL, Cobit, Qualidade total, entre outros.

GEST?O 3.0 = COMPLEXIDADE

? uma ger?ncia que percebeu que a organiza??o ? uma rede, formada por pessoas, seus relacionamentos e sua complexidade social e n?o por divis?es funcionais hier?rquicas. Abomina o comando-controle e advoga por uma cultura de lideran?a, hol?stica, org?nica, enxergando a organiza??o como um sistema (complexo) vivo e n?o apenas como uma m?quina.

Por que as coisas n?o s?o t?o simples?

CAUSALIDADE

O determinismos causal infere que as coisas que acontecem hoje s?o causadas por outras coisas que aconteceram antes. Podemos utilizar o determinismo causal, por exemplo, para prever com precis?o quando ser? a pr?xima vez que o cometa Halley passar? pr?ximo da atmosfera terrestre, com base na ?ltima vez que ele passou. Nesse sentido, o determinismo causal habilita que os desenvolvedores ? projetar, planejar e prever tudo o que dever? ser feito no projeto de desenvolvimento de software. Se abstra?rmos qualquer problema de bug, altera??o de requisitos ou cat?strofe interplanet?ria, a causalidade pemite prever com bastante precis?o. Pena que n?o podemos utilizar tamb?m c?lculos astron?micos para determinar a complexidade sist?mica onde projetos de software est?o inseridos. lol.

COMPLEXIDADE

Complexidade n?o tem rela??o com v?rias coisas pra fazer simultaneamente ou com em fazer coisas grandes, a complexidade ? intr?nseca. N?o obstante, v?rias teorias como por exemplo: teoria dos sistemas din?micos (Dynamical systems theory), teoria do caos (chaos theory), teoria dos jogos(game theory), tentam explicar por que alguns fen?menos s?o imprevis?veis e n?o podem ser calculados apenas com a experi?ncia e observa??es emp?ricas. O campo da ci?nica que estouda esses fen?menos ? nomeada como teoria da complexidade (complexity theory).

A teorias da complexidade, de certa forma, ? um “conforto” para gerentes, lideres de time e gestores em organiza??es que desenvolvem software. Isso significa que nem tudo est? perdido, h? um novo paradigma cient?fico, baseado na complexidade de sistemas, que ajuda a entender o problema da volatilidade e incertezas em desenvolvimento de softwares.

REDUCIONISMO

O reducionismo ? a abordagem que se baseia na desconstru??o de algo em partes menores, para analis?-las e a? sim entender o todo,. Entendimento do sistema pelo entendimento das partes. Essa t?cnica pode ser utilizada, por exemplo, para desconstruir um computador para entender como ele funciona, para dissecar um animal para entender como seus org?os internos funcionam. No entanto, em algumas ?reas, onde a imprevisibilidade ? uma constante, a utiliza??o da abordagem reducionista n?o ? capaz de determinar, por meio da desconstru??o e an?lise das partes, o entendimento do todo. Enquadra-se nisso, estudos sobre: organismos, consci?ncia humana, as economias, climas, e projetos de software

HOLISMO

O Holismo ? a ideia de que o comportamento do sistema n?o pode ser completamente determinado pelos seus componentes isolados. A vis?o hol?stica pode ser vista como o oposto ao reducionismo, onde a vis?o do sistema como um todo determina comportamentos importantes para ele.

GERENCIAMENTO ?GIL

Uma das bases do desenvolvimento ?gil de software est? na teoria da complexidade. Os valores e princ?pios ?geis corroboram para reconhecer que o determinismo causal ? insuficiente para entregar projetos de sucesso. Conceitos bem conhecidos como auto-organiza??o, multi-disciplinaridade, autonomia s?o oriundos da ci?ncia da complexidade.

O MODELO DA GEST?O 3.0

O modelo da gest?o 3.0 mostra como gerenciar equipes sabendo que os sistemas s?o complexos, n?o lineares, n?o previs?veis e carentes de adaptabilidade. Para o entendimento de sistemas complexos, ? necess?rio, a priori, uma vis?o hol?stica do todo como objetivo de estudar a complexidade social. A gest?o 3.0 ? um modelo de gest?o ?gil que aplica a teoria dos pensamentos complexos (complexity thinking) em equipes de desenvolvimento de software ?gil. Sob o olhar do pensamento dial?tico, esse modelo compreende os encalsos do reducionismo no ambiente de desenvolvimento de software (tese), aceita a oposi??o e acredita em uma vis?o hol?stica, sist?mica e social (ant?tese), para criar uma nova ideia denominada gest?o 3.0 (s?ntese). A figura abaixo ilustra o modelo de gest?o 3.0.

Jul 23

A Ascensão do Teste de Software

Escrito por Edgard Davidson em 1, 6, Air, AR, auto, BI, bug, C#, cliente, cultura, Desenvolvimento, Desenvolvimento de Software, empresas, err, erro, Flex, for, IE, if, int, jogo, Mac, NaN, O, on, Opinião, Outros, processo, produto, Qualidade de Software, RIA, Ria’s Geral, S+S, Software, Tema, Teste, UI @ 07 23rd, 2011 | via http://edgarddavidson.com | Sem comentários
Edgard Davidson
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Por muito tempo o teste de software foi visto como uma atividade do processo de desenvolvimento de software que no papel era extremamente importante e necess?ria para atingir a qualidade do produto de software, mas na pr?tica, por muitas empresas, tornou-se uma das atividades mais negligenciada. Por esse motivo enraizou-se uma p?ssima cultura em rela??o ? atividades de testes, que, quanto a import?ncia, ficou ? margem da constru??es do software e que, se desse tempo, era executada. A neglig?ncia, por muito tempo da referida atividade gerou algumas “afirma??es” que hoje soam como piadas:

  • “…Implemente, se der tempo agente testa.”
  • “o importante ? entregar… os testes, deixa que o cliente faz pra gente…”
  • “o prazo vai estourar…Ent?o sacrifique os testes…”
  • “entregue com bugs, mas entregue em dia, depois agente arruma…”
  • “sabemos que nosso software est? cheio de bugs, ent?o vamos cobrar uma manuten??o mensal do nosso cliente para consert?-los…”
  • “testar n?o ? uma atividade importante…”
  • ”…como vamos testar se n?o temos tempo?”
  • “…testar pra que? perda de tempo.”
  • “pra desenvolver sem teste ? X, com teste ? X2…'“

Fico impressionado! D? at? medo! Imagine se a ind?stria de avia??o fosse igual a de software. Quantos avi?es cairiam por dia? Imagine se a ind?stria farmac?utica fosse igual a de software. Voc? confiaria nos rem?dios? Imagine se o projeto do modelo do seu carro fosse constru?do como esses softwares? Voc? andaria em um elevador que foi constru?do com essa mesma metodologia? “Instale o elevador a?… depois o cliente testa pra gente…”

Quando fala de teste, estou me referindo tamb?m a qualidade do software. Apesar de n?o serem sin?nimos, mas com certeza o n?vel de qualidade dos teste de software ? um fator, entre v?rios outros que definem a qualidade do produto final.

Por outro lado, do ponto de vista do profissional, o teste de software possuia alguns PRE-conceitos:

  • “testar ? uma atividade chata e cansativa…”
  • “testar paga mal…”
  • “n?o gosto e n?o sei programar… logo vou trabalhar na ?rea de teste…”
  • “minha empresa n?o valoriza a ?rea de testes…”
  • “testar ? ficar encontrando erros dos outros…”
  • “maus programadores viram testadores…”
  • “…subatividade?”
  • “qualquer um pode testar…”

Hoje, no entanto, o teste “virou o jogo” com a populariza??o de processos emergentes de desenvolvimento de software como eXtreme Programming. Pr?ticas como TDD e BDD fornecem uma novo paradigma no desenvolvimento. Hoje, com a ascens?o do teste de software, novas “afirma??es” foram geradas:

  • “a qualidade do produto ? inegoci?vel…”
  • “primeiro escrevemos nossos testes unit?rios, depois implementamos…”
  • “entregar software sem um boa cobertura de teste unit?rio tornou-se amadorismo…”
  • “aus?ncia de teste unit?rio ? anti?tico… “
  • “n?o consegue executar teste de carga, performance e seguran?a no seu sistema? Sua equipe est? com d?bito t?cnico…”
  • “nossa integra??o ? cont?nua e automatizada…”
  • “nossos testes s?o automatizados…”
  • “temos cada linha de c?digo da aplica??o, temos tr?s linhas de teste…”
  • “nos preocupamos com a cobertura dos testes, com casos de teste que refletem os requisitos de neg?cio…”
  • “enquanto os testes n?o passarem 100% o produto n?o ? entregue…”
  • “entregue menos, mas entregue funcionando…”
  • “quem quebrar o deploy paga dez flex?es…”


Jul 4

1° Evento #HoraExtraBH

Escrito por Edgard Davidson em 1, 2.0, 4, 6, Air, Android, aplicaçoes, AR, BI, C#, camp, case, cultura, Design, Eventos, iphone, mobile, O, on, Palestra, Ria’s Geral, S+S, servidor, UI @ 07 4th, 2011 | via http://edgarddavidson.com | Sem comentários
Edgard Davidson
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Inscreva-se j?: http://bit.ly/igiRXU

Dia: 09/07, s?bado

Local: UNA campus Aimores localizado na rua Aimores, 1451, bairro Lourdes

Programa??o:

  • 08:30 as 08:50 – Case 1 – Douglas aguiar – “consolidando uma nova cultura na empresa”
  • 09:00 as 09:40 – Palestra 1 – Edgard Davidson – “Porque virar professor?”
  • 09:50 as 10:10 – Case 2 – Herberth – “NOSQL + Python na Deskmetrics”
  • 10:20 as 11:00 – Case 3 – Rafael Spinola – Solucao com Servidores cloud
  • 11:10 as 11:30 – Case 4 – Dirceu Belem “Implantacao de aplicacoes para mobile como: ipad, iphone e android
  • 11:40 as 12:00 – Case 5 – Marcello Cardoso “Design centrado no usuario”
  • 12:00 as 13:00 – Mesa redonda
  • 13:00 as 14:00 – Pausa para almoco.
  • 14:00 as 16:30 – Dojo (Pra quem quiser ficar)


Mar 20

Saia da zona de conforto

Escrito por Fabio da Silva em 1, 4, 6, Air, AR, arte, BI, blog, Blogs, cultura, encontro, fonte, for, Google, hospedagem, mg, O, on, Outros, Partilha, procura, progress, rest, RIA, Ria’s Geral, UI, Vários, XP, zend @ 03 20th, 2011 | via http://fabiophx.blogspot.com | Sem comentários
Fabio da Silva
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Um texto que me lembrei estes dias que quero compartilhar com vocês:

Um certo dia um mestre e seu discípulo em peregrinação pediram abrigo ao dono de uma humilde fazenda. A família era composta pelo casal, e três crianças. Eles foram bem recebidos e na hora da janta o dono da fazenda explicou que eles só tinham uma horta para subsistência e possuíam uma vaquinha que dava o leite que eles consumiam, e o pouco que sobrava vendiam na cidade, que utilizavam para comprar outros tipos de alimentos.

Pela manhã tomaram o café da manhã, agradeceram a hospitalidade e seguiram viagem, ao sair da fazenda num ponto mais afastado da casa estava a vaquinha, o mestre ao vê-la ordenou ao discípulo que a levasse e a jogasse no precipício que existia ali próximo. O discípulo argumentou, lembrando ao mestre que a vaquinha fornecia o leite para as crianças e que era o único bem da família. O mestre voltou a ordenar explicando que a família tinha outros bens só que ainda não tinham descoberto e que um dia ele entenderia. O discípulo então, triste e contrariado obedeceu as ordens do mestre, prometendo que um dia pediria perdão a família e tentaria reparar o seu feito.

Um tempo depois o discípulo com peso na consciência voltou a região procurando a fazenda onde tinham pedido hospedagem, chegando ao local encontrou uma fazenda moderna, com tratores e outra máquinas, uma casa grande e bonita, criação de animais, plantações enormes de várias culturas e vários empregados, o discípulo achou que tinha se perdido, perguntou então para um dos empregados sobre o dono da fazenda. Ao se verem se cumprimentaram e o então discípulo deu os parabéns e perguntou o que tinha acontecido.

O dono da fazenda explicou que mais tarde naquele dia sentiu falta da vaquinha, procurou-a até encontrá-la morta no precipício, o discípulo engoliu em seco. O dono da fazenda explicou que naquele momento ficou sem saber o que fazer, como sustentar a família, foi então que percebeu que poderia vender a madeira de um mato que cobria boa parte da fazenda, com o dinheiro da madeira comprou sementes e equipamentos aumentando o número de plantações, fechando contrato de fornecimento de hortaliças com o comércio da cidade, com dinheiro sobrando teve medo de deixar em casa e abriu uma conta no banco, o banqueiro seu conhecido e amigo sabendo do seu progresso ofereceu um empréstimo agrícola, vendo uma nova oportunidade aceitou.

Moral da história:

  • saia da zona de conforto
  • olhe ao seu redor, veja e preste atenção nas oportunidades
  • não pare no tempo, se atualize

Fonte: não tenho certeza mas acho que é do Paulo Coelho.

Fev 16

BDD – Do que se trata?

Escrito por DClick Team em 1, 4, 6, análise, AR, arte, auto, bar, Behavior, bug, class, classe, classes, cliente, código, comunicação, cultura, demo, Desenvolvedor, Desenvolvimento, Desenvolvimento de Software, development, err, erro, exemplo, Ferramenta, for, Formação, framework, Frameworks, IE, if, int, Java, lógica, NaN, O, on, Opinião, problema, problemas, programação, Projetos, relatório, RIA, Ria’s Geral, Sem categoria, serviço, Software, Sun, TAT, Tema, Teste, Twitter, UI, Ved @ 02 16th, 2011 | via http://blog.dclick.com.br/pt/ | Sem comentários
DClick Team
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

BDD – Behavior Driven Development



BDD está ficando mais conhecido ultimamente e muitas pessoas estão adotando a prática no dia a dia de desenvolvimento. Mesmo assim BDD é tão antigo quanto o próprio TDD (Test Driven Development).
BDD nada mais é do que trazer ao código, e principalmente ao código que testa os casos de uso da aplicação, um pouco mais da lógica de negócio e do problema que está sendo resolvido no nível do usuário.

Melhorando a comunicação



Quando escrevemos algum teste unitário, normalmente damos um nome ao teste para que possamos entender os resultados quando gerarmos um relatório após a execução dos mesmos. Também damos nomes que façam sentido, para facilitar a comunicação da equipe de desenvolvimento, pois se outra pessoa da equipe precisar dar manutenção no teste, torna mais fácil a compreensão do que o teste está encarregado de testar sem que seja necessário ler muitas linhas de código.


Nos tempos atuais falamos bastante de aumentar a integração da equipe com o cliente ou a área que entende do negócio da aplicação. Também falamos em uma maior colaboração de ambas as partes no desenvolvimento de software. Para quebrar essa barreira que existe entre desenvolvimento e análise, algumas equipes empregam uma programação mais voltada a resolver os casos de uso propostos, ao invés de resolver problemas de baixo nível e compor uma aplicação final.


BDD prega que o problema que será resolvido deve estar bem claro para a parte quem entende do negócio (chamarei de cliente, mesmo que algumas vezes não seja necessariamente um cliente), e quem desenvolve a aplicação em si. Para isso são escritos casos de testes baseados nos casos de uso do sistema, e tais casos de teste usam uma linguagem comum para ambas as partes.


Como normalmente o cliente não é técnico, fica muito difícil se comunicar com ele via testes unitários em código, e fica mais difícil ainda que o cliente colabore com a melhoria e a escrita de tais testes. Porém, os testes unitários e automatizados são a melhor ferramenta do desenvolvedor para testar a aplicação e garantir que a equipe mantenha o código funcionando.


Para suportar ambas as necessidades, e implantar o BDD de fato, uma das soluções é associar o problema de cada caso de uso, a um teste unitário que irá se certificar que aquele caso de uso está sendo corretamente executado.


Por exemplo, em java podemos dar nomes a nossas classes de teste de acordo com o caso de uso que aquele teste se refere. E podemos também nomear os métodos como a execução específica daquele caso de uso:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class TesteDeCadastroDeUsuario {
? ?
? ? @Test
? ? public void testeDeCadastrarNovoUsuario() {
? ?
? ? ? ? // … cadastra o usuário
? ?
? ? ? ? Assert.assertTrue(“Usuário novo não foi cadastrado corretamente, “
? ? ? ? ? ? ? ? ? ? ? ? + “pois o nome está inválido.”,
? ? ? ? ? ? ? ? ? ? ? ? nomeUsuarioValido());
? ?
? ? }
? ?
}



Dessa forma quando o cliente ver o resultado dos testes e perceber que este teste falhou, ao invés de ler algo como “O serviço de usuário voltou null.”, ele conseguirá ler “No teste de cadastro de usuário, ao testar que um usuário novo está sendo cadastrado, o teste falhou pois o usuário não possui um nome válido, logo não foi cadastrado.”


Parece pouca coisa, mas para o cliente é um informação muito importante nas discussões sobre prioridade de correção de bugs e melhorias do sistema. Isso porque fica claro para o cliente quando o desenvolvedor descreve o teste exato que falhou e o cliente sabe exatamente a qual caso de teste se refere e qual o problema que está sendo resolvido. Não é informação pertinente ao cliente como que tecnicamente se corrige o problema e como que o sistema está implementado para que o erro ocorre-se, esse é o papel do desenvolvedor.

Simples e Efetivo, mas não é a Silver Bullet



Existem muitos frameworks para facilitar a empregação do BDD. Vimos aqui que mais do que um framework, BDD é uma cultura e pode ser empregado sem o uso de qualquer ferramenta, pois o importante é manter a comunicação entre os níveis técnicos diferente na mesma equipe.


Muitos correm atrás da implantação do BDD nos projetos com a esperança de que os problemas na resolução de bugs e na comunicação da equipe serão resolvidos. Isso não é verdade e seu projeto irá dar tão certo quanto ele daria antes da adoção de BDD. BDD é um mudança de comportamento na equipe onde todos devem estar empenhados na causa de melhorar a comunicação, e tentar entender os problemas de verdade que o sistema se propõe a resolver.


A mudança de comportamento tem que partir do lado do cliente também, pois é necessário a compreensão de que os erros que estão claros para ele agora, não surgiram do nada. Na verdade eles sempre estiveram presentes no sistema, só que protegidos pela barreira que impedia a comunicação entre de desenvolvimento e análise.


Espero ter sido claro, qualquer opinião sobre o assunto será bem vinda.


Por @Gust4v0_H4xx0r

Fev 13

Da Imaturidade à Agilidade

Escrito por Edgard Davidson em 1, 4, 6, Agile, Air, api, AR, arte, Artigo, bar, BI, busca, class, cliente, control, cultura, Curso, Cursos, Desenvolvedor, desenvolvedores, Desenvolvimento, Desenvolvimento de Software, Dica, Documentação, DRE, empresas, err, erro, Excel, exemplo, Ferramenta, Flex, for, gestão, Gráfico, ide, IE, if, image, int, lite, Livro, Mercado, Mestrado, mg, Motivação, O, on, Opinião, Outros, padrão, problema, problemas, processo, produto, Projetos, pt, RIA, Ria’s Geral, Scrum, serviço, Serviços, Software, Sugestões, TAT, Tecnologia, UI, Vários, Ved, vs, XP @ 02 13th, 2011 | via http://edgarddavidson.com | Sem comentários
Edgard Davidson
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

…Houve um tempo em que eu achava que métodos ágeis eram um excelente álibi para programador preguiçoso. E, ainda hoje, as vezes fico pensando sobre o significado do nome “ÁGIL”. Será que esse nome contempla, de fato o seu propósito, ou é um nome meramente “marketeiro”? Veja só:  No dicionário, o significado de “ágil” é ser rápido e flexível, por sua vez, no dicionário, o antônimo de ágil é lento e vagaroso.  Ora, ninguém quer ser taxado como lento e vagaroso!  Sendo assim, se eu não quero ser taxado de lento e vagaroso, então por eliminação eu sou ágil.

Esse clichê formado sobre a palavra ÁGIL distorceu um pouco as coisas. Muitas empresas e desenvolvedores que não conseguiam implantar processos de desenvolvimentos de software maduros, e que por muitas vezes cairam no mito da Fantástica Fábrica de Software,  começaram a se intitular como ágil. Nesse contexto continuo achando que métodos ágeis são um excelente álibi para programador preguiçoso.

A questão é que desenvolver software é uma tarefa que dependente de  tecnologia, processos, e, sobretudo, do conhecimento das pessoas.  Como já diria Fred Brooks em seu famoso artigo No Silver Bullet, não existe bala de prata, não existe ferramenta, metodologia ou qualquer outra mágica que resolva milagrosamente todos os problemas.

Segundo [Filho, 2008]:  “em uma organização imatura os mesmos problemas se repetem de projeto em projeto, o trabalho é excessivo e estressante e frequentemente há a necessidade de corridas desesperadas contra os prazos, a qualidade de vida no trabalho é ruim, o ambiente é desgastante e os profissionais são desmotivados. Os erros relativos ao processos de desenvolvimento de software são comuns em organizações  que utilizam processos imaturos, ocorrendo também naquelas que possuem processos rígidos, complexos e burocráticos e naquelas em que os processos apesar de existirem são seguidos parcialmente, ou em última instância, não são seguidos.”

Não obstante, o mercado tem exigido produtos de software ainda mais sofisticados e em prazos de desenvolvimento mais curtos. A referida exigência, tem instigado a pesquisa na área engenharia de software, objetivando encontrar meios para garantir que o software seja produzido atendendo às expectativas do cliente e aos atributos de qualidade definidos pela organização fornecedora de software e esperados pelo mercado.

Antes  de enfatizar a importância da agilidade do processo, é preciso entender o que ela realmente significa. Em suma, é a capacidade que uma organização possui para responder rapidamente às forças , fraquezas, oportunidades e ameaças do mercado. Há inúmeras situações práticas, onde agilidade do processo é altamente desejado, incluindo: apresentando um novo produto, entrar em um novo mercado,  responder à entrada de concorrentes, responder a alterações de requisitos em produtos em construção, etc.

Outro aspecto, é que o processo de desenvolvimento de software é complexo e precisa favorecer a criatividade e a inovação, e ter um nível adequado de flexibilidade para beneficiar a engenharia de processos na melhoria contínua. O grande desafio na proposta de um processo é conseguir um conjunto de regras que guiem o desenvolvimento sem comprometer a criatividade e a motivação dos desenvolvedores e sem travar a organização para a constante evolução da tecnologia e as adequações necessárias.

Uma abordagem adotada para romper a barreira da imaturidade é a definição de um processo de desenvolvimento de software padrão. O referido processo descreve as atividades que devem ser realizadas no desenvolvimento de software em todos os projetos da organização. A idéia é que isso favoreça que a organização atinja a conformidade com os padrões de qualidade esperados. Na literatura existem várias definições para processos de desenvolvimento de software:

  • “Uma sequência de passos executadas para um determinado propósito; por exemplo, o processo de desenvolvimento de software.” [IEEE, 1994]
  • “Um processo ´e um conjunto de passos parcialmente ordenados, constituídos por atividades, métodos práticas e transformações usado para atingir uma meta.” [Filho, 2008]
  • “O processo de software ´e um conjunto de atividades que leva à produção de um produto de software.” [Sommerville, 2007]

De forma bem resumida, o processo de desenvolvimento de software formal descreve por meio da sua documentação: o que é feito , quando é feito, por quem é feito, como é feito, além dos insumos que usa e os produtos de saída. Em outras palavras, o processo enfatiza a padronização para possuir um parâmetro de medida e de controle e para poder circunscrever o erro em busca de qualidade. Contudo, embora seja necessário definir um processo de desenvolvimento de software, só isso não é suficiente para a construção satisfatória de um software. Existem vários fatores envolvidos que influenciam diretamente a construção do software, por exemplo: a capacitação das pessoas envolvidas, as tecnologias e ferramentas utilizadas, a cultura organizacional, entre outros.

Um processo de desenvolvimento de software não é definido do zero. Na literatura existem vários modelos que descrevem orientações para a definição e implantação de processos, dentre eles a ISO 12207/15504, CMMI e MPS-BR. Nesta linha, o processo de desenvolvimento de software deve estabelecer :

  • atividades a serem realizadas durante o processo, sua estrutura e organização (decomposição e precedência), incluindo a definição de um modelo de ciclo de vida quando pertinente;
  • artefatos requeridos e produzidos por cada uma das atividades do processo;
  • procedimentos (métodos, técnicas, roteiros e padrões) a serem adotados na realização das atividades;
  • recursos necessários (humanos, hardware e software) para a realização das atividades.

Em busca de eliminar a imaturidade, as organizações investem em definir e implantar um processo baseando-se em modelos de maturidade como CMMI e MPS-BR. Entretanto, esses modelos são densos, repletos de subprocessos que devem ser implementados em cada área de processo de cada nível de maturidade (no caso de CMMI) .

Um nível de maturidade é um patamar evolutivo bem definido que que “determina” a capacidade que uma organização possui em desenvolvimento de software. Cada nível visa alcançar um processo de desenvolvimento de software cada vez mais maduro.  Os níveis são uma forma de priorizar as ações de melhoria, de tal forma que se aumente a maturidade do processo de forma continua. Assim, os níveis de maturidade são cumulativos, ou seja, um nível de maturidade mais alto inclui os atributos dos níveis mais baixos. Uma vez que os modelos são projetados para descrever níveis discretos de melhoria de processo, níveis de capacidade provêem uma ordem recomendada para abordar a melhoria de  processo dentro de cada área de processo.

É  esperado que a cada nível alcançado pela organização, mais madura ela se torna em desenvolvimento de software. Um bom processo não garante que os produtos produzidos são de boa qualidade, mas é um indicativo de que a organização é capaz de produzir bons produtos.  Para que isso seja alcançado, um bom processo de desenvolvimento de software baseado em modelos de maturidade como CMMI e MPS-BR só podem ser considerados maduros se houver uma equipe de Quality Assurance atuante, autônoma e não condicionada. Essa equipe trabalha constantemente na garantia e no controle de qualidade do processo e do produto, respectivamente.

Quando uma organização atinge o nível 5 no CMMI ou A do MPS-BR, ela entra em um espiral de melhoria continua.  A equipe de projeto e  a equipe de qualidade reportam para a equipe de definição de processo gargalos e deficiências do processo atual, e complementam com sugestões para melhoria de processo. A equipe de definição de processo por sua vez avalia todas as sugestão, e, se pertinentes, implantam a melhoria no processo. Isso se torna um ciclo de inspeção e adaptação do processo.  Quanto mais madura a equipe, menos atividades de inspeção técnica e verificação são necessárias para garantir a conformidade com o processo e mais esforços podem ser realocado para garantir a conformidade do produto. Veja o post sobre Conformidade com o Produto vs. Conformidade com o Processo.

No gráfico acima tentei ilustrar o que percebo sobre a agilidade de processos. Quando se fala em agilidade em processo, já estamos condicionados a pensar em métodos ágeis de desenvolvimento de software como Scrum, eXtreme Programming , princípios Lean etc. No entanto, agilidade, na essência,  se aplica em um ambiente de desenvolvimento formal também.  No início, quando a organização não possui nenhum processo definido o ambiente não é estável, e, frequentemente, ela depende da competência e heroísmo das pessoas para atingir seus objetivos. Neste ambiente, a rigidez de processo é baixa, informal e caótico, mas apesar disso as organizações muitas vezes produzem produtos e serviços que funcionam. Entretanto, elas freqüentemente estão expostas a vários problemas de projeto como: exceder o orçamento e o cronograma planejado, baixa qualidade, não cumprir compromissos, abandonar processos em momentos de crises e não ser capazes de repetir sucessos do passado.

Para não ficar tão expostas aos problemas de projeto citados, as organizações partem para implantação de processos, e, a medida que esses processos são implantados e os níveis de maturidade de processo são obtidos, mais “rígido”, mais “burocrático”  o processo se torna.  No entanto, entendo que a tão criticada rigidez e burocracia de processos formais é uma fase transitória, de aprendizado, de padronização e, sobretudo de amadurecimento.  Nos níveis mais altos de maturidade o objetivo é a simplificação, a “des-burocratização” de processo. Lendo isto alguém poderia estar perguntando: “Ora! Então porque a organização não vai direto para esse estado?”  Bom, imagino que isso se torna necessário na caminhada da Imaturidade à Agilidade.

Fev 5

Qualidade em Processo de Desenvolvimento de Software

Escrito por Edgard Davidson em 1, 2009, 6, Agile, api, AR, arte, AUG, auto, BI, busca, class, cliente, comunicação, conferência, control, cultura, Curso, Cursos, demo, Desenvolvimento, Desenvolvimento de Software, Documentação, empresas, event, Evento, exemplo, falha, for, Google, ide, IE, if, image, int, Liderança, LOB, Mercado, Mestrado, mg, Motivação, mudanças, NaN, O, on, Opinião, processo, produto, Projetos, pt, Qualidade de Software, RIA, Ria’s Geral, Software, Sun, TAT, Tecnologia, Treinamento, UI, yahoo @ 02 5th, 2011 | via http://edgarddavidson.com | Sem comentários
Edgard Davidson
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Chaus Report 2009 – Standish Group

Pesquisas como as realizadas pelo Standish Group apresentadas no Chaus Report 2009 demonstram que grande parte dos projetos de software falham ou são desafiados, seja porque não cumprem o orçamento, ou não cumprem o cronograma, ou as funcionalidades não atendem às necessidades dos usuários ou porque todos estes fatores estão presentes em conjunto. Para o Standish Group um projeto de software é considerado um Sucesso quando todas a funcionalidades do escopo inicial são entregues no orçamento e cronograma planejado. O projeto é Desafiado quando ele sofre com atrasos, não cumpre o orçamento inicial e/ou é entregue com menos recursos e funções do que o definido no escopo inicial. E finalmente, o projeto é considerado Falho quando ele é cancelado antes da conclusão ou o produto da sua entrega nunca é utilizado.

Há algumas décadas a indústria de software vem buscando técnicas de desenvolvimento que possam reduzir os riscos dos projetos de software e tornar essa atividade mais produtiva. A referida constatação não é recente. Já em em 1968 houve um evento denominado conferência de NATO, que, entre outras coisas, tentou entender e discutir o porquê que a maioria dos projetos de software falham ou são desafiados. De lá para cá, a indústria de software vem evoluindo e a partir dos anos 90 surgiram várias propostas como o desenvolvimento de processos formais como RUP, pautados sobre modelos de maturidade como CMMI e a evolução de autores consagrados como Coad & Yourdon, Pressman, Sommerville, Rumbaugh, Booch, Jacobson, etc.

Quando o assunto é desenvolvimento de software, existem basicamente duas grandes “escolas”: a tradicional e a ágil. Cada uma delas enxerga e trata o processo de desenvolvimento de software de maneiras bem peculiares, apesar dos objetivos finais serem os mesmos. Na escola tradicional o conceito de processo de desenvolvimento de software se assemelha ao usado em processos de produção industrial: um conjunto de passos parcialmente ordenados, constituídos por atividades, métodos, práticas e transformações usadas para atingir uma meta, centrado em documentação e controle operacional. Já os adeptos das metodologias ágeis não estão presos a processos rígidos; o que interessa é aquilo que de fato agrega valor ao usuário, não que a escola tradicional não pense assim, como entregas rápidas ou como já diria um dos princípios ágeis: “Nossa maior prioridade é satisfazer o cliente através da entrega rápida e contínua de software de valor.”

Não obstante, a indústria de software é bastante dinâmica, novas idéias, tendências e tecnologias surgem a todo instante e em todas as partes do mundo. Acompanhar essa dinâmica é fator crítico de sucesso para profissionais e empresas que pretendem adquirir um diferencial no mercado. Um ponto fundamental para acompanhar o dinamismo do mercado está na habilidade de lidar de forma mais eficiente com as mudanças de requisitos, aumentar a motivação da equipe e melhorar comunicação com o cliente do projeto, e, para isso, será necessário estar pronto para introduzir uma nova cultura de liderança que irá alterar os papeis e trará uma nova forma de trabalhar transferindo parte da responsabilidade do gerente do projeto para a equipe.

A adaptação às mudanças decorrentes de fatores externos são uns dos conceitos centrais dos métodos ágeis. Onde os métodos mais formalizados e centrados em planejamento e documentação são preditivos na tentativa de prever as necessidades futuras, em contrapartida, os métodos ágeis são adaptativos e rapidamente se adaptam às novas exigências, aderindo ao lema “abrace as mudanças!”. A única medida de sucesso é a de produto funcionando.

Outro princípio importante é a simplicidade e pensamento enxuto. De acordo com o conceito de pensamento ágil, projetos de grande escala, por exemplo, não são desejáveis. Pelo contrário, é preferível minimizar a quantidade de trabalho daquilo que não precisa ser feito. Isto inclui, por exemplo, não gastar tempo escrevendo documentação desnecessária.

Cada vez mais a abordagem ágil de desenvolvimento de software vem se popularizando entre grandes empresas de sucesso como: google, yahoo, amazom.com, globo.com entre outras. No entanto, nem sempre as empresas que tentam adotar a filosofia ágil têm obtido o mesmo sucesso. Várias discussões tem se formado para entender o motivo do referido insucesso, e as conclusões estão convergindo para fatores como: falta de treinamento dos colaboradores; equipes hierarquizadas, e, sobretudo, resistência de mudança cultural.

Desenvolver software é uma tarefa que exige técnicas de engenharia e arte. Se uma empresa ou profissional não absorver a filosofia ágil dificilmente se manterá competitiva no cenário atual do mercado de software por mais que se implemente uma metodologia.

Nesse sentido, cabe a nós profissionais críticos, formadores de opinião, termos a a clara consciência de adotar processos tradicionais ou processo ágeis, ou no melhor dos casos, como integrar os dois para tirar o maior proveito.

Out 13

O papel do Arquiteto de Informação

Escrito por DClick Team em análise, AR, Arquitetura, arte, Artigo, BI, class, cliente, comunicação, cultura, Curso, Cursos, demo, Desenvolvedor, desenvolvedores, Desenvolvimento, Design, designer, Dica, Documentação, empresas, exemplo, Experiência do Usuário, filtra, for, Formação, Geral, git, IE, if, int, mudanças, O, on, problema, problemas, processo, produto, prototipagem, protótipo, Ria’s Geral, tag, TAT, Twitter, UI, user experience, UX, Ved, XP, zend @ 10 13th, 2010 | via http://blog.dclick.com.br/pt/ | Sem comentários
DClick Team
? X
  • Bookmarks

Blinkbits BlinkLists BlogLines Blogmarks Buddymarks CiteULike Co.mments Del.icio.us Digg Diigo

Fark Feed Me Links Furl Google Linkagogo ma.gnolia Mister Wong Newsvine Propeller Rawsugar

Reddit Rojo Simpy Sphinn Spurl Squidoo StumbleUpon Tailrank Technorati Yahoo

More »

Twitter!

Antes de iniciar o artigo é importante que tenhamos em mente que a disciplina denominada “Arquitetura de Informação” não é algo novo, não está relacionada exclusivamente ao universo digital e principalmente não é apenas a geração de wireframes.

Com base nessa afirmação, vamos abordar de forma prática o papel dos Arquitetos de Informação dentro dos ambientes corporativos. Isso porque é muito comum vermos nas organizações profissionais híbridos, ou seja, aqueles que atuam em mais de uma disciplina ao mesmo tempo.

Tendo em vista que no Brasil o cargo de Arquiteto de Informação é algo relativamente novo (aproximadamente 8 anos) e que os cursos de formação de profissionais ainda estão testando as metodologias e disciplinas que farão parte da grade curricular. Isso porque essa é uma profissão que é formada pelas mais diferentes especialidades, como por exemplo, designers e bibliotecários. E estamos em um processo de análise dos benefícios da presença dessa etapa no desenvolvimento das soluções, bem como tentando demonstrar aos clientes que ao se planejar e testar com aquele que será o usuário final o resultado final é mais seguro no ponto de vista das expectativas.

As vantagens de adotar os processos de Arquitetura de Informação podem ser sentidas durante todo o ciclo de desenvolvimento de uma solução. Isso porque além de entender realmente o que o cliente deseja e poder propor melhores soluções para uma determinada necessidade, todos os envolvidos (arquitetos, designer, desenvolvedores, gerentes de projeto, clientes e usuários) conseguem ter a visão do todo.

Ao ter a visão completa do projeto, fica muito mais fácil e seguro levantar o escopo do projeto, o esforço de cada uma das disciplinas, fazendo com que tanto o cliente quanto o fornecedor tenham uma visão clara da solução.

Claro que isso não significa que o projeto está “engessado”, afinal ao longo do desenvolvimento podem ser levantadas novas necessidades, surgimento de questões técnicas e reavaliação por parte dos envolvidos com a finalidade de melhorar a experiência do usuário (UX – User Experience).

Um dos principais equívocos por parte das organizações está em atrelar o trabalho do Arquiteto de Informação apenas a entrega dos wireframes (protótipos estáticos ou navegáveis), afinal esse tipo de documentação é apenas uma representação física que servirá de apoio para que os conceitos construídos sejam transformados em algo mais tangível e permita um melhor entendimento de todos os envolvidos.

O papel do Arquiteto de Informação é principalmente entender e garantir que as funcionalidades principais não sejam prejudicadas por fatores externos. Ou seja, é importante termos em mente que principalmente em produtos virtuais, onde o custo de produção é completamente diferente de um item físico e as possibilidades de mudanças e implementação de novos recursos são vistos como algo extremamente simples e sem impactos, manter o foco naquilo que é importante para o usuário é fundamental.

Sabemos que é complicado manter um profissional alocado tempo integral em um projeto, contudo devemos lembrar que a melhor forma de garantir a manutenção da estratégia que foi concebida é permitindo que a comunicação entre os membros da equipe e o Arquiteto de Informação possibilitando uma visão filtrada das necessidades apresentadas pelo cliente e permitindo uma comunicação fluída.

Outra estratégia que algumas empresas adotam é de colocar um profissional que faz a “ponte” entre o cliente e o Arquiteto de Informação. Isso pode gerar algum ruído na comunicação e posteriormente problemas no entendimento das reais necessidades do cliente e principalmente daqueles que serão os reais usuários da solução. Por isso recomendamos que haja um processo de imersão do Arquiteto dentro do cliente para que ele possa vivenciar a cultura daquela organização e assim entender os problemas e os tipos de recursos que são de conhecimento geral dos usuários.

Ao conhecer a cultura da organização e o perfil dos usuários, o processo de construção do conceito que será adotado se torna mais ágil e assertivo.

Agora que conhecemos um pouco do papel do Arquiteto de Informação trataremos nos próximos posts sobre os dois programas de prototipagem mais utilizados na atualidade .

« Entradas anteriores |

ACERCA

O que é o RedeRIA ?

O redeRIA não é nada mais que um agregador de feed's que disponibiliza o conteudo de varios blogs e autores ao redor do mundo RIA, actualmente agregamos mais de 2755 entradas vindas de 53 blogs especializados em ria’s, pelo que só fica a ganhar em assinar o feed ou seguir a comunidade no twitter.

Se acha que o seu blog ou um blog de um amigo é interessante e util para os leitores o redeRIA, faça a sua submissão aqui.

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


Deveria o RedeRia agregar conteúdo em inglês?
Ver Resultados

AUTORES


Eduardo KrausAlexandre TadashiBindableCognitiva SoluçõesDaniel LopesDaniel SchmitzDanielPedrinhaDClick TeamEbercomEdgard DavidsonElvis FernandesErko BrideeFabiel PrestesFábio Batista da SilvaFabio da SilvaFabriccio BernardesFelipe BorellaFlavia MoreiraGabriel VersalliniGabriela T. PerryIgor MusardoJanderson CardosoJoão AugustoJose Carlos FielKelps SousaLeonardo FrançaLucas MarçalLuis MessiasLuiz TarabalMario JuniorMário SantosMauro MartinsPablo SouzaPedro ClaudioreneRia BrazilriaPTRicardo CerqueiraRobson FernandesRodrigo Pereira FragaSaintBrSamuelFacchinelloSergio SouzaSilva DeveloperStefan HorochovecTech CaffeTecinforThiago BuenoVedVinícius SandimWillian ManoXAML Cast

PUBLICIDADE








Powered by Wordpress & msdevstudio.com