text:
<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[NativeScript Brasil]]></title><description><![CDATA[Comunidade brasileira sobre NativeScript]]></description><link>https://nativescriptbrasil.github.io</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Jul 2017 18:01:48 GMT</lastBuildDate><atom:link href="https://nativescriptbrasil.github.io/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[O que é NativeScript e a comparação com Xamarin, Ionic e React]]></title><description><![CDATA[

Video introdutório sobre NativeScript e as principais diferenças entre Xamarin, Ionic e React.

]]></description><link>https://nativescriptbrasil.github.io/2017/07/14/O-que-e-Native-Script-e-a-comparacao-com-Xamarin-Ionic-e-React.html</link><guid isPermaLink="true">https://nativescriptbrasil.github.io/2017/07/14/O-que-e-Native-Script-e-a-comparacao-com-Xamarin-Ionic-e-React.html</guid><dc:creator><![CDATA[Douglas Franco]]></dc:creator><pubDate>Fri, 14 Jul 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA[Quão facil é criar um plugin para NativeScript]]></title><description><![CDATA[

É notório a crescente quantidade de plugins disponíveis para NativeScript desenvolvidos pela comunidade, e o motivo disso não é apenas a boa vontade e senso de contribuição por parte de quem desenvolve, e sim, inclusive, a facilidade que é desenvolver um plugin para NativeScript, principalmente depois da versão 3.0.

Neste artigo, irei demonstrar como desenvolvi o NativeScript Emoji, meu primeiro  UI Plugin para NativeScript. Ao termino da leitura deste artigo, espero despertar em você o interesse em desenvolver também um plugin e contribuir para a comunidade de desenvolvedores NativeScript, quem ganha com isso somos nós mesmos.

Por onde começar?

Não vou entrar em detalhes sobre toda a estrutura necessaria para desenvolver um plugin para NativeScript pois isso não vai ser necessário para este artigo. Vou demonstrar o basico que você precisa saber para começar, mas caso prefira, a documentação completa você pode acessar clicando aqui.

A maneira mais facil de começar um plugin para NativeScript, é utilizando o  NativeScript Plugin Seed, criado por NathanWalker. Esta biblioteca fará todo o trabalho árduo de criação da estrutura de um plugin NativeScript, e isso é realmente incrível. Veja como é facil:

git clone https://github.com/NathanWalker/nativescript-plugin-seed.git myplugin

cd myplugin

npm run postclone

npm run setup

Pronto, com apenas estas etapas você terá criado toda estrutura necessária para desenvolver, testar e publicar seu plugin, mas antes de por a mão na massa, vamos fazer uma breve introdução sobre o plugin que vamos desenvolver juntos neste artigo.

O plugin NativeScript Emoji

O objetivo deste plugin é entregar um elemento para a interface para exibir Emojis de forma amigavel. A minha ideia inicial era ter um elemento TextView onde ao definir o valor unicode ou hexadecimal do emoji na propriedade correspondente:

<Emoji:Emoji icon="128514"> exibir :😂

O plugin faria a conversão para Emoji, e aqui eu deixo um destaque novamente para a comunidade NativeScript no Slack (se você ainda não participa, faça sua inscrição agora clicando aqui), que me fizeram uma excelente sugestão de substituir a propriedade unicode por um valor amigavel e mais facil de lembrar, ficando então:

<Emoji:Emoji name="joy"> exibir :😂

Implementação para Android e iOS

Agora que já temos a definição do plugin e a estrutura criada, é hora de por a mão na massa. A primeira coisa que precisamos fazer é definir a implementação comum entre as plataformas, sabemos que iremos ter uma propriedade name que servirá tanto para Android como para iOS, esta definição é feita no arquivo common que foi gerado na primeira etapa deste artigo.

emoji.common.ts

import { View, Property } from "ui/core/view";

export class EmojiCommon extends View {
  name: string;
}

export const nameProperty = new Property<EmojiCommon, string>(
  {
    name: "name",
    defaultValue: ""
  });
nameProperty.register(EmojiCommon);

Como se trata de um plugin para interface, precisamos extender a classe View. Os atributos do elemento que iremos criar, definimos criando um novo objeto do tipo Property, a propriedade name definimos o nome do atributo e o valor padrão, como o próprio nome sugere, definimos na propriedade defaultValue. Se o valor deste atributo fosse diferente do tipo string, que não é o nosso caso, seria necessário definir o valor para a propriedade valueConverter.

A codificação dos emojis são distintas para cada plataforma, por tanto precisamos ter uma base de dados para armazenar esses valores para consultarmos durante a execução do plugin.

emoji.database.ts

export class EmojiDatabase {
    public static list(): Array<any> {
      return [
    {
        "name": "FACE WITH TEARS OF JOY",
        "unicode": "😂",
        "hexcode": "1F602",
        "codepoint": [
            128514
        ],
        "shortname": "joy"
    }];
}

Implementação para Android

Agora que ja temos os atributos do elemento que iremos criar, precisamos implementar o codigo responsável por gerar o elemento correspondente a cada plataforma. O NativeScript interpretará em tempo de execução o codigo específico para Android atravéz do seguinte arquivo.

emoji.android.ts

import { nameProperty, EmojiCommon } from "./emoji.common";
import { EmojiDatabase } from "./emoji.database";
import * as utils from "tns-core-modules/utils/utils";
declare var java: any;

global.moduleMerge(EmojiCommon, exports);

export class Emoji extends EmojiCommon {
  [nameProperty.getDefault](): string {
    return '';
  }
  [nameProperty.setNative](value: string) {
    let emoji = EmojiDatabase.list().find((el) => el.shortname === value).codepoint[0];
    this.nativeView.setText(new java.lang.String(java.lang.Character.toChars(emoji)));
  }

  private _android: android.widget.TextView;

  get android() {
    return this.nativeView;
  }

  public createNativeView() {
    this._android = new android.widget.TextView(utils.ad.getApplicationContext());
    return this._android;
  }
}

O primeiro passo é extender a classe common criada anteriormente. Por se tratar de um plugin para interface, é necessário implementarmos o método createNativeView, que fará com que o o NativeScript entenda que algum elemento tem de ser criado na View. No nosso caso criaremos um TextView.

E novamente aqui temos outra grande ajuda do framework, a equipe do NativeScript mapeou todas as propriedades e métodos nativos de cada plataforma e gerou as definições em TypeScript, o que nos da a possibilidade de navegar por todas estas definições nativas diretamente no editor.

Temos que definir também o que o plugin fará quando receber o atributo name, isso é definido implementando o método setNative, que no nosso caso irá consultar o nome do emoji na base de dados, e com base no codigo correspondente, definira o valor para o TextView criado anteriormente. O metodo getDefault é para casos em que nenhum valor seja definido.

Implementação para iOS

Podemos copiar a mesma implementação feita para o Android, e alterar somente as partes onde é criado e definido o valor para o elemento nativo, que no caso do iOS será  o UILabel ficando da seguinte maneira.

emoji.ios.ts

import { nameProperty, EmojiCommon } from "./emoji.common";
import { EmojiDatabase } from "./emoji.database";

global.moduleMerge(EmojiCommon, exports);

export class Emoji extends EmojiCommon {
  [nameProperty.getDefault](): number {
    return 0;
  }
  [nameProperty.setNative](value: string) {
    let emoji = EmojiDatabase.list().find((el) => el.shortname === value).unicode;
    let nsString = NSString.stringWithString(emoji);
    this.nativeView.text = nsString;
  }

  private _ios: UILabel;

  get ios() {
    return this.nativeView;
  }

  public createNativeView() {
    this._ios = UILabel.alloc().init();
    return this._ios;
  }
}

Novamente aqui será possivel acessar a definição dos metodos nativos para iOS, no metodo createNativeView é criado um UILabel e no método setNative é definido o valor para o elemento criado.

Testando o plugin

Sim, terminamos a implementação do plugin e o que resta agora é apenas testarmos. Rapido não? Para testarmos precisamos adicionar o plugin ao projeto demo criado nas etapas iniciais deste artigo. Para isso, é necessário executar o comando:

npm run preparedemo

Adicionar a referencia do elemento no elemento Page do arquivo main-page.xml

xmlns:Emoji="nativescript-emoji"

e então adicionar o elemento no dentro do StackLayout

<Emoji:Emoji name="joy" />

Ficando da seguinte maneira.

main-page.xml

<Page xmlns="http://schemas.nativescript.org/tns.xsd" xmlns:Emoji="nativescript-emoji" navigatingTo="navigatingTo" class="page">

    <Page.actionBar>
        <ActionBar title="NativeScript Emoji" icon="" class="action-bar">
        </ActionBar>
    </Page.actionBar>
    <StackLayout orientation="horizontal">
        <Label text="I'm happy "> </Label>
        <Emoji:Emoji name="joy" />
        <Emoji:Emoji name="joy" />
        <Emoji:Emoji name="joy" />
    </StackLayout>
</Page>

Agora resta executar o projeto de demonstração nos emuladores de cada plataforma executando os seguintes comandos.

nmm run demo.ios
npm run demo.android

Conclusão

Podemos ver como é facil e rapido desenvolver um plugin para NativeScript, destaco alguns pontos como a comunidade de desenvolvedores NativeScript que são bem participativos, a equipe da Telerik que a procura entregar a cada versão ferramentas que visão tornar nosso trabalho como desenvolvedor muito mais produtivo e lanço o convite para você desenvolvedor que está lendo este artigo. Você desenvolveu algo customizado em algum projeto? Tem alguma ideia sobre alguma ferramenta que possa ser util? Contribua conosco também.

]]></description><link>https://nativescriptbrasil.github.io/2017/05/22/Quao-Facil-e-criar-um-plugin-para-Native-Script.html</link><guid isPermaLink="true">https://nativescriptbrasil.github.io/2017/05/22/Quao-Facil-e-criar-um-plugin-para-Native-Script.html</guid><category><![CDATA[NativeScript]]></category><category><![CDATA[ plugin]]></category><dc:creator><![CDATA[Douglas Franco]]></dc:creator><pubDate>Mon, 22 May 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA[Navegação com TabView]]></title><description><![CDATA[

Hoje vou mostrar um pouco como fazer uma navegação usando TabView.
TabView é aquela navegação por abas que no iOS, por padrão, fica na parte inferior da view, enquanto no Android fica na parte superior.

Aplicativos como o Twitter, Instagram e Facebook usam esse tipo de navegação. É bastante útil quando você quer uma navegação rápida e sempre visível.

A TabView é criada usando as tags <TabView></TabView>. Dentro dela vão os itens, ou seja, as abas.
Veja nesse exemplo como é simples:

<TabView>
    <StackLayout *tabItem="{title: 'Aba A', iconSource: '~/icone_a.png'}">
        <Label text="Conteúdo Aba A" color="green"></Label>
    </StackLayout>
    <StackLayout *tabItem="{title: 'Aba B', iconSource: '~/icone_b.png'}">
        <Label text="Conteúdo Aba B" color="green"></Label>
    </StackLayout>
</TabView>

O StackLayout foi só um exemplo, no lugar você pode usar qualquer um dos tipos de layouts do NativeScript. O importante é ele ter o atributo que fala que aquele conteúdo é um item do TabView, o tabItem. Esse atributo recebe como valor um objeto, sendo que ele pode ter um título (title) e uma imagem (iconSource) como propriedades.
A imagem referente ao iconSource só é exibida no iOS, no Android só o texto fica visível.

Como podem ter percebido, a aba que vem selecionada por padrão, é sempre a primeira, o que não impede você mudar esse comportamento. Para fazer isso, é só usar o atributo selectedIndex, na tag <TabView>, especificando o index da aba que você quer que venha selecionada. Vale lembrar que o index começa no zero.

<TabView selectedIndex="1">
  ...
</TabView>

E se você quiser mudar a cor de seleção da aba? Não é nada complicado, usando o atributo selectedColor você consegue fazer isso.

<TabView selectedIndex="1" selectedColor="#00FF00">
  ...
</TabView>

Você pode querer executar uma ação quando o usuário seleciona uma das abas. Isso é feito usando o evento selectedIndexChanged, também na <TabView>.

<TabView selectedIndex="1" selectedColor="#00FF00" (selectedIndexChanged)="alterarAba($event)">
  ...
</TabView>

