Mais um problema que tive e custei a encontrar uma solução na internet. Encontrei foi muita gente com a mesma dúvida. Bem, o problema foi o seguinte, criei um app para Android que deveria classificar o usuário quanto ao risco de desenvolver cáries segundo algumas informações fornecidas pelo mesmo. Este modelo de classificação foi gerado por um software muito conhecido, o Weka. O Weka é um software desenvolvido em Java que lhe dá a possibilidade salvar os modelos gerados serializados em um arquivo. O meu plano então era adicionar a biblioteca do Weka ao meu app, carregar o modelo na memória do dispositivo e então deserializar o modelo e aplicá-lo sobre os dados. Porém eis que não deu certo, uma exceção chata pipocando o tempo todo. Pesquisando sobre serialização entendi o problema: A versão que serializa tem de ser a mesma que deserializa. Se quem implementou as classes não declarou no código um número serial explicitamente durante o desenvolvimento, no momento da compilação então é atribuído este valor e então versões diferentes terão números diferentes. Eu estava utilizando uma versão do Weka no PC e outra no app. Assim se você está tendo este problema na hora de deserializar, tenta essa dica e é provável que vá resolver. Utilizando knockout.js como atualizar a lista de um select a partir da escolha em outro select? Pra muitos pode ser simples de cara, mas vou adimitir: para mim nao foi, fui complicando as coisas ao inves de simplificar, quebrei um pouco a cabeca com isso e nao tive bons resultados. Ate que, lendo um post de um blog que falava sobre observables computed me veio a iluminacao! E resolvi partilhar vai que ajudo alguem.Suponhamos uma aplicacao na qual serao escolhidos items, estes itens estao organizados em categorias. Em uma lista seleciono a categoria, e a partir da minha selecao uma segunda lista e abastecida com as opcoes daquela categoria. Vou ser sincero, Pra comecar vejamos uns dados de exemplo:var produtos = [ { grupo:"higiene pessoal", itens:[{'nome':'creme dental','valor':6.95}, {'nome':'shampoo','valor':12.49}] }, { grupo:"material de limpeza", itens:[{'nome':'sabao em po 2kg','valor':13.80}, {'nome':'detergente 500ml','valor':2.80}] }, { grupo:"padaria", itens:[{'nome':'biscoito de polvilho 500g','valor':4.5}, {'nome':'pao de forma integral','valor':8.35}] }];A seguir nosso html:<label>Categoria:</label><select data-bind="options:produtos, optionsText:'grupo', value:categoriaEscolhida, optionsCaption:'categoria...'"></select> <label>Produto:</label><select data-bind="options:itens, optionsText:'nome', value:itenEscolhido, optionsCaption:'Escolha o item'"></select>E por ultimo nosso codigo javascript:var MarketModel = function(){ this.produtos = ko.observableArray(produtos); this.categoriaEscolhida = ko.observable(this.produtos()[0]); this.itens = ko.computed(function(){ return this.categoriaEscolhida().itens; },this);};A magica acontece no observable do tipo computed. Resumidamente, pois a documentacao e muito clara, computed e um campo calculado que sempre sera atualizado quando as variaveis observaveis das quais ele depende forem atualizadas.Assim, toda vez que categoriaEscolhida for atualizada, itens tambem sera. Simples assim. Vamos falar de android.preference. E uma colecao de classes para lidar com o armazenamento de configuracoes e preferencias do usuario, mas tambem podem servir para guardar a ultima posicao em um jogo, tabela de highscores, e outros dados simples sem a complexidade de um banco de dados. Pensando neste uso e que escrevo este Post. Vamos pensar em um simples contador que pode marcar por exemplo quantas vezes a pessoa bebeu um copo de agua