Boa noite , venho submeter meu 5º resumo do livro.

55 á 64

Através de interfaces e composição, podemos criar desde um novo driver JDBC para um determinado banco de dados, ou flexibilizar trabalhos simples, como ordernar listas com Comparators implementando diferentes critérios de comparação.

Este princípio, de manter suas classes abertas para extensão sem a necessidade de alteração no código original, é chamado Open Closed Principle.

Evite herança, favoreça composição é um de dois princípios fundamentais de design do livro Design Patterns, com frequência referenciado na literatura.

A classe Calendar permite mudança no estado de suas instâncias e, portanto, diz-se que a classe é mutável.

 A classe String tem comportamento diferente.

 Todo método invocado em uma String, que parece modificá-la, sempre devolve uma nova Favoreça imutabilidade e simplicidade Casa do Código instância com a alteração requisitada, mas nunca altera a instância original.

Ao tornar uma classe imutável, uma ampla gama de problemas comuns desaparece. Simplicidade e previsibilidade Objetos imutáveis são muito mais simples de manipular que os mutáveis.

Objetos imutáveis não sofrem efeitos colaterais, pois têm comportamento previsível em relação ao seu estado.

Os próprios engenheiros da Sun admitiram alguns erros de design das APIs antigas, como a classe java.util.Calendar ser mutável.

Por isso, muitas vezes recorremos às APIs de terceiros, como a Joda Time, nas quais encontramos entidades de datas, horários e intervalos imutáveis.

Quando o objeto é mutável, para evitar que alguém o modifique, temos que tomar alguma precaução.

Uma solução, frequentemente usada com coleções através do Collections.unmodifiableList(List) e seus similares, é interfacear o objeto e embrulhá-lo de tal forma que os métodos expostos não possibilitem modificação.

 Em vez de passar a referência original adiante, passamos essa nova referência, cuja instância lança exceções em qualquer tentativa de modificação.

 Outra solução para objetos mutáveis é criar cópias defensivas do objeto.

 Em vez de devolver o objeto original que se deseja preservar, criamos uma cópia, por exemplo, através do método clone, e devolvemos esta cópia.

Tópicos de Orientação a Objetos não tem como alterar o objeto original, mas recebe uma cópia para uso próprio, que, se alterar, afetará apenas a si mesmo.

Objetos imutáveis são mais simples de se lidar.

Depois de sua criação, sempre saberemos seu valor e não precisamos tomar cuidados adicionais para preservá-lo.

 Objetos mutáveis, em contrapartida, com frequência necessitam de um cuidado adicional, cujo objetivo é evitar alterações inesperadas.

Otimizações de memória podemos tirar proveito da imutabilidade de outras formas.

 Como cada objeto representa apenas um estado, você não precisa mais do que uma instância para cada estado.

 A própria API da linguagem Java usa a imutabilidade como uma vantagem para fazer cache e reaproveitamento de instâncias.

 É o caso do pool de Strings da JVM, que faz com que Strings de mesmo conteúdo possam ser representadas por uma única instância compartilhada.

 O mesmo acontece em boa parte das implementações das classes wrapper como Integer.

Ao invocar Integer.valueOf(int), a referência a Integer devolvida pode ser fruto de um cache interno de objetos com números mais frequentemente solicitados.

Esse tipo de otimização só é possível com objetos imutáveis.

 É seguro compartilhar instâncias de Strings ou Integers com diferentes partes do programa, sem o risco de que uma alteração no objeto traga efeitos colaterais indesejados em outras partes do sistema.

E há mais possibilidades ainda para otimizações graças à imutabilidade. A classe String ainda se aproveita dessa característica para compartilhar seu array de char interno entre Strings diferentes.

Quando pedimos uma determinada substring, em vez de o Java criar um array de char com o pedaço em questão, ele devolve um novo objeto String, que internamente compartilha a referência para o mesmo array de char que a String original, e tem apenas os seus dois índices ajustados.

Essa otimização é uma implementação um pouco mais simples do design pattern flyweight, em que se propõe reaproveitar objetos com objetivo de diminuir o uso da memória.

 O próprio pool de Strings pode ser considerado um flyweight.

E poderíamos ir mais longe com o flyweight, implementando a concatenação de Strings apontando para diversas outras Strings internamente ao invés de copiar os dados para seu próprio array de char.

É válido também ressaltar o perigo de certas otimizações em alguns casos. Na otimização do substring, por exemplo, uma String pequena pode acabar segurando referência para um array de chars muito grande se ela foi originada a partir de uma String longa.

Isso impediria que o array maior fosse coletado, mesmo se não possuirmos referências para a String original.

Há também um excesso de memória consumida temporariamente.

Com imutabilidade, cada invocação de método cria uma nova cópia do objeto apenas com alguma alteração e, se isto estiver dentro de um laço, diversas cópias temporárias serão utilizadas, mas apenas o resultado final é guardado.

Desta forma, evitamos que duas escritas concorrentes se entrelacem e que leituras sejam capazes de acessar dados inconsistentes ou intermediários.

 A tarefa difícil é definir todas as regiões críticas e quais são mutuamente exclusivas; definir uma região muito grande gera perda de vazão (throughtput), enquanto uma de tamanho insuficiente implicará os mesmos problemas de não tê-las.

Em vez de recorrer aos recursos das linguagens, pensemos nesses objetos de forma diferente, evitando esse estado intermediário, não permitindo a mudança de valores.

 A vantagem é a thread-safety, pois, como não existem estados intermediários, não há como acessar nem modificar dados em momentos de inconsistência.

O estado inconsistente fica escondido na lógica de construção, e o novo estado só estará disponível quando terminar de ser construído, para então ter sua referência compartilhada por mais de uma thread.

As linguagens funcionais mais puras, como Erlang e Haskell, estão sendo utilizadas em ambientes de grande concorrência, dada sua característica de trabalhar quase que apenas com valores imutáveis.

 Perde-se o conceito de variável como o conhecemos, já que os valores não mudam; nascem e morrem com o mesmo estado.

Você é obrigado a programar apenas de maneira imutável, o que é uma enorme mudança de paradigma.

 Muitas dessas linguagens podem rodar sobre a JVM, como Scala, que, apesar de suportar mutabilidade, tem fortes raízes em programação funcional e recomenda o uso de imutabilidade. Cada invocação de método que cria uma situação nova, cria um estado novo, devolve a referência para um objeto novo.