E no .ts:

public alterarAba(e: any) {
    console.log(e);
}

Para páginas (abas) com pouco conteúdo, esse código simples pode ser facilmente usado. O problema é quando o conteúdo das páginas começam a ficar grades, a ter listas, formulários etc. Nesses casos, usar o TabView desse jeito vai deixar o seu código muito difícil de dar manutenções. Vai chegar uma hora que você não vai mais entender o funcionamento das coisas.
O ideal é deixar a página com a tabView o mais simples possível e separar as páginas que vão abrir em componentes. Sabendo que no Angular você define um seletor quando cria um componente, a sua TabView poderia ficar assim:

Arquivo aba-a.component.ts

@Component({
    selector: "aba-a",
    moduleId: module.id,
    templateUrl: "./aba-a.component.html",
})
export class AbaAComponent {}

Página com a tabView

<TabView>
    <StackLayout *tabItem="{title: 'Aba A'}">
        <aba-a></aba-a>
    </StackLayout>
    <StackLayout *tabItem="{title: 'Aba B' }">
        <Label text="Conteúdo Aba B" color="green"></Label>
    </StackLayout>
</TabView>

Repare que eu posso tanto usar um conteúdo de compomente, como também posso usar o conteúdo direto na página, vai depender de como você quer organizar o seu código.
Eu acho mais organizado deixar tudo em arquivos separados, mesmo quando o conteúdo é pequeno.

Por hoje é isso. O código é simples mas bastante útil.

]]></description><link>https://nativescriptbrasil.github.io/2017/05/01/navegacao-com-tabview.html</link><guid isPermaLink="true">https://nativescriptbrasil.github.io/2017/05/01/navegacao-com-tabview.html</guid><category><![CDATA[UI]]></category><category><![CDATA[ Navegação]]></category><category><![CDATA[ Layout]]></category><dc:creator><![CDATA[Alex Hiroshi]]></dc:creator><pubDate>Mon, 01 May 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA[Imersão NativeScript #2 - Criando um novo projeto NativeScript com Angular 2]]></title><description><![CDATA[

Fala pessoal, compartilho com vocês uma video aula parte do curso NativeScript com Angular 2 que estou gravando.

O curso completo contará com aproximadamente 20 aulas, em breve trarei mais informações. Deixe seu comentario com sugestão, duvidas e temas que você gostaria que fosse discutido nas aulas.

]]></description><link>https://nativescriptbrasil.github.io/2017/04/21/criando-novo-projeto-nativescript-com-angular-2.html</link><guid isPermaLink="true">https://nativescriptbrasil.github.io/2017/04/21/criando-novo-projeto-nativescript-com-angular-2.html</guid><category><![CDATA[NativeScript]]></category><category><![CDATA[ Angular2]]></category><dc:creator><![CDATA[Douglas Franco]]></dc:creator><pubDate>Fri, 21 Apr 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA[UI Layouts no NativeScript]]></title><description><![CDATA[

Se você está começando agora a mexer com NativeScript, é bom entender o que é possível fazer na parte visual, no UI do aplicativo.

Aproveitando, não deixe de ler o primeiro artigo de Imersão NativeScript que o Douglas está escrevendo.

O NativeScript possui 6 tipos de layouts predefinidos que vai ajudar a organizar o visual do seu aplicativo. Esses layouts, na verdade, são marcações inseridas no html dos componentes de um aplicativo, e também podem ser criados usando os módulos de cada um diretamente no componente (no arquivo js ou ts).

Aqui vou mostrar exemplos de escrita no HTML, que é mais comum.

StackLayout

Talvez esse seja o que layout que será mais usado. Ele faz o básico, que é colocar em pilha (stack) os elementos na view, ou seja, se você precisa mostrar elementos um embaixo do outro, como campos de formulário, esse é o layout que deverá ser utilizado.

Para quem vem do HTML e CSS, podemos dizer que é como deixar todos os elementos dentro do container com um display:block.
É possível usar um atributo orientation para organizar os elementos na horizontal. Basta atribuir o valor do atributo para horizontal.
Um exemplo:

<StackLayout>
    <Label text="Nome" />
    <TextField hint="Digite o nome" />
    <Label text="E-mail" />
    <TextField hint="Digite o e-mail" />
</StackLayout>

GridLayout

Define áreas em colunas e linhas, ou seja, na tag GridLayout você define columns e rows em que os elementos internos irão se posicionar. Em cada elemento, é adicionado um atributo col e/ou row para deixar o elemento no lugar certo.

<GridLayout columns="60, auto" rows="auto, *" >
    <Label text="Coluna 0 - Linha 0" col="0" />
    <Label text="Coluna 1 - Linha 0" col="1" />
    <Label text="Coluna 0 - Linha 1" col="0" row="1" />
    <Label text="Coluna 1 - Linha 1" col="1" row="1" />
</GridLayout>

WrapLayout

Esse layout posiciona os elementos internos em colunas ou linhas, dependendo da definição da propriedade orientation, que pode ser vertical ou horizontal, por padrão o valor é horizontal.

O WrapLayout lembra um pouco o StackLayout, posicionando elementos na horizontal ou vertical. A diferença é que o StackLayout não faz quebras de linhas ou colunas. O WrapLayout, quando tem a propriedade orientation como horizontal, quebra a linha quando o elemento não cabe mais na tela. Se a propriedade estiver com o valor vertical, ele cria colunas quando o elemento chega no final da tela.

<WrapLayout orientation="vertical">
    <Label text="Elemento 1" />
    <Label text="Elemento 2" />
    <Label text="Elemento 3" />
    <Label text="Elemento 4" />
    <Label text="Elemento 5" />
    <Label text="Elemento 6" />
    <Label text="Elemento 7" />
    <Label text="Elemento 8" />
    <Label text="Elemento 9" />
</WrapLayout>

DockLayout

Esse layout posiciona os elementos internos nas bordas do DockLayout. Para isso, cada elemento recebe um atributo dock, que pode ter os valores top, right, bottom e left. Você pode adicionar um elemento sem o atributo dock e ele ficará posicionado no espaço que sobrar no meio do layout.

Caso queira que o último elemento ocupe todo o espaço restante, existe a propriedade stretchLastChild para a tag DockLayout. Essa propriedade recebe um valor true/false. Se true, ele vai pegar o último elemento e esticar até ocupar o espaço vazio.

<DockLayout stretchLastChild="true">
    <Button dock="left" text="1" style="background-color: red; margin: 5;" />
    <Button dock="top" text="2" style="background-color: green; margin: 5;" />
    <Button dock="right" text="3" style="background-color: blue; margin: 5;" />
    <Button dock="bottom" text="4" style="background-color: yellow; margin: 5;" />
    <Button text="ocupa espaço" style="background-color: black; margin: 5;" />
</DockLayout>

AbsoluteLayout

Fazendo uma analogia com o CSS, é como fosse usado o position:absolute nos elementos internos. Bem simples, cada elemento interno recebe os atributos left e top.

<AbsoluteLayout>
    <Label text="Posição 0 left e 70 top" left="0" top="70" />
    <Label text="Posição 10 left e 100 top" left="10" top="100" />
</AbsoluteLayout>

FlexboxLayout

O layout FlexboxLayout merece um post para falar sobre ele. Basicamente, ele funciona como o CSS flexbox. A documentação no NativeScript deixar até como referência esse link, porque eles traduzem as propriedades do CSS para propriedades que funcionam em um código xml ou js do NativeScript.

A tag FlexboxLayout é como se fosse um div com display:flex. Então, nos elementos internos, você precisa definir os espaços, as colunas, o posicionamento, como se fosse no css.

Propriedades

Para finalizar, todas essas tags de layouts possuem algumas propriedades:

width

height

minWidth

minHeight

visibility

marginTop

marginRight

marginBottom

marginLeft

horizontalAlignment

verticalAlignment

]]></description><link>https://nativescriptbrasil.github.io/2017/03/19/ui-layouts-no-nativescript.html</link><guid isPermaLink="true">https://nativescriptbrasil.github.io/2017/03/19/ui-layouts-no-nativescript.html</guid><category><![CDATA[Layout]]></category><category><![CDATA[ UI]]></category><dc:creator><![CDATA[Alex Hiroshi]]></dc:creator><pubDate>Sun, 19 Mar 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA[Imersão NativeScript #1 - Instalando o NativeScript]]></title><description><![CDATA[

Este é o primeiro de uma série de artigos que irei lançar nas próximas semanas onde irei abordar a criação de um projeto em NativeScript com Angular 2 desde o inicio, desde a instalação, criação, melhores práticas e muito mais.

Instalando NativeScript

Windows

Se você estiver no Windows, você pode optar por utilizar o instalador oficial do NativeScript atravéz o seguinte link:
https://docs.nativescript.org/start/ns-setup-installer

O instalador irá realizar toda a configuração do ambiente necessária para desenvolvimento com Android (já que para desenvolver para iOS você precisa de um Mac). Se preferir, você pode acessar o guia avançado de instalação para Windows clicando aqui.

Mac

Instale o Node:

brew install node

Instale o NativeScript:

npm install -g nativescript

Configurar o Android e iOS SDK

Agora precisamos configurar o ambiente para desenvolver para Android e iOS. Existe um script oficial da Telerik onde é realizada a instalação completa executando o seguinte comando:

ruby -e "$(curl -fsSL https://www.nativescript.org/setup/mac)"

O processo de instalação pode demorar alguns minutos, seja paciente. Se preferir, você pode consultar o manual de instalação completo para macOS clicando aqui.

Linux

Instale o node:

sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 libstdc++6:i386

se o comando anterior estourar o erro Unable to locate package lib32bz2-1.0, então use este comando:

sudo apt-get install lib32z1 lib32ncurses5 libbz2-1.0:i386 libstdc++6:i386

Instale o G++ compiler:

sudo apt-get install g++

Instale o JDK 8:

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

Configure o JAVA:

sudo update-alternatives --config java

Configure a variavel de ambiente JAVA_HOME

export JAVA_HOME=$(update-alternatives --query javac | sed -n -e 's/Best: *\(.*\)\/bin\/javac/\1/p')

Instale o Android SDK
Acesse o link abaixo, navegue até a seção de downloads para linux e realize o download:
https://developer.android.com/sdk/index.html#Other

Configure a variavel de ambiente ANDROID_HOME
Após a instalação do Android SDK, execute o comando:

export ANDROID_HOME=Path to Android installation directory

Instale os pacotes necessarios para o ambiente de desenvolvimento Android:

sudo $ANDROID_HOME/tools/android update sdk --filter tools,platform-tools,android-23,build-tools-23.0.3,extra-android-m2repository,extra-google-m2repository,extra-android-support --all --no-ui

Instale o CLI do NativeScript

sudo npm install nativescript -g --unsafe-perm

Verificando o status da Instalação

Após a instalação do NativeScript, você terá acesso ao CLI (command line interface). Confira se tudo esta certo executando o seguinte comando:

tns doctor

o resultado deverá ser o seguinte:

λ tns doctor

┌──────────────┬─────────────────┬────────────────┬──────────────────┐
│ Component    │ Current version │ Latest version │ Information      │
│ nativescript │ 2.5.1           │ 2.5.2          │ Update available │
└──────────────┴─────────────────┴────────────────┴──────────────────┘

Próximos passos

Agora que você tem um ambiente configurado, você está apto a desenvolver em NativeScript utilizando JavaScript, TypeScript ou Angular 2.
Na próximo artigo irei iniciar um projeto do zero em Angular 2 e iremos abordar diversos temas sobre o NativeScript.

]]></description><link>https://nativescriptbrasil.github.io/2017/03/14/instalando-nativescript.html</link><guid isPermaLink="true">https://nativescriptbrasil.github.io/2017/03/14/instalando-nativescript.html</guid><category><![CDATA[Curso]]></category><category><![CDATA[ NativeScript]]></category><dc:creator><![CDATA[Douglas Franco]]></dc:creator><pubDate>Tue, 14 Mar 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA[10 motivos para optar por NativeScript]]></title><description><![CDATA[

Apesar de novo, o framework vem demonstrando sua força a cada atualização. Nesse artigo demonstro algumas motivos de porque escolhe-lo.

1: Open Source

Não poderia começar por outro ponto que não este. O NativeScript é totalmente open source, o repositório do projeto pode ser acessado atravéz o link https://github.com/NativeScript. O projeto possui uma comunidade muito ativa, por diversas vezes que precisei abrir uma issue, em poucas horas obtive respostas de membros da propria equipe do projeto, bem como demais usuários.

2: Mantido pela Telerik

Esse foi um dos motivos que me levou a escolher o NativeScript quando estava estudando sobre frameworks para desenvolvimento de aplicativos móveis: Ser mantido pela Telerik. Telerik é uma empresa búlgara criada em 2002 e se destaca por desenvolver ferramentas poderosas para desenvolvedores, como Fiddler, Telerik Reporting, JustCode, Kendo UI, entre outros. Ferramentas estas que não são acessíveis para todos, pois possuem licenças caríssimas, entretanto para o NativeScript, eles adotaram uma maneira de monetizar o negócio diferente, a exemplo do que vem fazendo a Microsoft com seus produtos, a Telerik oferece o NativeScript totalmente gratuito, e caso você desejar, pode contar com um suporte técnico da empresa e ferramentas exclusivas como o NativeScript-UI (componentes extras para interfaces) adquirindo uma licença premium.

3: Web Skills: JavaScript e CSS

Ao iniciar um projeto em NativeScript você tem a opção de escolher 3 arquiteturas para o projeto: JavaScript, TypeScript ou Angular2. Além disso, você poderá contar com o CSS para a interface. Não são todas as propriedades do CSS que temos ao desenvolver para web, até por que não temos DOM para manipular já que são elementos puramente nativos, você pode acessar a lista completa clicando aqui. De modo geral, você irá reaproveitar todo seu conhecimento em desenvolvimento para web, ao desenvolver com NativeScript.

4: Multi-plataforma

Um dos slogans do NativeScript é "write once, run everywhere" (escreva uma vez, rode em qualquer lugar). Com o NativeScript você terá um unico projeto escrito em JavaScript servindo diferentes plataformas (Android e iOS).

5: Componentes nativos

As interfaces do NativeScript são escritas em XML, não temos HTML, não há DOM, o NativeScript entrega para você componentes realmente nativos, por conta disso o ganho em performance é elevado em comparação a outros frameworks

6: Sem compilação

O NativeScript não compila nenhum código. O código que você escreve em JavaScript é entregue integralmente no dispositivo. O NativeScript lhe da acesso integral a VM JavaScript do dispositivo (V8 no android e JavaScriptCore no iOS). Por conta disso, desenvolver em NativeScript se torna muito mais atrativo, pois você tem um ambiente mais fluido, sem pausas para recompilar, e também graças ao livesync que você pode utilizar enquanto está desenvolvendo, onde o aplicativo é atualizado automaticamente a cada mudança no código. Falarei mais sobre esse assunto em outra oportunidade.

7: Vasta opções de pacotes

Você poderá utilizar a maioria dos pacotes NPM que você ja utiliza para desenvolver para web, também no NativeScript (desde que este não dependa de DOM). No momento em que escrevo esse artigo existem cerca de 466 pacotes exclusivos para NativeScript no repositório NPM. E não é só isso, caso você
deseje, poderá utilizar também pacotes dos repositórios cocoapods e gradle, e reaproveitar pacotes nativos de cada plataforma, também no NativeScript. Isso é muito útil para quem ja desenvolve apps em JAVA ou Object-C e já tenha experiência com alguns pacotes em cada plataforma.

8: Depuração de Código

O NativeScript possui extensões para o Visual Studio Code, Web Storm para debugar o código durante o desenvolvimento. E na ultima atualização (versão 2.5.0) foi entregue suporte para utilizar o Chrome Developer Tools para debugar também. Isso tornará o ambiente de desenvolvimento mais produtivo.

9: 100% de acesso as API’s nativas

Esse sem sombra de dúvidas é o que faz com que o NativeScript se destaque perante os concorrentes. Tanto no ReactNative como no Xamarin por exemplo, você tem acesso limitado as API’s nativas, o que esses frameworks fazem é encapsular a API nativa, uma por uma, e te entregar o acesso atravéz o código o framework, como um atalho. No NativeScript isso não ocorre, você tem acesso integral a API do dispositivo, como uma ponte direta a engine. Você não precisa escrever JAVA ou Object-C, você tem acesso integral atravéz JavaScript. Outro ponto positivo em ter acesso direto a API do dispositivo, é em questão de atualizações. Se o Android lançar uma SDK nova por exemplo, você poderá utilizar sem maiores dificuldades, bastanto apenas atualizar sua suite de desenvolvimento, no caso do Xamarin ou ReactNative, você teria que esperar sair uma atualização do framework.

10: Atualizações frequentes, muita novidade

Se você acompanhar o projeto no github verá que a equipe de desenvolvimento não para. É atualização atraz de atualização, a versão 2.5.0 mal foi entregue, recheada de recursos novos e melhorias, e a Telerik já soltou notícias de um major update para 3.0.

Destaques da última versão

Suporte para o Chrome Developer Tools

Melhorias no CLI

Atualização na extensão para Visual Studio Code

Novos componentes no NativeScript UI

Suporte ao Webpack Module Bundler

O que vem por ai

Muito rumor ainda paira sobre a versão 3.0, mas a equipe Telerik já deu algumas dicas de que vem coisa grande por ai. Estão reestruturando a arquitetura do NativeScript para torna-lo ainda mais rapido, em alguns testes resultaram em um ganho de performance de até 400%, e não é só isso, estão ampliando o acesso as funcionalidades do Chrome Dev Tools, melhorias no minificador WebPack e um instalador novo para quem não se sentir confortavel em usar linha de comando.

Conclusão

O objetivo desse artigo foi fazer um panorama sobre o NativeScript e seus benefícios. A curva de aprendizado é baixíssima, visto que você reaproveitará grande parte do seu conhecimento em desenvolvimento para Web.
Nas próximas semanas irei lançar conteúdos sobre o NativeScript e espero que possamos juntos enriquecer esse portal com material de qualidade para todos os níveis.

]]></description><link>https://nativescriptbrasil.github.io/2017/03/11/Por-que-escolher-Native-Script.html</link><guid isPermaLink="true">https://nativescriptbrasil.github.io/2017/03/11/Por-que-escolher-Native-Script.html</guid><category><![CDATA[Blog]]></category><dc:creator><![CDATA[Douglas Franco]]></dc:creator><pubDate>Sat, 11 Mar 2017 00:00:00 GMT</pubDate></item><item><title><![CDATA[NativeScript Brasil]]></title><description><![CDATA[

Comunidade brasileira sobre NativeScript.

Grupo criado com o intuito de reunir artigos, materiais e projetos sobre NativeScript para a comunicade de desenvolvedores brasileiros.

Em breve novidades, acompanhe-nos nas redes sociais:

Facebook

Youtube

Github

]]></description><link>https://nativescriptbrasil.github.io/2017/03/10/Native-Script-Brasil.html</link><guid isPermaLink="true">https://nativescriptbrasil.github.io/2017/03/10/Native-Script-Brasil.html</guid><category><![CDATA[NativeScript]]></category><category><![CDATA[ Blog]]></category><category><![CDATA[ Novidades]]></category><dc:creator><![CDATA[Douglas Franco]]></dc:creator><pubDate>Fri, 10 Mar 2017 00:00:00 GMT</pubDate></item></channel></rss>


text:
layout: post
title: Mac 常用资源
category: 资源
tags: Mac
keywords: Mac
description:
---

### 开启关闭dashboard

关闭

    defaults write com.apple.dashboard mcx-disabled -boolean YES
    killall Dock

开启

    defaults write com.apple.dashboard mcx-disabled -boolean NO
    killall Dock

### 设置iterm中option为alt(meta)键

![option-to-meta](http://yansu-uploads.stor.sinaapp.com/original/a7604cae82872d62bdc6122da7f38037.png)

### 删除dropbox冲突文件

    find . -type f -name "* conflicted *" -exec rm -f {} \;

redpajama_set_name: RedPajamaGithub


text:
package se.toxbee.sleepfighter.challenge.rotosnake;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

import java.util.ArrayList;
import java.util.List;

import se.toxbee.sleepfighter.challenge.snake.CircleEntity;
import se.toxbee.sleepfighter.challenge.snake.Segment;
import se.toxbee.sleepfighter.utils.geom.Dimension;
import se.toxbee.sleepfighter.utils.geom.Position;

/**
 * The view class responsible for rendering a single position in the challenge.
 * Original author Mazdak, modified by Laszlo for SleepFighter.
 */
public class SnakeView extends SurfaceView implements Callback {

	private Dimension gameSize;
	private int tileSize;

	private boolean isSurfaceCreated;

	private SnakeModel snakeModel;

	// paint which should be used to clear the canvas
	private Paint clearPaint = new Paint();

	protected Paint bodyPaint = new Paint();
	protected Paint headPaint = new Paint();
	protected Paint foodPaint = new Paint();

	/**
	 * Constructs the SnakeView.
	 */
	public SnakeView(Context context, SnakeModel snakeModel) {
		this(context);

		// Set size & tile size.
		this.gameSize = SnakeConstants.getGameSize();
		this.tileSize = SnakeConstants.getTileSize();

		this.bodyPaint.setColor(SnakeConstants.getSnakeColor());
		this.headPaint.setColor(SnakeConstants.getSnakeHeadColor());
		this.foodPaint.setColor(SnakeConstants.getFoodColor());

		isSurfaceCreated = false;
		this.snakeModel = snakeModel;
		clearPaint.setARGB(255, 0, 0, 0);

		getHolder().addCallback(this);
		setFocusable(true);
	}

	private SnakeView(Context context) {
		super(context);
	}

	public void setModel(SnakeModel model) {
		this.snakeModel = model;
	}

	/**
	 * Tests if the head will be accented.
	 *
	 * @return true if the head will be accented.
	 */
	public boolean isAccentedHead() {
		return !(this.bodyPaint == this.headPaint || bodyPaint
				.equals(this.headPaint));
	}

	/**
	 * Sets the Paint used for head of snake. A null parameter value means
	 * indicates the head won't be differentiated.
	 *
	 * @param paint
	 *            The Paint used for head of snake.
	 */
	public void setHeadColor(final Paint paint) {
		this.headPaint = paint;
	}

	/**
	 * Returns the Paint used for head of snake. A null parameter value means
	 * indicates the head won't be differentiated.
	 *
	 * @return The Paint used for head of snake.
	 */
	public Paint getHeadPaint() {
		return this.headPaint;
	}

	/**
	 * Sets the Paint used for body of snake.
	 *
	 * @param paint
	 *            The Paint used for body of snake.
	 */
	public void setBodyPaint(final Paint paint) {
		this.bodyPaint = paint;
	}

	/**
	 * Returns the Paint used for body of snake.
	 *
	 * @return The Paint used for body of snake.
	 */
	public Paint getBodyPaint() {
		return this.bodyPaint;
	}

	/**
	 * Will try to render the model on the canvas provided
	 */
	public void render() {
		if (isSurfaceCreated) {
			Canvas c = null;

			c = getHolder().lockCanvas();

			synchronized (getHolder()) {

				if (c != null) {
					// clear the canvas
					c.drawRect(0, 0, c.getWidth(), c.getHeight(), clearPaint);

					float scaleX = c.getWidth() * 1f / gameSize.getWidth();
					float scaleY = c.getHeight() * 1f / gameSize.getHeight();

					if (snakeModel.hasFood()) {
						drawFood(c, scaleX, scaleY);
					}

					// draw the snake above everything
					drawSnake(c, scaleX, scaleY);

					// update the view with the updated canvas
					getHolder().unlockCanvasAndPost(c);
				}
			}
		}
	}

	private void drawFood(Canvas c, float scaleX, float scaleY) {
		Position sphereFood = snakeModel.getFoodPosition();

		CircleEntity f = new CircleEntity(sphereFood.getX(), sphereFood.getY(),
				tileSize, foodPaint);

		c.drawOval(
				new RectF(f.getX() * scaleX - f.getRadius() * scaleX, f.getY()
						* scaleY - f.getRadius() * scaleY, f.getX() * scaleX
						+ f.getRadius() * scaleX, f.getY() * scaleY
						+ f.getRadius() * scaleY), f.getPaint());
	}

	private void drawSnake(Canvas c, float scaleX, float scaleY) {
		List<Position> snakePositions = new ArrayList<Position>(
				snakeModel.getSnakePositions());

		for (Position p : snakePositions) {
			Segment s = new Segment(p.getX(), p.getY(), tileSize, bodyPaint);

			c.drawOval(new RectF((s.getX() * scaleX - s.getRadius() * scaleX),
					(s.getY() * scaleY - s.getRadius() * scaleY), (s.getX()
							* scaleX + s.getRadius() * scaleX), (s.getY()
							* scaleY + s.getRadius() * scaleY)), s.getPaint());
		}
	}

	@Override
	public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
	}

	@Override
	public void surfaceCreated(SurfaceHolder arg0) {
		this.isSurfaceCreated = true;
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder arg0) {
	}
}