Uma classe Periodo imutável, implementada com Calendars, precisará trabalhar com cópias defensivas em dois momentos.

Primeiro, quando receber algum Calendar como parâmetro e, depois, quando devolver algum Calendar que faça parte da composição do objeto.

 Se não copiarmos os objetos, é possível que algum código externo à classe Periodo altere os Calendars em questão, gerando inconsistência.

Cuidado com o modelo anêmico Casa do Código Aproveitamos aqui o fato de Calendar implementar Cloneable, caso contrário precisaríamos fazer a cópia manualmente, criando um objeto e alterando os atributos pertinentes um a um.

 Como nossa classe é imutável, se precisarmos calcular alguma informação que exija qualquer modificação, clonamos o objeto.

 E, com uma pequena modificação, podemos implementar o design pattern flyweight em nossa classe, compartilhando a instância do Calendar de início do período entre o objeto original e o novo, com uma semana adiada.

Para tanto, precisaríamos de um outro construtor privado para ser chamado no a dia Uma Semana que não fizesse o clone.

 Utilizar classes imutáveis traz um trabalho a mais junto com os diversos benefícios descritos. Cuidado com o modelo anêmico Um dos conceitos fundamentais da orientação a objetos é o de que você não deve expor seus detalhes de implementação.

 Encapsulando a implementação, podemos trocá-la com facilidade, já que não existe outro código dependendo desses detalhes, e o usuário só pode acessar seu objeto através do contrato definido pela sua interface pública.

 O método setSaldo é um bom exemplo disso, já que dificilmente o saldo em uma entidade Conta será simplesmente “substituído” por outro. Para alterar o saldo de uma conta, é necessária alguma operação que faça mais sentido para o domínio, como saques ou depósitos.

 Nunca crie um getter ou setter sem uma necessidade real; lembre-se de que precisamos que essa necessidade seja clara para criar qualquer método que colocamos em uma classe. Particularmente, os getters e setters são campeões quando falamos em métodos que acabam nunca sendo invocados e, além disso, grande parte dos utilizados poderia ser substituída por métodos de negócio.

 Essa prática foi incentivada nos primórdios do AWT, para o qual era recomendado criar getters e setters para serem invocados no preenchimento de cada campo visual da sua interface gráfica com o usuário, cunhando o termo JavaBean.

Os EJBs também contribuíram para esta prática, como será visto adiante.

Se for preciso, por exemplo, que uma taxa seja debitada toda vez que um depósito é realizado, será necessário percorrer todo o código e modificar Cuidado com o modelo anêmico Casa do Código essas diversas invocações.

Página 16

Estes termos são opiniões que relacionam com a marca, o termo imagem corporativa externo e  termo identidade. termo imagem corporativa, terá surgido na década de 1950 e terá sido utilizado pela primeira vez por Walter Margulies. Este, terá usado a expressão como forma de designar programas de Design complexos, coerentes e resultantes de investigação e análise.

Uma esfera de marca não se define pela imagem ou símbolo visual ou seja a sua identidade e algo de de uma forma ultrapassa o seu significado,a forma  como a empresa interage com seus clientes e que ajuda na criação de emoções e percepções por parte dos mesmos.A marca pode determinar seu sucesso través de um conjunto de factores que formam uma personalidade.Essas distribuidas atraves de empregados,fornecedores, distribuidores …

A relação de marca e consumidor é atraves do símbolo que e uma relação emocional pode dizer-se ,estabelecida através de argumentos lógicos e que surgem emoções.Então numa comunicação empresarial está,mais exigente e tenta reformular atraves do abandono da lógica objetiva dos produtos ao benficio de estilos de vida . Através dos vários termos, sejam estes, marca, símbolo, imagem corporativa ou mesmo identidade corporativa, irão continuar em desenvolvimento consoante a evolução cultural e sociológica que se tem sentido no percurso evolutivo da internet e entre outros tipos de evolução tanto da sociedade como da disciplina de Design.

1.3.3 A IMPORTÂNCIA DA MARCA

E DA SUA COMUNICAÇÃO

A marca é promissor pois a grnade ideia e expectativas que têm na mente de cada consumidor ,esses produtos e serviços podem representar uma empresa e na minha opinião a marca deve ser escrita manual ,pois a marca transmite não só visualmente mais tem um significado que nem tudo se comunica . Os elementos que usamos signos e símbolos têm a capacidade de transmitir e comunicar algo que não está explícito na mensagem, embora assumam um determinado significado ou simbolismo.

O texto destaca a ideia de que, embora nem tudo seja explicitamente comunicado, existem significados presentes fora da comunicação direta. Segundo Costa (2006: 54), tudo tem significado, pois este é uma produção autónoma do indivíduo em resposta aos estímulos do meio, sejam eles naturais ou artificiais. No contexto de uma marca, a transmissão eficaz da comunicação envolve o estudo de diversos campos relacionados ao tema, criando uma forma de comunicação que se baseia em significados implicitamente compartilhados no senso comum dos signos.

O texto exemplifica como elementos percebidos, como nuvens cinzentas indicando chuva, ramos agitados indicando vento e folhas no chão indicando outono, possuem significados que são deduzidos pelo homem através da experiência empírica. Esses significados não são comunicados explicitamente, mas são inferidos pelos indivíduos, contribuindo para a eficácia na comunicação humana.

1.3. 4 A IMPORTÂNCIA DO “BRANDING”

(MARCA) PARA O SUCESSO COMERCIAL

Daniel Raposo (2008: 14) destaca três funções principais da marca: Distinção e Descrição, subdivididas em categoria e atributo. A Distinção visa apresentar e individualizar a empresa, enquanto a Categoria comunica a empresa por meio da descrição, e o Atributo revela competência e qualidades. Um exemplo ilustrativo é dado, onde a representação de uma marca de barco pode referir-se à categoria se associada ao setor de atividade ou ao atributo moderno se o foco for tecnológico (Daniel Raposo, 2008: 14).

A marca pode ter seu significado alterado ao longo do tempo devido a vários fatores, uma vez que seus públicos considerarão o desempenho da empresa e de seus produtos, apesar da intenção do emissor. Alina Wheeler (2009: 2) destaca, em uma perspectiva comercial e relacionada ao branding, que uma marca forte se destaca em um mercado lotado, impactando seu sucesso independentemente de ser uma start-up, uma organização sem fins lucrativos ou um produto.

Wheeler (2009: 2), alinhando-se com as ideias de Daniel Raposo, identifica três principais funções da marca: Navegação, onde a marca ajuda o consumidor na escolha entre opções, individualizando-se por distinção; Reafirmação, onde as marcas comunicam a qualidade intrínseca do produto ou serviço, reforçando aos clientes a importância de sua escolha; e Compromisso, onde as marcas utilizam imagens, linguagem e associações para incentivar a identificação dos clientes com a marca.

Até página 20

Experiência do usuário em interfaces digitais

4º Resumo (pag 39 á 45)

Esta parte do 4º resumo destaca a necessidade de sustentabilidade na assimilação da informação. O texto ressalta o desafio de conteúdo e pensamento articular diante da abundância de informações digitais e algoritmos. A web permitiu o surgimento de curadorias, onde os usuários selecionaram e analisaram o que importava relevante, influenciando a forma como outros experimentaram a informação.

Esse destaque é evidente em plataformas como o YouTube e o Pinterest, que promovem a curadoria de conteúdo. Esse movimento transforma a experiência de obter conhecimento na rede, tornando-a mais direcionada e eliminando excessos. Os curadores não apenas distribuem informação, mas também são reservados para a formação de comunidades e processos de aprendizagem mútua.

Na área de Design de Interação no Brasil, diversos blogs, podcasts e canais do YouTube atuam como curadorias comunitárias, utilizando a web como território educativo. As instituições de ensino também passam a exercer o papel de curadoras de conhecimento, aderindo ao e-learning e oferecendo cursos online.

Além disso, o texto destaca a importância das políticas de dados abertos, que favorecem a transparência dos gastos públicos e aproximam os cidadãos das informações sobre a administração dos recursos públicos. Essas políticas são aplicadas tanto por governos quanto por instituições privadas e de ensino.

O autor ressalta a necessidade de pensar em sustentabilidade ao considerar a experiência do usuário, não apenas no desenvolvimento tecnológico, mas também sem impacto socioambiental e econômico. Ele alerta para o cuidado no uso da tecnologia e defende a responsabilidade na criação de negócios e serviços digitais. O texto conclui enfatizando a importância de fundamentar as decisões de design para criar produtos intuitivos e adequados aos usuários iniciais, destacando que o próximo capítulo abordará fundamentos, princípios e abordagens de design para adaptar produtos à realidade do público-alvo.

Capitulo 1 “GETTING STARTED WITH THE BASICS”

Página 25 a 44

Após passarmos então as primeiras 24 paginas com uma introdução e a instalação de uma virtual machine e do kali, damos inicio ao primeiro capitulo ” Começando com o básico “.
E acaba por ser exatamente isso o livro explica-nos que por nossa própria natureza, os hackers são executores, queremos é tocar e começar a “brincar” com as coisas, alem de também criar e “partir” algumas. Somos poucos os que querem ler longos termos de teoria de tecnologia e informação sobre ela antes de poder fazer o que mais amamos, que é hackear.
O autor com isso em mente elaborou este capitulo para fornecer alguns conceitos báscios e fundamentais para conseguir começar a “mexer” e a implementar código no kali.
Em relação ao termos e conceitos é abordado ‘Binaries’, ‘Case sensitivity’, ‘Directory’, ‘Home’, ‘Kali’, ‘root’, ‘Script’, ‘Shell’, ‘Terminal’.
Depois disso, começamos pelo “tour” no kali, é nos ensinado a interagir com o desktop e a mexer com o terminal, dando por terminado com uma explicação dos arquivos de sistema Linux, entrando em pormenores nos diretórios e subdiretórios no entanto dizendo explicitamente que ao longo do livro vai perder mais tempo falando nos pontos chaves deles mesmos.
Após isso, entramos na metade do capitulo onde o autor começa a explorar os comandos básicos no Linux, desde a fazer um login a dar os primeiros passos a navegar no sistema. No decorrer é também nos ensinado uma linha de pensamento para encontrarmos informação que estejamos curiosos por saber como por exemplo ‘kali >locateaircrack-ng’, apesar do comando locate não ser perfeito ás vezes o resultado dele acaba por ser um opressor fornecendo mais informações, para além de que este comando usa uma base dados que geralmente é atualizada uma vez por dia, acabei por dar este exemplo mas são abordados vários comandos e outras técnicas. E por fim a modificar os ficheiros e os seus diretórios, ate que assim damos por chegar a ultima pagina do capitulo e mais uma vez este livro me surpreende. Nunca tinha visto algo algo parecido encontramos o ‘GO PLAY NOW!’ para o autor mostrar que vale a pena tudo o que foi visto e garantir que adquirimos as skills básicas para navegar em volta dos arquivos do sistema elaborou um conjunto de exercícios para que o leitor possa se sentir confortável a passar para o próximo capitulo e ganhar mais um bocadinho daquele bichinho que é o hacking. Para dar por terminado este resumo deixo aqui expresso o exercício assim como os meus parabéns ao autor porque apesar de nao entrar em detalhe sobre nenhum dos conceitos, abordou apenas o suficiente para permitir que o leitor fosse capaz de explorar o sistema operacional e no fim perceber que toda a informação que adquiriu ficou vinculada. Se ficou dito que discussões mais profundas serão aguardadas no próximos capítulos mal posso esperar.

EXERCISES
Before you move on to Chapter 2, try out the skills you learned from this
chapter by completing the following exercises:

  1. Use the lscommand from the root (/) directory to explore the
    directory structure of Linux. Move to each of the directories with
    the cdcommand and run pwdto verify where you are in the directory
    structure.
  2. Use the whoamicommand to verify which user you are logged in as.
  3. Use the locatecommand to find wordlists that can be used for
    password cracking.
  4. Use the catcommand to create a new file and then append to that
    file. Keep in mind that >redirects input to a file and >>appends to a
    file.
  5. Create a new directory called hackerdirectory and create a new file in
    that directory named hackedfile. Now copy that file to your /root
    directory and rename it secretfile

Resumo pág. 20-56