text:
<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright 2015 Open Networking Laboratory
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>onos-core</artifactId>
        <groupId>org.onosproject</groupId>
        <version>1.3.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>onos-security</artifactId>
    <packaging>bundle</packaging>

    <description>Security-Mode ONOS project</description>

    <dependencies>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.compendium</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.scr.annotations</artifactId>
        </dependency>
        <dependency>
            <groupId>org.onosproject</groupId>
            <artifactId>onos-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.onosproject</groupId>
            <artifactId>onos-core-serializers</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.karaf.features</groupId>
            <artifactId>org.apache.karaf.features.core</artifactId>
        </dependency>
        <!-- Adding dependency to pull the artifact from Maven Central.
             Note: This is just needed for the onos-security feature. -->
        <dependency>
            <groupId>org.onosproject</groupId>
            <artifactId>org.apache.felix.framework.security</artifactId>
            <version>2.2.0.onos</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-scr-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>


text:
package artificialmindgames.jujitsu.core.match;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

/**
 * Encapsulates the random elements of the game; useful for testing
 *
 * @author aigames
 *
 */
public class Dealer {

	private final Random random;

	public Dealer(Random random) {
		this.random = random;
	}

	/**
	 *
	 * provides a shuffled deck of cards valued 1..highestCardValue
	 *
	 */
	public List<Integer> createShuffledDeck(int highestCardValue) {
		List<Integer> deck = new ArrayList<>(highestCardValue+1);
		for (int i = 1; i <= highestCardValue; i++) {
			deck.add(i);
		}
		Collections.shuffle(deck, random);
		return deck;
	}

	public Integer pickRandom(List<Integer> cards) {
		if (cards.isEmpty()) {
    		return null;
    	}
    	else {
    		return cards.get(random.nextInt(cards.size()));
    	}
	}

	public Integer pickRandom(Integer[] cards) {
		if (cards.length == 0) {
    		return null;
    	}
    	else {
    		return cards[random.nextInt(cards.length)];
    	}
	}
}


text:
<ion-modal-view ng-controller="AddAnnouncementCtrl as AddCtrl" class="announcement-add">

    <ion-header-bar class="bar-positive">

            <button class="button button-clear" ng-click="AddCtrl.cancel()">Cancel</button>

{{AddCtrl.title}}

            <button class="button button-clear button-header-done" ng-click="AddCtrl.add()">Add</button>

    </ion-header-bar>
    <ion-content>

        <form class="list" ng-submit="AddCtrl.add()">

Group

                {{AddCtrl.announcement.group.name }}

                <input type="text" placeholder="Name" ng-model="AddCtrl.announcement.name">

                <textarea placeholder="Description" ng-model="AddCtrl.announcement.description"></textarea>

            <ion-item class="item-divider">
                Symbol
            </ion-item>
            <ion-radio ng-repeat="(key, value) in AddCtrl.types" ng-model="AddCtrl.announcement.logo" ng-value="value.logo">
                {{value.name}}
            </ion-radio>
            <button class="button button-full button-positive" type="submit">Add</button>
        </form>
    </ion-content>
</ion-modal-view>


text:
module Hopper
  class Channel
    class Queue
      class Publisher
        def initialize(proxy, opts = {})
          @proxy = proxy
        end

        def publish(message, opts = {})
          @proxy.publish(message.payload, opts)
        end
      end
    end
  end
end


text:
struct //~ ERROR has infinite size
ListNode
{
    head: u8,
    tail: Option<ListNode>,
}

fn main() {
}


text:
// This file is automatically generated.

package adila.db;

/*
 * Beeline Tab 2
 *
 * DEVICE: Tab_2
 * MODEL: Tab_2
 */
final class tab5f2_tab5f2 {
    public static final String DATA = "Beeline|Tab 2|";
}


text:
package requestMgmt;

/**
 * Created by fahslaj on 10/15/2016.
 */
public interface IInvalidResponseHandler {
    public void handleInvalidResponse(int errorCode, String message);
}


text:
var extend = require('deap').extendShallow,
    EventEmitter = require('events').EventEmitter;

// Clientside tempistry lib
var tempistry = module.exports = extend({

    register: function(template) {

        // return scoped template fn to hook in events
        return function(data) {
            data = data || {};
            tempistry.emit('pre-render', data);

            var result = {
                html: template(data),
                data: data
            };

            // emit result object w/ html & data to provide a hook to manipulate html if desired
            tempistry.emit('post-render', result);

            return result.html;
        };
    }

}, EventEmitter.prototype);


text:
class Student:

    def __init__(self, name, hours, qpoints):
        self.name = name
        self.hours = float(hours)
        self.qpoints = float(qpoints)

    def getName(self):
        return self.name

    def getHours(self):
        return self.hours

    def getQPoints(self):
        return self.qpoints

    def gpa(self):
        return self.qpoints / self.hours

def make_student(data_row):
    # Take a row of data from the students.csv file and
    # return a new Student object
    last_name, first_name, hours, qpoints = data_row.split(',')
    name = first_name + " " + last_name
    return Student(name, hours, qpoints)

def main():
    filename = 'students.csv'
    file = open(filename, 'r')

    best_student = make_student(file.readline())

    for line in file.readlines():
        student = make_student(line)

        if student.gpa() > best_student.gpa():
            best_student = student

    file.close()

    print("The best student is: ", best_student.getName())
    print("Hours: ", best_student.getHours())
    print("GPA: ", best_student.gpa())

if __name__ == '__main__':
    main()


text:
/*jshint globalstrict:false, strict:false */
/*global assertEqual, assertNotEqual, assertTrue */

////////////////////////////////////////////////////////////////////////////////
/// @brief test the deadlock detection
///
/// @file
///
/// DISCLAIMER
///
/// Copyright 2010-2012 triagens GmbH, Cologne, Germany
///
/// Licensed under the Apache License, Version 2.0 (the "License");
/// you may not use this file except in compliance with the License.
/// You may obtain a copy of the License at
///
///     http://www.apache.org/licenses/LICENSE-2.0
///
/// Unless required by applicable law or agreed to in writing, software
/// distributed under the License is distributed on an "AS IS" BASIS,
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
/// See the License for the specific language governing permissions and
/// limitations under the License.
///
/// Copyright holder is triAGENS GmbH, Cologne, Germany
///
/// @author Jan Christoph Uhde
/// @author Copyright 2018, triAGENS GmbH, Cologne, Germany
////////////////////////////////////////////////////////////////////////////////

var jsunity = require("jsunity");

var arangodb = require("@arangodb");
var db = arangodb.db;
var tasks = require("@arangodb/tasks");

var ERRORS = arangodb.errors;

////////////////////////////////////////////////////////////////////////////////
/// @brief test suite
////////////////////////////////////////////////////////////////////////////////

function ExclusiveSuite () {
  var cn1 = "UnitTestsExclusiveCollection1"; // used for test data
  var cn2 = "UnitTestsExclusiveCollection2"; // used for communication
  var c1, c2;

  return {

////////////////////////////////////////////////////////////////////////////////
/// @brief set up
////////////////////////////////////////////////////////////////////////////////

    setUp : function () {
      db._drop(cn1);
      db._drop(cn2);
      c1 = db._create(cn1);
      c2 = db._create(cn2);
    },

////////////////////////////////////////////////////////////////////////////////
/// @brief tear down
////////////////////////////////////////////////////////////////////////////////

    tearDown : function () {
      db._drop(cn1);
      db._drop(cn2);
    },

    testExclusiveExpectConflict : function () {
      c1.insert({ "_key" : "XXX" , "name" : "initial" });
      let task = tasks.register({
        command: function() {
          let db = require("internal").db;
          db.UnitTestsExclusiveCollection2.insert({ _key: "runner1", value: false });

          while (!db.UnitTestsExclusiveCollection2.exists("runner2")) {
            require("internal").sleep(0.02);
          }

          db._executeTransaction({
            collections: { write: [ "UnitTestsExclusiveCollection1", "UnitTestsExclusiveCollection2" ], exclusive: [ ] },
            action: function () {
              let db = require("internal").db;
              for (let i = 0; i < 100000; ++i) {
                db.UnitTestsExclusiveCollection1.update("XXX", { name : "runner1" });
              }
              db.UnitTestsExclusiveCollection2.update("runner1", { value: true });
            }
          });
        }
      });

      db.UnitTestsExclusiveCollection2.insert({ _key: "runner2", value: false });
      while (!db.UnitTestsExclusiveCollection2.exists("runner1")) {
        require("internal").sleep(0.02);
      }

      try {
        db._executeTransaction({
          collections: { write: [ "UnitTestsExclusiveCollection1", "UnitTestsExclusiveCollection2" ], exclusive: [ ] },
          action: function () {
            let db = require("internal").db;
            for (let i = 0; i < 100000; ++i) {
              db.UnitTestsExclusiveCollection1.update("XXX", { name : "runner2" });
            }
            db.UnitTestsExclusiveCollection2.update("runner2", { value: true });
          }
        });
      } catch (err) {
        assertEqual(ERRORS.ERROR_ARANGO_CONFLICT.code, err.errorNum);
      }

      while (true) {
        try {
          tasks.get(task);
          require("internal").wait(0.25, false);
        } catch (err) {
          // "task not found" means the task is finished
          break;
        }
      }

      // only one transaction should have succeeded
      assertEqual(2, c2.count());
      let docs = c2.toArray().sort(function(l, r) { return l._key < r._key; });
      assertNotEqual(docs[0].value, docs[1].value);
    },

    testExclusiveExpectNoConflict : function () {
      assertEqual(0, c2.count());
      c1.insert({ "_key" : "XXX" , "name" : "initial" });
      let task = tasks.register({
        command: function() {
          let db = require("internal").db;
          db.UnitTestsExclusiveCollection2.insert({ _key: "runner1", value: false });
          while (!db.UnitTestsExclusiveCollection2.exists("runner2")) {
            require("internal").sleep(0.02);
          }

          db._executeTransaction({
            collections: { exclusive: [ "UnitTestsExclusiveCollection1", "UnitTestsExclusiveCollection2" ] },
            action: function () {
              let db = require("internal").db;
              for (let i = 0; i < 100000; ++i) {
                db.UnitTestsExclusiveCollection1.update("XXX", { name : "runner1" });
              }
              db.UnitTestsExclusiveCollection2.update("runner1", { value: true });
            }
          });
        }
      });

      db.UnitTestsExclusiveCollection2.insert({ _key: "runner2", value: false });
      while (!db.UnitTestsExclusiveCollection2.exists("runner1")) {
        require("internal").sleep(0.02);
      }

      db._executeTransaction({
        collections: { exclusive: [ "UnitTestsExclusiveCollection1", "UnitTestsExclusiveCollection2" ] },
        action: function () {
          let db = require("internal").db;
          for (let i = 0; i < 100000; ++i) {
            db.UnitTestsExclusiveCollection1.update("XXX", { name : "runner2" });
          }
          db.UnitTestsExclusiveCollection2.update("runner2", { value: true });
        }
      });

      while (true) {
        try {
          tasks.get(task);
          require("internal").wait(0.25, false);
        } catch (err) {
          // "task not found" means the task is finished
          break;
        }
      }

      // both transactions should have succeeded
      assertEqual(2, c2.count());
      let docs = c2.toArray().sort(function(l, r) { return l._key < r._key; });
      assertTrue(docs[0].value);
      assertTrue(docs[1].value);
    },

    testExclusiveExpectConflictAQL : function () {
      c1.insert({ "_key" : "XXX" , "name" : "initial" });
      let task = tasks.register({
        command: function() {
          let db = require("internal").db;
          db.UnitTestsExclusiveCollection2.insert({ _key: "runner1", value: false });
          while (!db.UnitTestsExclusiveCollection2.exists("runner2")) {
            require("internal").sleep(0.02);
          }
          for (let i = 0; i < 10000; ++i) {
            db._query("UPSERT { _key: 'XXX' } INSERT { name: 'runner1' } UPDATE { name: 'runner1' } IN UnitTestsExclusiveCollection1");
          }
          db.UnitTestsExclusiveCollection2.update("runner1", { value: true });
        }
      });

      try {
        db.UnitTestsExclusiveCollection2.insert({ _key: "runner2", value: false });
        while (!db.UnitTestsExclusiveCollection2.exists("runner1")) {
          require("internal").sleep(0.02);
        }
        for (let i = 0; i < 10000; i++) {
          db._query("UPSERT { _key: 'XXX' } INSERT { name: 'runner2' } UPDATE { name: 'runner2' } IN UnitTestsExclusiveCollection1");
        }
        db.UnitTestsExclusiveCollection2.update("runner2", { value: true });
      } catch (err) {
        assertEqual(ERRORS.ERROR_ARANGO_CONFLICT.code, err.errorNum);
      }

      while (true) {
        try {
          tasks.get(task);
          require("internal").wait(0.25, false);
        } catch (err) {
          // "task not found" means the task is finished
          break;
        }
      }

      // only one transaction should have succeeded
      assertEqual(2, c2.count());
      let docs = c2.toArray().sort(function(l, r) { return l._key < r._key; });
      assertNotEqual(docs[0].value, docs[1].value);
    },

    testExclusiveExpectNoConflictAQL : function () {
      c1.insert({ "_key" : "XXX" , "name" : "initial" });
      let task = tasks.register({
        command: function() {
          let db = require("internal").db;
          db.UnitTestsExclusiveCollection2.insert({ _key: "runner1", value: false });
          while (!db.UnitTestsExclusiveCollection2.exists("runner2")) {
            require("internal").sleep(0.02);
          }
          for (let i = 0; i < 10000; ++i) {
            db._query("UPSERT { _key: 'XXX' } INSERT { name: 'runner1' } UPDATE { name: 'runner1' } IN UnitTestsExclusiveCollection1 OPTIONS { exclusive: true }");
          }
          db.UnitTestsExclusiveCollection2.update("runner1", { value: true });
        }
      });

      db.UnitTestsExclusiveCollection2.insert({ _key: "runner2", value: false });
      while (!db.UnitTestsExclusiveCollection2.exists("runner1")) {
        require("internal").sleep(0.02);
      }
      for (let i = 0; i < 10000; i++) {
        db._query("UPSERT { _key: 'XXX' } INSERT { name: 'runner2' } UPDATE { name: 'runner2' } IN UnitTestsExclusiveCollection1 OPTIONS { exclusive: true }");
      }
      db.UnitTestsExclusiveCollection2.update("runner2", { value: true });

      while (true) {
        try {
          tasks.get(task);
          require("internal").wait(0.25, false);
        } catch (err) {
          // "task not found" means the task is finished
          break;
        }
      }

      // both transactions should have succeeded
      assertEqual(2, c2.count());
      let docs = c2.toArray().sort(function(l, r) { return l._key < r._key; });
      assertTrue(docs[0].value);
      assertTrue(docs[1].value);
    }

  };
}