Nesta fase, o livro fala como podemos criar uma página Web em um pc, tanto no mac como no windows, mas eu particularmente como tenho windows, tomei mais atenção a essa parte. Posteriormente, o livro ensina-nos a trabalhar com um sistema de gerenciamento de conteúdo, plataforma de blogs, ou aplicações. Assim sendo, as ferramentas fornecidas nas seções de administração desses sites geralmente permitem que editamos partes da página, em vez de toda a página. Se imaginarmos uma loja de e-commerce com 1.000 itens para venda, apenas a alteração de um modelo é muito mais fácil do que mudar a página para cada produto. Em sistemas como este, quando temos um grande bloco de texto que podemos editar, como uma notícia, um post do blog ou a descrição de um produto em uma loja de e-commerce, vamos ver muitas vezes um editor de texto exibida. Desta forma, podemos ter mais controle no site. Alguns sistemas de gerenciamento de conteúdo oferecem ferramentas que também permitem a edição dos arquivos de modelo. Se tentarmos editar arquivos de modelo, precisamos de verificar a documentação do CMS como todos eles diferem uns dos outros. Desta forma, precisamos ter cuidado ao editar arquivos de modelo, porque se excluirmos a parte errada do código ou acrescentar algo no lugar errado o site pode parar de funcionar
completamente.
Depois o autor do livro faz um pequeno resumo do primeiro capitulo e paço para o segundo capitulo.
No segundo capitulo. o livro aborda o “texto”, ou seja, cabeçalhos, parágrafos, negrito, itálico, sublinhado, marcação estrutural e semântico. Explica que para criar uma página web, vamos adicionar tags (conhecidos como marcação) para o conteúdo da página. Essas marcas fornecem significado extra e permitir que os navegadores mostrarem aos usuários a estrutura adequada para a página.
Neste capítulo aborda que iremos aprender como adicionar marcação para o texto que aparece em páginas, como por exemplo, marcação estrutural e marcação semântica.

Computação : Interação Humano Computador 04º Resumo

pagina 28 – 43

7. Linhas de pesquisa em IHC

A intersecção entre computação e psicologia oferece uma oportunidade valiosa para elucidar os processos cognitivos humanos e as estruturas de memória. Além da influência dos psicólogos nesse campo, a construção de novas tecnologias também é fortemente influenciada pela psicologia. Esta colaboração estende-se para além da psicologia e inclui cientistas da informação, profissionais de negócios, educadores, antropólogos e sociólogos, todos contribuindo e beneficiando dos avanços na interação humano-computador (IHC). Esta inter-disciplinaridade gerou diversas direções de pesquisa, refletindo as sinergias únicas que continuam a moldar a evolução deste campo dinâmico. É importante notar que a lista fornecida não é exaustiva, mas enfatiza a amplitude e expansão do âmbito da investigação neste campo multifacetado.

7.1 Especificação e implementação da interação

Ferramentas modernas de construção de interface são como nossos super poderes de produtividade, mas aqui vai um truque. Essas ferramentas são ótimas para tarefas simples, como criar menus e widgets, mas não são muito boas para lidar com sua criatividade. Novas técnicas de elicitação de requisitos exigem maior envolvimento do usuário na definição de como interagir com o sistema. Afinal, quem melhor para lhe dizer como algo funciona do que as pessoas que o utilizam? É importante lembrar que novos gadgets e formas de interação surgem a todo momento. Isso significa que você precisa atualizar constantemente sua abordagem para acompanhar o movimento tecnológico em constante evolução.

exemplo de

Especificação e implementação da interação

7.2 Manipulação direta

São interfaces visuais nas quais os usuários manipulam representações
objeto de interesse. A pesquisa empírica pode nos ajudar a entender
Perguntas sobre qual analogia ou representação metafórica implementar.
Novas formas de manipulação direta incluem: linguagem visual,
Visualização espacial, controle remoto, tele-presença, realidade virtual e
Aumento de dados.

exemplo de manipulação direta

7.3 Dispositivos de entrada e apresentação de dados

Imagine as muitas opções para interagir com sua tela: desde tocar telas de alta resolução com stylus e canetas até comandos de voz, gestos, mouses, luvas e joysticks. A seleção de equipamentos não é apenas uma questão técnica, mas uma dança harmoniosa entre a tarefa a ser executada e critérios como velocidade, precisão, cansaço, facilidade de correção de erros e satisfação do usuário. Esses padrões são mais do que apenas palavras bonitas – eles são medidos por meio de experimentação extensiva com representantes da comunidade de usuários-alvo, realizando tarefas semelhantes às que enfrentarão todos os dias. Garantir a melhoria do desempenho através de métodos quantitativos para garantir que a escolha do equipamento não seja apenas funcional, mas uma verdadeira alavanca de desempenho para os utilizadores.

7.4 Assistência online

Exploração da Informação:
Com o aumento constante da disponibilidade de conteúdo multimédia na Internet e em bases de dados corporativas ou científicas, a necessidade de ferramentas e estratégias que permitam aos usuários filtrar, selecionar e reorganizar suas informações de maneira rápida e intuitiva é cada vez mais urgente. A subárea de IHC conhecida como “visualização de informações” (infovis) concentra-se nesse desafio. Entre as técnicas preferidas nesse campo estão as telas amplas, o apontamento direto, os grafos, os caledogramas, os dendogramas e os mapas de temperatura.

Telas Amplas:
A capacidade humana de indexar informações no espaço ,é explorada através da tela grande. Esta abordagem visa aumentar a área de trabalho e, assim, reduzir as demandas cognitivas, distribuindo de forma eficiente as informações necessárias.

Modelo de grande tela


Apontamento Direto:
A pintura e a linguagem visualizam ideias. O ato de apontar figuras promove a integração dos componentes visuais e verbais do raciocínio, simplificando a consolidação de ideias.

Apontador que ajuda a destacar pontos importantes


Grafos:
Os grafos são uma técnica muito importante na visualização de dados, regularmente aplicados na análise de cartografia, redes sociais e bio informática.

Modelo de grafos

Caledogramas:
Os caledogramas, utilizados para a classificação de espécies, agrupam organismos ancestrais com todos os seus descendentes.

Exemplo de caledograma

Dendogramas:
Os diagramas em formato de árvore, geralmente são aplicados na ilustração e agrupamentos hierárquicos.

Exemplo de dendograma

Mapas de Temperatura:
Os mapas de temperatura representam a visualização de dados apresentados em formato de tabela colorida onde destacam informações de acordo com as categorias específicas assim oferecendo uma visão rápida e intuitiva.

Exemplo de mapa de temperatura

Capítulo 2 Teorias e Métodos