////////////////////////////////////////////////////////////////////////////////
/// @brief executes the test suite
////////////////////////////////////////////////////////////////////////////////

jsunity.run(ExclusiveSuite);

return jsunity.done();


text:
<?
/** @var $this MyMoviesController */
$folders = $this->getConfig()->getFolders();

?><!DOCTYPE html>

    <title>MyFlicks</title>
    <link type="text/css" href="main.css" rel="stylesheet">
    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>

    <meta name="apple-mobile-web-app-status-bar-style" content="default"/>
    <meta name="apple-mobile-web-app-capable" content="yes"/>
    <meta name="viewport" content="user-scalable=no, width=device-width"/>
    <link rel="apple-touch-icon-precomposed" href="/images/design/apple-touch-icon.png"/>
    <link rel="apple-touch-startup-image" media="(device-width: 768px)  and (orientation: portrait)  and (-webkit-device-pixel-ratio: 2)" href="/images/design/startup_vertical_1536x2008.png"/>
    <link rel="apple-touch-startup-image" media="(device-width: 768px)  and (orientation: landscape)  and (-webkit-device-pixel-ratio: 2)" href="/images/design/startup_horizontal_1496x2048.png"/>
    <link rel="apple-touch-startup-image" media="(device-width: 320px) and (-webkit-device-pixel-ratio: 2)" href="/images/design/startup_vertical_640x920.png"/>

          <?
          $i = 1;
          foreach ($folders as $folderTitle => $folderPath) {
            print '
getCurrentFolder() == $folderPath) ? "class='action'" : "") . '>' . $folderTitle . '
';
            $i++;
          } ?>
          <? if ($this->getConfig()->getUseCache()): ?>
            <li  <?=(($this->getCurrentFolder() == 'history') ? "class='action'" : "")?>>
                history

          <? endif; ?>

      <? require_once '../views/tpl.movieBox.php'; ?>

Total: <?=count($this->getMovies())?>

Go to Top


text:
package cpumanager

import (
	"testing"

	"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
	"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
)

func TestNonePolicyName(t *testing.T) {
	policy := &nonePolicy{}

	policyName := policy.Name()
	if policyName != "none" {
		t.Errorf("NonePolicy Name() error. expected: none, returned: %v",
			policyName)
	}
}

func TestNonePolicyAdd(t *testing.T) {
	policy := &nonePolicy{}

	st := &mockState{
		assignments:   state.ContainerCPUAssignments{},
		defaultCPUSet: cpuset.NewCPUSet(1, 2, 3, 4, 5, 6, 7),
	}

	testPod := makePod("fakePod", "fakeContainer", "1000m", "1000m")

	container := &testPod.Spec.Containers[0]
	err := policy.AddContainer(st, testPod, container)
	if err != nil {
		t.Errorf("NonePolicy AddContainer() error. expected no error but got: %v", err)
	}
}

func TestNonePolicyRemove(t *testing.T) {
	policy := &nonePolicy{}

	st := &mockState{
		assignments:   state.ContainerCPUAssignments{},
		defaultCPUSet: cpuset.NewCPUSet(1, 2, 3, 4, 5, 6, 7),
	}

	testPod := makePod("fakePod", "fakeContainer", "1000m", "1000m")

	container := &testPod.Spec.Containers[0]
	err := policy.RemoveContainer(st, string(testPod.UID), container.Name)
	if err != nil {
		t.Errorf("NonePolicy RemoveContainer() error. expected no error but got %v", err)
	}
}


text:
def mock_openssl
  @ctx_mock        = mock "SSLContext", :key= => nil, :cert= => nil, :ssl_version= => nil
  @tcp_socket_mock = mock "TCPSocket", :close => true
  @ssl_socket_mock = mock "SSLSocket", :sync= => true, :connect => true, :close => true, :to_io => $stdin

  OpenSSL::SSL::SSLSocket.stub(:new).and_return(@ssl_socket_mock)
  OpenSSL::SSL::SSLContext.stub(:new).and_return(@ctx_mock)
end


text: Based on the **[Minimal Mistakes](http://mmistakes.github.io/minimal-mistakes)** Jekyll theme.


text:
<script id="composite-template-no-model" type="text/template">
  composite template
</script>


text:
@implementation FLDataEncoder

- (id) init {
	if((self = [super init])) {
        _stringEncoders = [[NSMutableDictionary alloc] init];
        [self addStringEncoder:[FLStringEncoder stringEncoder]];
        [self addStringEncoder:[FLURLStringEncoder urlStringEncoder]];
        [self addStringEncoder:[FLISO8601DateStringEncoder dateStringEncoder]];
        [self addStringEncoder:[FLNumberStringEncoder numberStringEncoder]];
        [self addStringEncoder:[FLBoolStringEncoder boolStringEncoder]];
        [self addStringEncoder:[FLUTF8DataStringEncoder utf8DataStringEncoder]];
        [self addStringEncoder:[FLBase64DataStringEncoder base64DataStringEncoder:[FLUTF8DataStringEncoder utf8DataStringEncoder]]];
    }

	return self;
}

+ (id) dataEncoder {
    return FLAutorelease([[[self class] alloc] init]);
}

#define Key(k) [k lowercaseString]

- (void) addStringEncoder:(id<FLStringEncoding>) encoder {

    NSArray* keys = [encoder encodingKeys];
    if(keys) {
        for(NSString* key in keys) {
            [_stringEncoders setObject:encoder forKey:Key(key)];
        }
    }
}

#if FL_MRC
- (void) dealloc {
    [_stringEncoders release];
    [super dealloc];
}
#endif

- (NSString*) stringFromObject:(id) object
                   encodingKey:(NSString*) stringEncodingKey {

    id<FLStringEncoding> encoder = [_stringEncoders objectForKey:Key(stringEncodingKey)];
    FLAssertNotNilWithComment(encoder, @"encoder for %@ not found", stringEncodingKey);

    if(encoder) {
        return [encoder stringFromObject:object];
    }

    return object;
}

- (id) objectFromString:(NSString*) string
            encodingKey:(NSString*) stringEncodingKey {

    id<FLStringEncoding> encoder = [_stringEncoders objectForKey:Key(stringEncodingKey)];
    FLAssertNotNilWithComment(encoder, @"decoder for %@ not found", stringEncodingKey);

    if(encoder) {
        return [encoder objectFromString:string];
    }

    return string;

}

- (id<FLStringEncoding>) stringEncoderForKey:(NSString*) key {
    return [_stringEncoders objectForKey:Key(key)];
}

@end


text:
<?php

class BL_CustomGrid_Model_System_Config_Source_Yesno extends BL_CustomGrid_Model_Source_Fixed
{
    protected $_optionHash = array(
        1 => 'Yes',
        0 => 'No',
    );
}


text:
{{+bindTo:partials.standard_nacl_api}}

PP_Size Struct Reference

{{- dummy div to appease doxygen -}}

Data Fields

int32_t 	width

int32_t 	height

Detailed Description

The PP_Size struct contains the size of a 2D rectangle.

Field Documentation

int32_t PP_Size::height

This value represents the height of the rectangle.

int32_t PP_Size::width

This value represents the width of the rectangle.

The documentation for this struct was generated from the following file:

pp_size.h

{{/partials.standard_nacl_api}}


text:
#pragma once

#include "api/s2n.h"
#include "crypto/s2n_certificate.h"
#include "crypto/s2n_dhe.h"
#include "tls/s2n_resume.h"
#include "tls/s2n_x509_validator.h"
#include "utils/s2n_blob.h"
#include "utils/s2n_set.h"
#include "tls/s2n_psk.h"

#define S2N_MAX_TICKET_KEYS 48
#define S2N_MAX_TICKET_KEY_HASHES 500 /* 10KB */

struct s2n_cipher_preferences;

struct s2n_config {
    /* The following bitfield flags are used in SAW proofs. The positions of
     * these flags are important, as SAW looks up each flag by their index
     * in the struct starting from 0. See the comments surrounding
     * config_bitfield in tests/saw/spec/handshake/handshake_io_lowlevel.saw for
     * more details. Make sure that any new flags are added after these ones
     * so that the indices in the SAW proofs do not need to be changed each time.
     *
     * START OF SAW-TRACKED BITFIELD FLAGS */

    unsigned use_tickets:1;

    /* Whether a connection can be used by a QUIC implementation.
     * See s2n_quic_support.h */
    unsigned quic_enabled:1;

    /* END OF SAW-TRACKED BITFIELD FLAGS */

    unsigned cert_allocated:1;
    unsigned default_certs_are_explicit:1;
    unsigned use_session_cache:1;
    /* if this is FALSE, server will ignore client's Maximum Fragment Length request */
    unsigned accept_mfl:1;
    unsigned check_ocsp:1;
    unsigned disable_x509_validation:1;
    unsigned max_verify_cert_chain_depth_set:1;
    /* Whether to add dss cert type during a server certificate request.
     * See https://github.com/aws/s2n-tls/blob/main/docs/USAGE-GUIDE.md */
    unsigned cert_req_dss_legacy_compat_enabled:1;
    /* Whether any RSA certificates have been configured server-side to send to clients. This is needed so that the
     * server knows whether or not to self-downgrade to TLS 1.2 if the server is compiled with Openssl 1.0.2 and does
     * not support RSA PSS signing (which is required for TLS 1.3). */
    unsigned is_rsa_cert_configured:1;
    /* It's possible to use a certificate without loading the private key,
     * but async signing must be enabled. Use this flag to enforce that restriction.
     */
    unsigned no_signing_key:1;

    struct s2n_dh_params *dhparams;
    /* Needed until we can deprecate s2n_config_add_cert_chain_and_key. This is
     * used to release memory allocated only in the deprecated API that the application
     * does not have a reference to. */
    struct s2n_map *domain_name_to_cert_map;
    struct certs_by_type default_certs_by_type;
    struct s2n_blob application_protocols;
    s2n_status_request_type status_request_type;
    s2n_clock_time_nanoseconds wall_clock;
    s2n_clock_time_nanoseconds monotonic_clock;

    const struct s2n_security_policy *security_policy;

    void *sys_clock_ctx;
    void *monotonic_clock_ctx;

    s2n_client_hello_fn *client_hello_cb;
    s2n_client_hello_cb_mode client_hello_cb_mode;

    void *client_hello_cb_ctx;

    uint64_t session_state_lifetime_in_nanos;

    struct s2n_set *ticket_keys;
    struct s2n_set *ticket_key_hashes;
    uint64_t encrypt_decrypt_key_lifetime_in_nanos;
    uint64_t decrypt_key_lifetime_in_nanos;

    /* If session cache is being used, these must all be set */
    s2n_cache_store_callback cache_store;
    void *cache_store_data;

    s2n_cache_retrieve_callback cache_retrieve;
    void *cache_retrieve_data;

    s2n_cache_delete_callback cache_delete;
    void *cache_delete_data;

    s2n_ct_support_level ct_type;

    s2n_cert_auth_type client_cert_auth_type;

    s2n_alert_behavior alert_behavior;

    /* Return TRUE if the host should be trusted, If FALSE this will likely be called again for every host/alternative name
     * in the certificate. If any respond TRUE. If none return TRUE, the cert will be considered untrusted. */
    uint8_t (*verify_host)(const char *host_name, size_t host_name_len, void *data);
    void *data_for_verify_host;

    /* Application supplied callback to resolve domain name conflicts when loading certs. */
    s2n_cert_tiebreak_callback cert_tiebreak_cb;

    uint8_t mfl_code;

    uint8_t initial_tickets_to_send;

    struct s2n_x509_trust_store trust_store;
    uint16_t max_verify_cert_chain_depth;

    s2n_async_pkey_fn async_pkey_cb;

    s2n_psk_selection_callback psk_selection_cb;
    void *psk_selection_ctx;

    s2n_key_log_fn key_log_cb;
    void *key_log_ctx;

    s2n_session_ticket_fn session_ticket_cb;
    void *session_ticket_ctx;

    s2n_early_data_cb early_data_cb;

    uint32_t server_max_early_data_size;

    s2n_psk_mode psk_mode;

    s2n_async_pkey_validation_mode async_pkey_validation_mode;
};

S2N_CLEANUP_RESULT s2n_config_ptr_free(struct s2n_config **config);

int s2n_config_defaults_init(void);
extern struct s2n_config *s2n_fetch_default_config(void);
int s2n_config_set_unsafe_for_testing(struct s2n_config *config);

int s2n_config_init_session_ticket_keys(struct s2n_config *config);
int s2n_config_free_session_ticket_keys(struct s2n_config *config);

void s2n_wipe_static_configs(void);
extern struct s2n_cert_chain_and_key *s2n_config_get_single_default_cert(struct s2n_config *config);
int s2n_config_get_num_default_certs(struct s2n_config *config);


text:
```sh
gcloud iam service-accounts delete cluster-user-1 -q
gcloud iam service-accounts delete cluster-user-2 -q
gcloud container clusters delete permissions-test-cluster
```


text:
var _ = {
  tpl: function (str, dict) {
    for (var i in dict) {
      str = str.replace(new RegExp('\\{\\{' + i + '\\}\\}', 'g'), dict[i])
    }
    return str
  },
  log: function () {
    console.log.apply(console, arguments)
  },
  nodes: function (str) {
    var div = document.createElement('div')
    div.innerHTML = str
    var fragment = document.createDocumentFragment()
    var nodes = div.childNodes
    while (nodes[0]) {
      fragment.appendChild(nodes[0])
    }
    return fragment
  },
  node: function (str) {
    return this.nodes(str).childNodes[0]
  },
  hasClass: function (ele, cls) {
    return ele.className && ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
  },
  addClass: function (ele, cls) {
    if (!this.hasClass(ele, cls)) {
      ele.className += " " + cls;
    }
  },
  removeClass: function (ele, cls) {
    if (this.hasClass(ele, cls)) {
      var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
      ele.className = ele.className.replace(reg, ' ');
    }
  },
  on: function (element, type, handler) {
    if (element.addEventListener) {
      element.addEventListener(type, handler, false);
    } else if (element.attachEvent) {
      element.attachEvent("on" + type, handler);
    } else {
      element["on" + type] = handler;
    }
  },
  off: function (element, type, handler) {
    if (element.removeEventListener) {
      element.removeEventListener(type, handler, false);
    } else if (element.detachEvent) {
      element.detachEvent("on" + type, handler);
    } else {
      element["on" + type] = null;
    }
  },
  parent: function (elem, cond, self) {
    if (!self) {
      elem = elem.parentNode
    }
    while (elem) {
      if (cond(elem)) {
        return elem
      }
      elem = elem.parentNode
    }
  },
  child: function (elem, cond, self) {
    var childNodes = elem.childNodes
    var node, result
    var i = 0
    self && (i = -1)
    for(; i < childNodes.length; i++){
      node = childNodes[i] || elem
      result = null
      try{
        result = cond(node)
      }catch (e){}
      if(result){
        return node
      }
    }
  }
}

module.exports = _


text:
package org.gradle.messaging.serialize;

import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;

public abstract class AbstractDecoder implements Decoder {
    private DecoderStream stream;

    public InputStream getInputStream() {
        if (stream == null) {
            stream = new DecoderStream();
        }
        return stream;
    }

    public void readBytes(byte[] buffer) throws IOException {
        readBytes(buffer, 0, buffer.length);
    }

    public byte[] readBinary() throws EOFException, IOException {
        int size = readSmallInt();
        byte[] result = new byte[size];
        readBytes(result);
        return result;
    }

    public int readSmallInt() throws EOFException, IOException {
        return readInt();
    }

    public long readSmallLong() throws EOFException, IOException {
        return readLong();
    }

    public String readNullableString() throws EOFException, IOException {
        if (readBoolean()) {
            return readString();
        } else {
            return null;
        }
    }

    public void skipBytes(long count) throws EOFException, IOException {
        long remaining = count;
        while (remaining > 0) {
            long skipped = maybeSkip(remaining);
            if (skipped <= 0) {
                break;
            }
            remaining -= skipped;
        }
        if (remaining > 0) {
            throw new EOFException();
        }
    }

    protected abstract int maybeReadBytes(byte[] buffer, int offset, int count) throws IOException;

    protected abstract long maybeSkip(long count) throws IOException;

    private class DecoderStream extends InputStream {
        byte[] buffer = new byte[1];

        @Override
        public long skip(long n) throws IOException {
            return maybeSkip(n);
        }

        @Override
        public int read() throws IOException {
            int read = maybeReadBytes(buffer, 0, 1);
            if (read <= 0) {
                return read;
            }
            return buffer[0] & 0xff;
        }

        @Override
        public int read(byte[] buffer) throws IOException {
            return maybeReadBytes(buffer, 0, buffer.length);
        }

        @Override
        public int read(byte[] buffer, int offset, int count) throws IOException {
            return maybeReadBytes(buffer, offset, count);
        }
    }
}


text:
using CodeCracker.CSharp.Usage;
using Microsoft.CodeAnalysis;
using System.Threading.Tasks;
using Xunit;

namespace CodeCracker.Test.CSharp.Usage
{
    public class NoPrivateReadonlyFieldTests : CodeFixVerifier<NoPrivateReadonlyFieldAnalyzer, ReadonlyFieldCodeFixProvider>
    {
        DiagnosticResult CreateExpectedDiagnosticResult(int line, int column, string fieldName = "i") =>
            new DiagnosticResult
            {
                Id = DiagnosticId.NoPrivateReadonlyField.ToDiagnosticId(),
                Message = string.Format(NoPrivateReadonlyFieldAnalyzer.Message, fieldName),
                Severity = DiagnosticSeverity.Info,
                Locations = new[] { new DiagnosticResultLocation("Test0.cs", line, column) }
            };

        [Fact]
        public async Task PrivateFieldWithAssignmentOnDeclarationCreatesNoDiagnostic()
        {
            const string source = @"
			public class TypeName
			{
				private int i = 1;
			}";
            await VerifyCSharpHasNoDiagnosticsAsync(source);
        }

        [Fact]
        public async Task ReadonlyFieldCreatesNoDiagnostic()
        {
            const string source = @"
			public class TypeName
			{
				internal readonly int i = 1;
			}";
            await VerifyCSharpHasNoDiagnosticsAsync(source);
        }

        [Fact]
        public async Task ConstFieldCreatesNoDiagnostic()
        {
            const string source = @"
			public class TypeName
			{
				protected const int i = 1;
			}";
            await VerifyCSharpHasNoDiagnosticsAsync(source);
        }

        [Fact]
        public async Task NoPrivateFieldWithAssignmentOnDeclarationCreatesDiagnostic()
        {
            const string source = @"
			public class TypeName
			{
				protected int i = 1;
			}";

            await VerifyCSharpDiagnosticAsync(source, CreateExpectedDiagnosticResult(line: 4, column: 19));
        }

        [Fact]
        public async Task FieldWithoutAcessModifierCreatesNoDiagnostic()
        {
            const string source = @"
			public class TypeName
			{
				int i = 1;
			}";
            await VerifyCSharpHasNoDiagnosticsAsync(source);
        }

        [Fact]
        public async Task NoPrivateFieldsInAStructCreatesDiagnostic()
        {
            const string source = @"
			public struct TypeName
			{
				public int i = 1;
				internal int j = 1;
			}";
            await VerifyCSharpDiagnosticAsync(
                source,
                CreateExpectedDiagnosticResult(line: 4, column: 16),
                CreateExpectedDiagnosticResult(line: 5, column: 18, fieldName: "j"));
        }

        [Fact]
        public async Task StaticFieldCreatesDiagnostic()
        {
            const string source = @"
			public class TypeName
			{
				protected static int i = 1;
			}";
            await VerifyCSharpDiagnosticAsync(source, CreateExpectedDiagnosticResult(line: 4, column: 26));
        }

        [Fact]
        public async Task StaticFieldAssignmentOnStaticConstructorCreatesDiagnostic()
        {
            const string source = @"
			public class TypeName
			{
				protected static int i;
				static TypeName()
				{
					i = 0;
				}
			}";
            await VerifyCSharpDiagnosticAsync(source, CreateExpectedDiagnosticResult(line: 4, column: 26));
        }

        [Fact]
        public async Task StaticFieldAssignmentOnAInstanceConstructorCreatesNoDiagnostic()
        {
            const string source = @"
			public class TypeName
			{
				protected static int i;
				private TypeName()
				{
					i = 0;
				}
			}";
            await VerifyCSharpHasNoDiagnosticsAsync(source);
        }

        [Fact]
        public async Task FieldWithAssignmentCreatesNoDiagnostic()
        {
            const string source = @"
			public class TypeName
			{
				public int i;
				public void Foo()
				{
					i = 0;
				}
			}";
            await VerifyCSharpHasNoDiagnosticsAsync(source);
        }

        [Fact]
        public async Task FieldWithAssignmentOnConstructorCreatesDiagnostic()
        {
            const string source = @"
			namespace ConsoleApplication1
			{
				public class TypeName
				{
					protected int i;
					public TypeName()
					{
						i = 0;
					}
				}
			}";
            await VerifyCSharpDiagnosticAsync(source, CreateExpectedDiagnosticResult(line: 6, column: 20));
        }

        [Fact]
        public async Task FieldWithPostfixUnaryAssignmentOnMethodCreatesNoDiagnostic()
        {
            const string source = @"
			public class TypeName
			{
				protected int i = 0;
				public void Foo()
				{
					i++;
				}
			}";
            await VerifyCSharpHasNoDiagnosticsAsync(source);
        }

        [Fact]
        public async Task FieldWithPrefixUnaryAssignmentOnMethodCreatesNoDiagnostic()
        {
            const string source = @"
			public class TypeName
			{
				protected int i = 0;
				public void Foo()
				{
					--i;
				}
			}";
            await VerifyCSharpHasNoDiagnosticsAsync(source);
        }

        [Fact]
        public async Task FieldWithPostfixUnaryAssignmentOnConstructorCreatesDiagnostic()
        {
            const string source = @"
			public class TypeName
			{
				protected int i = 0;
				public TypeName()
				{
					i++;
				}
			}";
            await VerifyCSharpDiagnosticAsync(source, CreateExpectedDiagnosticResult(line: 4, column: 19));
        }

        [Fact]
        public async Task FieldWithPrefixUnaryAssignmentOnConstructorCreatesDiagnostic()
        {
            const string source = @"
			public class TypeName
			{
				protected int i = 0;
				public TypeName()
				{
					--i;
				}
			}";
            await VerifyCSharpDiagnosticAsync(source, CreateExpectedDiagnosticResult(line: 4, column: 19));
        }

        [Fact]
        public async Task TwoClassesWithNoPrivateFieldsCreatesDiagnostic()
        {
            const string source = @"
			namespace ConsoleApplication1
			{
				public class TypeName1
				{
					public int i = 1;
					public int j = 1;
				}
				internal class TypeName2
				{
					internal int k = 1;
					internal int l = 1;
				}
			}";
            await VerifyCSharpDiagnosticAsync(source,
                CreateExpectedDiagnosticResult(line: 6, column: 17, fieldName: "i"),
                CreateExpectedDiagnosticResult(line: 7, column: 17, fieldName: "j"),
                CreateExpectedDiagnosticResult(line: 11, column: 19, fieldName: "k"),
                CreateExpectedDiagnosticResult(line: 12, column: 19, fieldName: "l"));
        }

        [Fact]
        public async Task ReadFieldFieldFromOtherTypeCreatesDiagnostic()
        {
            const string source1 = @"
			namespace ConsoleApplication1
			{
				public class TypeName1
				{
					public int i = 1;
				}
			}";

            const string source2 = @"
			namespace ConsoleApplication1
			{
				public class TypeName2
				{
					TypeName2()
					{
						var x = new TypeName1().i;
					}
				}
			}";
            await VerifyCSharpDiagnosticAsync(new[] { source1, source2 }, CreateExpectedDiagnosticResult(line: 6, column: 17));
        }

        [Fact]
        public async Task SetFieldFieldFromOtherTypeCreatesNoDiagnostic()
        {
            const string source1 = @"
			namespace ConsoleApplication1
			{
				public class TypeName1
				{
					public int i = 1;
				}
			}";

            const string source2 = @"
			namespace ConsoleApplication1
			{
				public class TypeName2
				{
					TypeName2()
					{
						new TypeName1() { i = 10 };
					}
				}
			}";
            await VerifyCSharpHasNoDiagnosticsAsync(source1, source2);
        }

        [Fact]
        public async Task ReadFieldFieldFromNestedTypeCreatesDiagnostic()
        {
            const string source = @"
			public class TypeName1
			{
				protected int j = 0;
				TypeName1()
				{
					new TypeName2(0).i.ToString();
				}

				struct TypeName2
				{
					internal int i;
					internal TypeName2(int i)
					{
						this.i = i;
						new TypeName1().j.ToString();
					}
				}
			}";
            await VerifyCSharpDiagnosticAsync(source,
                CreateExpectedDiagnosticResult(line: 04, column: 19, fieldName: "j"),
                CreateExpectedDiagnosticResult(line: 12, column: 19, fieldName: "i"));
        }

        [Fact]
        public async Task SetFieldFieldFromNestedTypeCreatesNoDiagnostic()
        {
            const string source = @"
			public class TypeName1
			{
				TypeName1()
				{
					new TypeName2() { i = 1 };
				}

				struct TypeName2
				{
					internal int i;
				}
			}";
            await VerifyCSharpHasNoDiagnosticsAsync(source);
        }

        [Fact]
        public async Task FieldWithAssignmentOnMethodByRefOrOutParameterCreatesNoDiagnostic()
        {
            const string source = @"
			public class TypeName
			{
				public int i;
				public int k;
				void Foo()
				{
					Foo1(ref i);
					Foo2(out k);
				}
				void Foo1(ref int j)
				{
				}
				void Foo2(out int m)
				{
					m = 0;
				}
			}";
            await VerifyCSharpHasNoDiagnosticsAsync(source);
        }

        [Fact]
        public async Task FieldWithAssignmentOnConstructorByRefOrOutParameterCreatesDiagnostic()
        {
            const string source = @"
			public class TypeName
			{
				public int i;
				public int k;
				TypeName()
				{
					Foo1(ref i);
					Foo2(out k);
				}
				void Foo1(ref int j)
				{
				}
				void Foo2(out int m)
				{
					m = 0;
				}
			}";
            await VerifyCSharpDiagnosticAsync(source,
                CreateExpectedDiagnosticResult(line: 4, column: 16, fieldName: "i"),
                CreateExpectedDiagnosticResult(line: 5, column: 16, fieldName: "k"));
        }

        [Fact]
        public async Task FieldInPartialClassWithAssignmentOnConstructorInOtherTreeCreatesDiagnostic()
        {
            const string source1 = @"
			public partial class TypeName
			{
				public int i;
			}";

            const string source2 = @"
			public partial class TypeName
			{
				TypeName()
				{
					i = 0;
				};
			}";

            await VerifyCSharpDiagnosticAsync(
                sources: new string[] { source1, source2 },
                expected: CreateExpectedDiagnosticResult(line: 4, column: 16));
        }

        [Fact]
        public async Task FieldInPartialClassWithAssignmentOnMethodInOtherTreeCreatesNoDiagnostic()
        {
            const string source1 = @"
			public partial class TypeName
			{
				public int i;
			}";

            const string source2 = @"
			public partial class TypeName
			{
				void Foo()
				{
					i = 0;
				};
			}";
            await VerifyCSharpHasNoDiagnosticsAsync(source1, source2);
        }

        [Fact]
        public async Task ChangeFieldWhenIsPublicAndNotAssigned()
        {
            const string source = @"
			class TypeName
			{
				public int i;
			}";
            const string fixtest = @"
			class TypeName
			{
				public readonly int i;
			}";
            await VerifyCSharpFixAsync(source, fixtest);
        }
    }
}


text:
(function () {
 //   var JavaWrapper = require(EclairJS_Globals.NAMESPACE + '/JavaWrapper');
 //   var Logger = require(EclairJS_Globals.NAMESPACE + '/Logger');

    /**
     * @constructor SqlTimestamp
     * @memberof module:eclairjs/sql
     * @classdesc A thin wrapper around Date that allows the JDBC API to identify this as an SQL TIMESTAMP value.
     * It adds the ability to hold the SQL TIMESTAMP fractional seconds value, by allowing the specification of
     * fractional seconds to a precision of nanoseconds. A Timestamp also provides formatting and parsing operations
     * to support the JDBC escape syntax for timestamp values.
     * @param {number | string | Date} number of millisecond, string date representation, or Date object
     */
    var SqlTimestamp = Java.type('org.eclairjs.nashorn.wrap.sql.SqlTimestamp');
   /*
    var SqlTimestamp = function(o) {
        var jvmObj;
        if (!o) {
            var d = new Date();
            jvmObj = new java.sql.Timestamp(d.getTime());
        } else if (typeof o === 'number') {
            // assume millisec
            jvmObj = new java.sql.Timestamp(o);
        } else if (typeof o === 'string' || o instanceof String) {
            var d = new Date(o);
            jvmObj = new java.sql.Timestamp(d.getTime());
        } else if (o instanceof Date) {
            jvmObj = new java.sql.Timestamp(o.getTime());
        } else {
            jvmObj = o;
        }
        JavaWrapper.call(this, jvmObj);

        this.logger = Logger.getLogger("sql.SqlTimestamp_js");
        this.logger.debug("SqlTimestamp constructor");
    };

    SqlTimestamp.prototype = Object.create(JavaWrapper.prototype);

    SqlTimestamp.prototype.constructor = SqlTimestamp;
*/
    /**
     * Indicates whether this Timestamp object is later than the given Timestamp object.
     * @function
     * @name module:eclairjs/sql.SqlTimestamp#after
     * @param {SqlTimeStamp} when
     * @returns {boolean}
     */
/*    SqlTimestamp.prototype.after = function (when) {
        return this.getJavaObject().after(Utils.unwrapObject(when));
    };*/
    /**
     * Indicates whether this Timestamp object is earlier than the given Timestamp object.
     *  @function
     * @name module:eclairjs/sql.SqlTimestamp#before
     * @param {SqlTimeStamp} when
     * @returns {boolean}
     */
/*    SqlTimestamp.prototype.before = function (when) {
        return this.getJavaObject().before(Utils.unwrapObject(when));
    };*/
    /**
     * Compares this Timestamp object to the given Date or Timestamp object.
     *  @function
     * @name module:eclairjs/sql.SqlTimestamp#compareTo
     * @param {module:eclairjs/sql.SqlDate | module:eclairjs/sql.SqlTimestamp} when
     * @returns {integer}
     */
 /*   SqlTimestamp.prototype.compareTo = function (when) {
        return this.getJavaObject().compareTo(Utils.unwrapObject(when));
    };*/
    /**
     * Tests to see if this Timestamp object is equal to the given Timestamp object.
     *  @function
     * @name module:eclairjs/sql.SqlTimestamp#equals
     * @param {module:eclairjs/sql.SqlTimestamp} when
     * @returns {boolean}
     */
 /*   SqlTimestamp.prototype.equals = function (when) {
        return this.getJavaObject().equals(Utils.unwrapObject(when));
    };*/
    /**
     * Gets this Timestamp object's nanos value.
     *  @function
     * @name module:eclairjs/sql.SqlTimestamp#getNanos
     * @returns {integer}
     */
 /*   SqlTimestamp.prototype.getNanos = function () {
        return this.getJavaObject().getNanos();
    };*/
    /**
     * Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this Timestamp object
     *  @function
     * @name module:eclairjs/sql.SqlTimestamp#getTime
     * @returns {integer}
     */
/*    SqlTimestamp.prototype.getTime = function () {
        return this.getJavaObject().getTime();
    };*/
    /**
     * Returns a hash code value for this object.
     *  @function
     * @name module:eclairjs/sql.SqlTimestamp#hashCode
     * @returns {integer}
     */
 /*   SqlTimestamp.prototype.hashCode = function () {
        return this.getJavaObject().hashCode();
    };*/
    /**
     * Sets this Timestamp object's nanos field to the given value.
     *  @function
     * @name module:eclairjs/sql.SqlTimestamp#setNanos
     * @param {integer}
     */
 /*   SqlTimestamp.prototype.setNanos = function (n) {
        return this.getJavaObject().setNanos(n);
    };*/
    /**
     * Sets this Timestamp object to represent a point in time that is time milliseconds after January 1, 1970 00:00:00 GMT.
     *  @function
     * @name module:eclairjs/sql.SqlTimestamp#setTime
     * @param {integer}
     */
 /*   SqlTimestamp.prototype.setTime = function (n) {
        return this.getJavaObject().setTime(n);
    };*/
    /**
     * Formats a timestamp in JDBC timestamp escape format.
     *  @function
     * @name module:eclairjs/sql.SqlTimestamp#toString
     * @returns {string}
     */
 /*   SqlTimestamp.prototype.toString = function () {
        return this.getJavaObject().toString();
    };*/

/*    SqlTimestamp.prototype.toJSON = function () {
        return this.getJavaObject().toString();
    };*/

    module.exports = SqlTimestamp;

})();


text:
<?xml version="1.0" encoding="utf-8"?>
<labels>
	Szukaj w repozytorium rozszerzeń todoyu
	Szukaj wg słów kluczowych
	Przez
	Dostępna jest aktualizacja jądra systemu
	Zainstaluj aktualizację jądra systemu
	Anuluj aktualizację jądra
	Nowa wersja
	Twoja wersja
	Data wydania
	Brak dostępnych aktualizacji rozszerzeń.
	To jest istotna aktualizacja zainstalowanego rozszerzenia. Instniejące rozszerzenie zostanie całkowicie zastąpione nowymi plikami.
	Nowa wersja i rozszerzenia mogą zawierać nowe funkcje, które mogą spowodować problemy. Może pojawić się również zmiana w bazie danych. Upewnij się, że posiadasz aktualiną kopię zapasową plików i bazy danych.
	Informacje o wersji
	Nie odnaleziono nowych rozszerzeń. Masz aktualnie zainstalowane wszystko z rynku oddatków
	Nie odnaleziono rozszerzeń na rynku rozszerzeń, które pasowałyby do tego zapytania.
	Aktualizacje rozszerzeń
	Więcej informacji
	Zainstaluj aktualizacje
	Znaleziono %s rozszerzeń
	Zainstaluj rozszerzenie
	Zainstalowane
	Aktualizuj rozszerzenie
	Zainstaluj aktualizację rozszerzenia
	Czy zainstalować aktualizację do tego rozszerzenia?
	Aktualizacja rozszerzenie przebiegła pomyślnie
	Anuluj
	Rozszedzenie zostało prawidłowo zainstalowane
	Zainstalwoać to rozszerzenie?
	Zainstaluj aktualizację rozszerzenie
	Anuluj instalację aktualziacji
	Pliki do pobrania
	Darmowe
	Płatne
	Zainstalować aktualizację jądra systemu?
	Aktualizacja systemu zakończona sukcesem
	Zainstaluj nowe rozszerzenie
	Jądro zostało zainstalowane. Przełąduj todoyu i aktualizuj cache. Prosimy o cierpliwość
	Brak informacji o wersji
	Istnieją nierozwiązane zależności
	Istnieją nierozwiązane konflikty
	Brakuje archiwum aktualizacji dla tej wersji
	Brakuje archiwum aktualizacji dla tej wersji
	Nie jesteś uprawniony do pobeirania plików - upewnij się, że masz właściwą wersję
	Brakuje ID todoyu. Podaj twoje ID w oknie konfiguracji systemu
	Żadne rozszerzenie nie zosrało zgłoszone do rejestracji
	todoyu nie był w stanie wykryć domeny do rejestracji
	Próbujesz zarejestrować rozszerzenie, które nie są dostępne w tER
	Twoje ID todoyu nie odpowiada użytkownikowi z todoyu.com
	Nie masz darmowych licencji do tego rozszerzenia. Kup je w sklepie online
	Połączenie z repozytorium nie powiodło się
	Upewnij się, że twój serwer jest w stanie połączyć się z internetem
	Repozytorium rozszerzeń todoyu zwróciło błąd
	Repozytorium rozszerzeń todoyu nie może wykonać twojego zapytania
	Wersja menadzera rozszerzeń systemu wydaje się być zbyt stara, aby komunikować się z tER. Zaktualizauj go.
	Prubujesz wywołać nieznaną funkcję tER. (To jest robak i nie powinien mieć miejsca)
	Repozytorium rozszerzeń todoyu zwróciło nieprawidłową odpowiedź. Przepraszamy, wygląda na to, że tER ma błąd. Spróbuj później
	Info: tER nie rozpoznało tego rozszerzenia. To jest problem jedynie wtedy, gdy próbujesz zainstalować komercyjną wtyczkę
	Zaakceptuj licencję
	Kup to rozszerzenie w repozytorium todoyu
	użyj jednej z moich licencji
	Wymagana jest licencja do tego repozytorium!
	Masz dostępną licencję do tego rozszerzenia. Jedna będzie użyta do instalacji.
	Nie masz dostęnych licencji do tego rozszerzenia.
	Już aktywowałęś licencję dla tej domeny. Dlatego więcej licencji nie będzie użytych.
	Zainstaluj aktualizację jądra
	Więcej informacji
</labels>


text:
<#
.SYNOPSIS
script for azure-sdk-for-net CI check in Unified Pipeline

.DESCRIPTION
Automatically generate and verify the SDK for both management-plane and data-plane.
Unified pipeline will run this script.

.PARAMETER inputJsonFile
Path to the input json file to contain all the input paramters.

.PARAMETER outputJsonFile
Path to the script output json file.

.EXAMPLE
Run script with default parameters.

Invoke-GenerateAndBuildV2.ps1 -inputJsonFile <inputJsonFile> -outputJsonFile <outputJsonFile>

please refer to eng/scripts/automation/unified-pipeline-test.md for more test scenaros and the sample inputJson and outputJson.

#>
param (
  [string]$inputJsonFile,
  [string]$outputJsonFile
)

. (Join-Path $PSScriptRoot ".." "common" "scripts" "Helpers" PSModule-Helpers.ps1)
. (Join-Path $PSScriptRoot automation GenerateAndBuildLib.ps1)

$inputJson = Get-Content $inputJsonFile | Out-String | ConvertFrom-Json
$swaggerDir = $inputJson.specFolder
if($swaggerDir) {
    $swaggerDir = Resolve-Path $swaggerDir
}
$swaggerDir = $swaggerDir -replace "\\", "/"
[string[]] $inputFilePaths = $inputJson.changedFiles;
$readmeFiles = $inputJson.relatedReadmeMdFiles
$commitid = $inputJson.headSha
$repoHttpsUrl = $inputJson.repoHttpsUrl
$downloadUrlPrefix = $inputJson.installInstructionInput.downloadUrlPrefix
$autorestConfig = $inputJson.autorestConfig
$relatedCadlProjectFolder = $inputJson.relatedCadlProjectFolder

$autorestConfigYaml = ""
if ($autorestConfig) {
    $autorestConfig | Set-Content "config.md"
    $autorestConfigYaml = Get-Content -Path ./config.md
    $range = ($autorestConfigYaml | Select-String -Pattern '```').LineNumber
    if ( $range.count -gt 1) {
        $startNum = $range[0];
        $lines = $range[1] - $range[0] - 1
        $autorestConfigYaml = ($autorestConfigYaml | Select -Skip $startNum | Select -First $lines) |Out-String
    }

    Install-ModuleIfNotInstalled "powershell-yaml" "0.4.1" | Import-Module
    $yml = ConvertFrom-YAML $autorestConfigYaml
    $requires = $yml["require"]
    if ($requires.Count -gt 0) {
        $readmeFiles = $requires
    }
}

$generatedSDKPackages = New-Object 'Collections.Generic.List[System.Object]'

$sdkPath =  (Join-Path $PSScriptRoot .. ..)
$sdkPath = Resolve-Path $sdkPath
$sdkPath = $sdkPath -replace "\\", "/"
for ($i = 0; $i -le $readmeFiles.Count - 1; $i++) {
    $readmeFile = $readmeFiles[$i] -replace "\\", "/"
    $readme = ""
    if ( $swaggerDir) {
        $readme = (Join-Path $swaggerDir $readmeFile)
    } elseif ( $commitid) {
        if ($repoHttpsUrl) {
            $readme = "$repoHttpsUrl/blob/$commitid/$readmeFile"
        } else {
            $readme = "https://github.com/$org/azure-rest-api-specs/blob/$commitid/$readmeFile"
        }
    } else {
        throw "No readme File path provided."
    }

    if ($autorestConfigYaml) {
        $readmeFiles[$i] = $readme
        $autorestConfigYaml = ConvertTo-YAML $yml
    }
    Invoke-GenerateAndBuildSDK -readmeAbsolutePath $readme -sdkRootPath $sdkPath -autorestConfigYaml "$autorestConfigYaml" -downloadUrlPrefix "$downloadUrlPrefix" -generatedSDKPackages $generatedSDKPackages
}

#update services without readme.md
$serviceWithReadme = @()
foreach( $readme in $readmeFiles) {
    $service, $serviceType = Get-ResourceProviderFromReadme $readme
    $serviceWithReadme += @($service)
}
$inputFileToGen = @()
foreach( $file in $inputFilePaths) {
    if ( $file -match "specification/(?<specName>.*)/data-plane|resource-manager" ) {
        if (!$serviceWithReadme.Contains($matches["specName"])) {
            $inputFileToGen += @($file)
        }
    }

}

if ($inputFileToGen) {
    UpdateExistingSDKByInputFiles -inputFilePaths $inputFileToGen -sdkRootPath $sdkPath -headSha $commitid -repoHttpsUrl $repoHttpsUrl -downloadUrlPrefix "$downloadUrlPrefix" -generatedSDKPackages $generatedSDKPackages
}

# generate sdk from cadl file
if ($relatedCadlProjectFolder) {
    foreach ($cadlRelativeFolder in $relatedCadlProjectFolder) {
        $cadlFolder = Resolve-Path (Join-Path $swaggerDir $cadlRelativeFolder)
        $newPackageOutput = "newPackageOutput.json"

        Push-Location $cadlFolder
        trap {Pop-Location}
        $cadlProjectYaml = Get-Content -Path (Join-Path "$cadlFolder" "cadl-project.yaml") -Raw

        Install-ModuleIfNotInstalled "powershell-yaml" "0.4.1" | Import-Module
        $yml = ConvertFrom-YAML $cadlProjectYaml
        $sdkFolder = $yml["emitters"]["@azure-tools/cadl-csharp"]["sdk-folder"]
        $projectFolder = (Join-Path $sdkPath $sdkFolder)
        # $projectFolder = $projectFolder -replace "\\", "/"
        if ($projectFolder) {
            $directories = $projectFolder -split "/|\\"
            $count = $directories.Count
            $projectFolder = $directories[0 .. ($count-2)] -join "/"
            $service = $directories[-3];
            $namespace = $directories[-2];
        }
        New-CADLPackageFolder -service $service -namespace $namespace -sdkPath $sdkPath -cadlInput $cadlFolder/main.cadl -outputJsonFile $newpackageoutput
        $newPackageOutputJson = Get-Content $newPackageOutput -Raw | ConvertFrom-Json
        $relativeSdkPath = $newPackageOutputJson.path
        npm install
        npx cadl compile --output-path $sdkPath --emit @azure-tools/cadl-csharp .
        if ( !$?) {
            Throw "Failed to generate sdk for cadl. exit code: $?"
        }
        GeneratePackage -projectFolder $projectFolder -sdkRootPath $sdkPath -path $relativeSdkPath -downloadUrlPrefix $downloadUrlPrefix -skipGenerate -generatedSDKPackages $generatedSDKPackages
        Pop-Location
    }
}
$outputJson = [PSCustomObject]@{
    packages = $generatedSDKPackages
}
$outputJson | ConvertTo-Json -depth 100 | Out-File $outputJsonFile


text:
#ifndef WebPlatformStrategies_h
#define WebPlatformStrategies_h

#include <WebCore/CookiesStrategy.h>
#include <WebCore/PlatformStrategies.h>
#include <WebCore/PluginStrategy.h>
#include <WebCore/VisitedLinkStrategy.h>

class WebPlatformStrategies : public WebCore::PlatformStrategies, private WebCore::CookiesStrategy, private WebCore::PluginStrategy, private WebCore::VisitedLinkStrategy {
public:
    static void initialize();

private:
    WebPlatformStrategies();

    // WebCore::PlatformStrategies
    virtual WebCore::CookiesStrategy* createCookiesStrategy();
    virtual WebCore::PluginStrategy* createPluginStrategy();
    virtual WebCore::VisitedLinkStrategy* createVisitedLinkStrategy();

    // WebCore::CookiesStrategy
    virtual void notifyCookiesChanged();

    // WebCore::PluginStrategy
    virtual void refreshPlugins();
    virtual void getPluginInfo(const WebCore::Page*, Vector<WebCore::PluginInfo>&);

    // WebCore::VisitedLinkStrategy
    virtual bool isLinkVisited(WebCore::Page*, WebCore::LinkHash);
    virtual void addVisitedLink(WebCore::Page*, WebCore::LinkHash);
};

#endif // WebPlatformStrategies_h