Objetivos:
• Apresentar teorias de alto nível que fornecem subsídio geral para o projetista de sistemas interativos
• Introduzir o modelo Objeto-Ação proposto do Shneiderman que preconiza o entendimento, em detalhes, da tarefa e o reconhecimento do papel desempenhado por todos os objetos utilizados na sua execução.
• Discutir o impacto de fatores como a frequência de uso, perfis de tarefas
e estilos de interação sobre o projeto de interface de sistemas interativos.
Apresentar dicas práticas para a construção de interfaces de qualidade
• Debater acerca de quais tipos de tarefas sistemas automatizados levam
vantagens sobre o operador humano (trabalho manual), e em quais o ser
humano tem desempenho superior a sistemas automatizados.

Introdução
Um bom projetista não pode se confiar apenas em julgamentos intuitivos. Neste capítulo apresentaremos técnicas que nos dão direcionamento tanto de
alto nível na forma de teorias e modelos, como princípios de nível médio e
dicas práticas.

  1. Teorias de alto nível

1. 1 Introdução

No interessante mundo do design de sistemas interativos, diversas teorias desempenham um papel crucial. A teoria exploratória nos orienta na observação do comportamento, na descrição de atividades e na comparação de conceitos entre programas e treinamentos. A teoria da predição, por outro lado, fornece aos projetistas ferramentas para comparar o desempenho, considerando aspetos como tempo de execução e taxa de erro.
Algumas dessas teorias concentram-se em atividades cognitivas e perspetivas, como o tempo que leva para encontrar um item na tela ou converter um caractere de itálico para negrito. Surpreendentemente, a teoria relacionada à previsão de tarefas motoras é muito eficaz em prever com precisão o tempo que um usuário levará para navegar até um item específico na tela.

No entanto, o processamento de atividades cognitivas complexas (muitas vezes envolvendo múltiplas sub tarefas) torna a previsão uma tarefa desafiadora. O uso do sistema também pode fazer uma diferença considerável no desempenho; um usuário iniciante pode levar até 100 vezes mais tempo para concluir uma tarefa do que um usuário experiente.
Embora centenas de teorias no campo da interação humano-computador (IHC) satisfaçam a situação atual, muitas teorias ainda estão em processo de maturação, tanto por seus criadores quanto por aqueles que buscam aprimorá-las. Isto mostra que o campo está em constante evolução e promete mudanças novas e potencialmente transformadoras. Vamos explorar algumas teorias interessantes.

1.2 O Modelo de Foley

O modelo “top-down” proposto por Foley et al. (1987) para o desenvolvimento de sistemas interativos segue uma abordagem modular em quatro níveis:

  • Conceitual,
  • Semântico
  • Sintático e Léxico.

Conceitual: Representa o modelo mental do usuário em relação ao sistema, como no exemplo de uma transação bancária. Aqui, a compreensão de ações interligadas, como consultar saldo, retirar dinheiro e atualizar saldo, é fundamental.

Semântico: Define os significados dos termos do sistema, como “saldo” e “numerário”. Esta camada proporciona clareza e entendimento dos elementos do sistema, contribuindo para uma comunicação eficaz.

Sintático: Estabelece as formas de utilizar os termos definidos para realizar tarefas específicas. No exemplo, a combinação de consultas de saldo, liberação de numerário e atualização de saldo forma a tarefa de efetuar um saque.

Léxico: Define os mecanismos dos dispositivos de entrada e apresentação, incluindo o uso de teclas e botões. Por exemplo, em um caixa eletrónico, o cliente utiliza botões, enquanto em um microcomputador, o projetista pode incorporar o mouse e teclas de navegação.

A vantagem desta abordagem “top-down” é sua característica modular, encorajando os projetistas a iniciar no nível conceitual e mapear progressivamente as transições entre os diferentes níveis. Isso proporciona uma estrutura organizada para o desenvolvimento de sistemas interativos, promovendo eficiência e compreensão aprofundada durante todo o processo.

1.3 Os Modelos GOMS e Keystroke

Os dois modelos foram propostos por Card, Moran e Newell (1983) propuseram dois modelos famosos, um deles é o GOMS, cuja abreviatura enfatiza os elementos básicos: Metas (metas), Operadores (operadores), Métodos (métodos) e Regras de Seleção (regras de seleção). Nesta visualização, o objetivo do usuário (como editar um documento) é dividido em subobjetivos (como inserir uma palavra).
Esses objetivos são alcançados através de métodos específicos, como mover o cursor para o local desejado. Os operadores, por sua vez, são definidos como “comportamentos cognitivos, motores ou percetivos básicos” necessários para alterar o estado mental do usuário ou influenciar o ambiente da tarefa. Exemplos de operadores incluem pressionar teclas .Desenvolvido por Card, Moran e Newell em 1983, o modelo GOMS propõe uma estrutura para analisar a interação humano-computador. Este modelo utiliza as abreviações de “objetivo”, “operador”, “método” e “regra de seleção” para descrever como os usuários atingem seus objetivos por meio de métodos, utilizando operadores como operações básicas. Os exemplos incluem o pressionar de tecla e movimentação do cursor. As regras de seleção orientam a escolha entre os métodos. O gráfico abaixo ilustra o tempo gasto por cada operador. Os modelos GOMS são valiosos para compreender e otimizar as interações, tendo em conta a eficiência com que as tarefas são executadas e o impacto da seleção do caminho na eficácia do utilizador.

Tempo gasto durante a execução de cada operador

O modelo de nível de clicks tecla foi projetado para prever tempos de execução sem erros para tarefas executadas por usuários experientes, somando o tempo para sub tarefas como digitação, cliques do mouse, posição do cursor, desenho, raciocínio e espera pelo tempo de resposta do sistema. No entanto, este modelo concentra-se em usuários experientes que executam tarefas e não aborda aspetos como aprendizagem, resolução de problemas, recuperação de erros, satisfação subjetiva ou retenção.
Uma alternativa ao modelo acima é o diagrama de transformação, que já é bastante conhecido na engenharia de software e existe na UML (Unified Modeling Language). Esses gráficos são valiosos tanto durante as fases de design quanto de ensino e podem ser usados ​​como preditores de tempo de aprendizagem, tempo de execução e ocorrência de erros.

Modelo de diagrama de transição

1.4 Modelos de estágios de ação

Norman propõe sete estágios de ação, delineando um modelo de interação humano computador (Card et al., 1983):

  1. Formular um objetivo;
  2. Formular uma intenção;
  3. Especificar uma ação;
  4. Executar uma ação;
  5. Perceber o estado do sistema;
  6. Interpretar o estado do sistema;
  7. Avaliar o resultado.

O processo de interação do usuário com o sistema segue a seguinte sequência: o usuário formula uma intenção conceitual, traduz-a na semântica de diferentes comandos, constrói a sintaxe necessária e, finalmente, executa uma ação, como mover o mouse para selecionar um ponto. a tela. Estas etapas, descritas por Norman como ciclos de ação e avaliação, revelam desafios fundamentais.
A “lacuna de execução” refere-se à incompatibilidade entre a intenção do usuário e as ações permitidas pelo sistema. Por outro lado, a “lacuna de avaliação” representa a diferença entre a representação do sistema e as expectativas do usuário. A Figura 19 ilustra visualmente essas lacunas, destacando as lacunas que podem surgir durante as interações. Esta análise é fundamental para identificar e superar obstáculos, ajudando a entregar uma experiência mais alinhada com as intenções e expectativas do usuário.

Golfos de execução e de avaliação

Norman propôs quatro princípios para um design eficaz:

1) Manter visíveis os estados do sistema e as opções operacionais.

2) Alinhar um modelo conceitual sólido com diagramas de sistema,

3) Usar mapeamentos claros para revelar relações entre os estágios,

4) Fornecer feedback contínuo. Destaca a importância de estudar erros nas transições entre objetivos, intenções e ações.

O modelo também destaca quatro pontos-chave para os usuários que exploram interfaces: formulação inadequada de metas, dificuldade em identificar elementos de interface, falta de conhecimento de como executar ações e feedback insuficiente. Esses pontos indicam áreas-chave para melhorias na usabilidade e na experiência do usuário.

1.5 Teorias voltadas para o uso de Widgets

A maioria dos programas de computador usa widgets como rótulos, campos, caixas de seleção e caixas de seleção. Em ambientes de programação, os desenvolvedores costumam usar pintores de tela para criar interfaces arrastando widgets de uma caixa de ferramentas.
A utilização de widgets oferece a oportunidade de avaliar a qualidade da interface, pois cada tipo de widget possui sua complexidade de uso. Interfaces com widgets cuja operação é cara podem levar à redução do desempenho do usuário, à fadiga precoce e ao aumento das taxas de erros durante a operação.
A ordem em que os widgets são renderizados na tela é crítica e deve ser lógica e consistente com os objetos do mundo real. Por exemplo, um formulário de tela deve seguir a mesma ordem de campos do formulário em papel correspondente. Esses princípios enfatizam a importância do tipo e da disposição dos widgets em uma interface para garantir uma interação eficiente e intuitiva, promover melhor desempenho e reduzir erros do usuário.

Páginas 42 à 50

2.3.4.2 BOTÕES

Os botões digitais têm uma gama variada de formas, não se limitando a serem apenas discos redondos, podendo assumir formas gráficas ou serem representados por imagens que sugerem uma ação.

Durante interações em dispositivos móveis, como tablets ou smartphones, o feedback ao usuário pode se dar por mudanças visuais, como alterações de cor, ou através de feedback sonoro ao ativar um botão, como mencionado por Pannafino.

Em telas sensíveis ao toque, os botões têm dois estados: estático e pressionado, enquanto em computadores, existem quatro estados distintos: estático, hover (rato sobre o botão sem pressionar), pressionado e visitado após a ação.

É crucial considerar a diferença entre dispositivos ao desenvolver interfaces, já que a interação precisa se adaptar ao espaço disponível. Enquanto o cursor do computador pode interagir precisamente com objetos pequenos, como um único pixel, os dispositivos touchscreen exigem áreas maiores para interações precisas, necessitando cerca de cinquenta pixels em altura para cliques.

Além dos botões de navegação, existem os botões de “call to action”, cujo objetivo é incentivar o usuário a tomar ações específicas, como se inscrever em um serviço, fazer download ou comprar um produto. Eles geralmente empregam uma linguagem urgente, utilizando expressões como “Registe-se Agora” ou “Experimente Grátis” para capturar a atenção do usuário.

2.3.4.3 TIPOGRAFIA NO ECRÃ

A tipografia digital tornou-se mais acessível para designers com o surgimento de serviços online, como Typekit, Fontdeck e Google Fonts, o que também contribuiu positivamente para resolver problemas de pirataria e direitos autorais das fontes. Além disso, esses serviços melhoraram a renderização das fontes em diferentes navegadores e dispositivos.

Escolher a tipografia adequada para telas pode ser desafiador devido à grande variedade de fontes disponíveis. Ellen Lupton analisou uma seleção de fontes reconhecidas globalmente, populares entre os designers web, usando critérios essenciais:

  1. Legibilidade: A distinção entre os caracteres é crucial. Fontes altamente modulares ou geométricas podem ser menos legíveis do que aquelas com formas mais orgânicas e distintas.
  2. Leitura: A fonte deve ser confortável para leitura prolongada em texto corrido.
  3. Flexibilidade: A capacidade da fonte em funcionar bem em diferentes tamanhos e pesos é fundamental, servindo tanto para títulos quanto para texto principal.
  4. Carisma: A fonte deve ter detalhes únicos e ser memorável, especialmente em tamanhos maiores.
  5. Classe: A fonte transmite uma sensação de sofisticação ou elegância?

Além desses critérios, é essencial que o designer teste e experimente as fontes para determinar qual se adapta melhor ao projeto.

2.3.4.4 ALINHAMENTO E GRELHAS

O alinhamento e as grelhas desempenham papéis cruciais no design visual e na organização de elementos em um projeto.

A grelha atua como uma estrutura invisível que sustenta o projeto, estabelecendo alinhamentos e relações entre objetos e componentes. É fundamental para criar uma estrutura coesa e organizada.

O alinhamento, por sua vez, é um elemento chave na comunicação visual, permitindo ao designer criar uma experiência organizada e sistemática para o usuário. A ideia é que todos os elementos na tela devem estar alinhados entre si na medida do possível, e qualquer desalinhamento deve ter uma razão justificável para sua diferenciação.

Conforme mencionado por Lidwell, Holden e Butler em “Universal Principles of Design”, o alinhamento entre objetos gera uma sensação de unidade e coesão, oferecendo estabilidade visual ao projeto como um todo. O alinhamento pode ser uma ferramenta poderosa para guiar o usuário pelo design, como quando linhas e colunas de uma grelha ou tabela indicam relacionamentos entre elementos e orientam o movimento visual do usuário de forma consistente.

2.3.5 USABILIDADE
2.3.5.1 LEGIBILIDADE

A legibilidade do texto em design envolve vários elementos essenciais, conforme discutido por Lidwell e Ellen Lupton:

  1. Tamanho do Texto: O tamanho da tipografia para telas varia do padrão de 12px, podendo ser ainda menor para telas menores. Designers estão adotando tamanhos maiores, como 14px, 18px ou até 21px para o corpo do texto, especialmente em blogs, para tornar a leitura mais agradável.
  2. Tipos de Letra: Escolher um tipo de letra que se adeque ao contexto e conteúdo do projeto é crucial. Manipular características como tamanho, contraste, peso, cor e hierarquia ajuda a criar experiências de leitura agradáveis e atrativas.
  3. Constraste: É recomendado o uso de texto preto em fundos brancos, ou vice-versa, para um bom contraste. Níveis acima de 70% são considerados ideais. É crucial manter um contraste adequado entre texto e fundo para uma boa legibilidade. Fundos texturizados podem reduzir significativamente a legibilidade e devem ser evitados.
  4. Espaçamento entre Linhas: O espaçamento entre linhas afeta a aparência dos parágrafos e a estrutura da página como um todo. Uma página bem projetada deve equilibrar o espaço em branco e a densidade do conteúdo.

Esses elementos contribuem significativamente para a clareza e facilidade de leitura do texto em design, garantindo que a escolha do tamanho, tipo de letra, contraste e espaçamento sejam cuidadosamente considerados para uma experiência de leitura agradável e eficaz.

2.3.5.2 ACESSIBILIDADE

A acessibilidade no design tem evoluído para garantir a usabilidade por todas as pessoas, independentemente de suas capacidades. Lidwell destaca quatro características essenciais para um design acessível: perceptibilidade, operacionalidade, simplicidade e perdão.

  1. Perceptibilidade: Um design é perceptível quando todos, independentemente das capacidades sensoriais, conseguem compreendê-lo. Isso pode ser alcançado através do uso de signos, atalhos visuais e compatibilidade com tecnologias de assistência sensorial.
  2. Operacionalidade: Um design é operacional quando todas as pessoas conseguem utilizá-lo. Isso envolve minimizar ações repetitivas, facilitar o uso de controles e garantir compatibilidade com tecnologias de assistência física ou digital para diferentes necessidades, como acesso a cadeiras de rodas ou sistemas para cegos e surdos.
  3. Simplicidade: A simplicidade em um design permite que todos, independentemente de experiência, literacia ou concentração, possam percebê-lo e utilizá-lo. Isso inclui a remoção de elementos complexos desnecessários, o uso de códigos de etiqueta claros, dar destaque à informação importante e fornecer feedback claro ao usuário.
  4. Perdão: Um design perdoável minimiza a ocorrência e consequências de erros. Isso é obtido através de controles que funcionam corretamente, confirmações para reduzir erros, ações reversíveis e redes de segurança para mitigar as consequências dos erros do usuário.

Essas características destacam a importância da acessibilidade no design, não apenas para reduzir erros na utilização, mas também para minimizar problemas de adaptação para pessoas com deficiência. Um design acessível não apenas amplia o acesso, mas também melhora a experiência do usuário, promovendo a inclusão e a igualdade na utilização de produtos e serviços.

Resumo capitulo 5 63 a 76

Ao fazer modelagem de uma sistema, será necessária não identificar somente os itens que formam o vocabulário do sistema, mas também modelar como esses itens relacionam-se

Na modelagem orientada a objetos existem 3 tipos de relacionamentos especialmente importantes: 1 dependências-que representa relacionamentos de utilização entre as classes(incluído relacionamento de relacionamento rastreamento e vinculo); 2-generalizacao que relacionam classes generalizadas e sua especializações e 3-associações que representam relacionamento especiais entre objetos .

Resumo

Página 1 – 40

Introdução :

“Design de Interação: Além da Interação Humano-Computador”, escrito por Dan Norman e Donald A. Norman, é uma obra abragente que explora os príncipios e práticas fundamentias do design de interação. O livro aprofunda o mundo complexo das relações entre seres humanos e computadores, fornecendo insights valiosos para profissionais e estudantes nesta área.

Os autores destacam a importância do design centrado no utilizador, realçando a necessidade de compreender as necessidades e expectativas dos utilizadores ao criar interfaces. Ao longo das páginas iniciais, são abordadas teorias psicológicas relevantes à interação Humano-Computador, oferencendo uma base sólida para o entendimento dos fatores que influenciam a usabilidade.

Além disso, o livro explora métodos iterativos de design, reconhecendo a importância do processo contínuo de revisão e aprimoramento. Os autores orientam os leitores na criação de interfaces intuitivas, eficazes e agradáveis, destacando a necessidade de considerar a experiência do utilizador em cada etapa do desenvolvimento.

A avaliação de interfaces também é discutida, apresentando ferramentas e técnicas para medir a eficácia e a usabilidade de um design. O livro oferece estudos de caso e exemplos práticos para ilustrar conceitos teóricos, tornando o material acessível e aplicável.

Em resumo, “Design de Interação” é uma leitura essencial para quem procura aprofundar os seus conhecimentos na criação de interfaces de qualidade. Os autores proporcionam uma visão abragente, reforçada por insights práticos, tornando o livro valioso tanto para estudantes como profisisonais que desejem aprimorar as suas habilidades no campo da interação humano-computador.

Design de Interação e Design Universal :

Design de interação define-se como sendo o processo de projetar produtos interativos que facilitam a comunicação e interação diárias das pessoas, tanto em casa como no trabalho. O objetivo principal do design de interação é desenvolver produtos utilizáveis, ou seja, fáceis de aprender, eficazes e que proporcionem uma experiência agradável ao utilizador. Este segmento de design aborda a interação entre o ser humano e diversos tipos de artefatos, sejam dispositivos digitais ou analógicos, como televisões, calculadoras, websites, aplicações, entre outros. Muitos desses dispositivos são híbridos, combinando interfaces físicas e digitais em um único produto, onde a eficácia frequentemente depende da integração bem-sucessida entre esses elementos.

Arquitetura de Computadores a visão do software

Capítulo 1 paginas 1.2 ate 1.7

O aluno que chega a cursar a disciplina alvo deste livro, costuma apresentar um certo grau de conhecimento sobre programação em alto nível (C, C++, JAVA e/ou outras), ou está exatamente recebendo estas informações. O objetivo deste capítulo é mostrar o que está por trás deste mundo, o que faz com que o programa que foi desenvolvido seja executado em um computador, os papeis do Compilador, do Montador, do Carregador e do Sistema Operacional, SO. Inicialmente gostaríamos de tratar das múltiplas visões de um computador, ou seja, como nós enxergamos esta máquina que revolucionou nossas vidas. Fico me perguntando como podemos apreciar um Da Vinci de forma tão eclética. Seu mais famoso trabalho, a Mona Lisa, apresenta uma enorme variedade de interpretações. De fronte à galeria do Louvre que guarda a obra, muitos curiosos enxergam aquela mulher com um ar enigmático como uma obra prima, mas não compreendem a genialidade que existe por trás da tela. Assimetrias ao fundo, técnicas de sfumato e a identidade da egéria são apenas vistos por olhos mais curiosos e treinados. Mas voltemos às nossas máquinas computacionais. Uma criança (e não somente ela) entende um computador como um grande repositório de jogos onde ela pode se divertir. Um usuário compreende um computador como uma ferramenta que lhe ajuda a digitar textos e encontrar informações na Internet. Um analista de sistema vê o que outros não enxergam: o computador como o local onde se materializam seus devaneios (ou dos outros) e de onde ele tira o seu sustento. O convite neste livro é para irmos além. Abrirmos a máquina ainda é pouco. Vamos precisar radiografá-la, adentrar suas entranhas e descobrir um mundo onde tudo é minúsculo. O que fazer com isto? Por que uma abstração tão detalhada para um aluno de um curso com ênfase em software? Iremos perceber ao longo deste livro que o usuário de nossos projetos deseja, antes de tudo, um desempenho razoável da aplicação. Imagine chamar (iniciar) um processador de textos e esperar meia hora para que ele esteja pronto para uso! Buscar um arquivo e ter de esperar minutos para que ele esteja disponível. Isto está fora de nossa realidade atual. E o que faz com que nossos softwares sejam eficientes? É uma combinação de técnicas de software e de hardware. Usar estruturas de dados adequadas é tão importante como explorar bem o sistema de memórias. Além disto, algumas classes de software exigem um conhecimento profundo da arquitetura do sistema onde eles serão executados. Trata-se dos softwares básicos (System Software). Nesta classe de softwares estão incluídos montadores, ligadores, carregadores, compiladores e sistemas operacionais. Em breve apresentaremos uma visão geral de cada um deles. Voltando às nossas abstrações, vamos apresentar como hardware e software podem ser enxergados em camadas. Desta forma definiremos exatamente o escopo deste livro, sobre que camadas há informações no texto. Vamos começar com o Hardware. A Figura 1.1 mostra as principais camadas de abstração sobre as quais um projetista de hardware pode trabalhar. Na camada de DISPOSITIVOS, são estudados os materiais semi-condutores e suas dopagens com outros elementos para produzir um transistor, elemento básico de funcionamento de um processador. Na camada de CIRCUITO, os transistores são agrupados para formar um circuito. Na camada de PORTAS, uma operação lógica é materializada em um circuito particular. Na camada de MÓDULO, diversas portas são agrupadas para formar um módulo computacional. Finalmente, na camada de SISTEMA os módulos são interligados de tal forma a produzir um sistema, por exemplo, um processador. Para ajudar no processo de construção de um sistema eletrônico existem diversas ferramentas para auxílio a projetos, inclusive ferramentas que permitem a descrição no nível de sistema e que geram automaticamente os outros níveis da abstração. A propósito este processo de gerar níveis mais baixos de abstração do sistema é chamado de síntese. Neste livro abordaremos as camadas de SISTEMA e MÓDULO, com eventuais usos de portas lógicas, para construir um processador simples. De fato, com milhões de transistores presentes em um único chip, em nossos tempos, é uma tarefa árdua, para não dizer impossível, projetar um sistema apenas pensando nos transistores, ou mesmo portas.Os softwares estão organizados, em relação ao hardware, quanto a sua proximidade da máquina. Um hardware é controlado pelo Sistema Operacional – que presta serviços às aplicações. Quando um programa de usuário requer alguma informação do hardware, ele a solicita ao Sistema Operacional e aguarda até que o SO possa trazê-la. A Figura 1.2 mostra as camadas de software que compõem um sistema computacional. De fato, esta organização em camadas reflete como diversas classes de softwares agem com relação ao hardware. Um exemplo real é um programa processador de texto. Quando pressionamos alguma tecla no teclado, estamos de fato usando um módulo do hardware que avisa ao sistema operacional que o usuário digitou uma tecla. O SO, por sua vez, informa ao processador de texto que o usuário digitou um caractere. O processador de texto recebe este caractere e pede ao SO para mostrá-lo na tela. O SO envia para o monitor (hardware) o código do caractere a ser mostrado e o monitor o faz. Isto tudo ocorre de forma tão rápida que o usuário tem a sensação de que sua digitação provocou a imediata aparição do caractere na tela. Um software nada mais é que um conjunto de instruções, logicamente organizado, de tal forma que o hardware possa interpretar e seguir os comandos. O hardware, por sua vez, é uma máquina que faz exatamente o que está escrito em um software. Acontece que o hardware usa uma forma de representação de dados diferente do nosso alfabeto convencional. Um hardware tem um alfabeto muito simples, com apenas duas letras: 0 e 1. Assim como podemos escrever qualquer palavra combinando o nosso alfabeto de 23 ou 26 letras, o hardware também pode atribuir significado à combinações de zeros e uns. Cada letra do alfabeto eletrônico é conhecida como Dígito Binário, bit. Os bits, em termos de circuitos elétricos, são tensões diferentes com padrões predeterminados. Por exemplo, o bit 0 pode ser associado a 0 volts enquanto o bit 1 pode ser associado a 5 volts. Os comandos inteligíveis para uma máquina são palavras formadas por bits. Existem máquinas que aceitam palavras de tamanhos variados, enquanto outras, mais simples, só admitem um único tamanho de palavras. Agora, imaginemos a tarefa simples de criar um conjunto de palavras binárias de 32bits que formem um programa. Todos os bits têm significados e devem ser observados. O programa poderia ser algo como: 00100010001100111111111111111111 00100010010101000000000000000100 01110010001100010000000000000010