{"id":34845,"date":"2019-10-31T22:00:43","date_gmt":"2019-10-31T19:00:43","guid":{"rendered":"https:\/\/prohoster.info\/blog\/dve-istorii-kak-anki-mozhet-vam-pomoch-vyuchit-inostrannyj-yazyk-i-podgotovitsya-k-intervyu\/"},"modified":"2019-10-31T22:00:43","modified_gmt":"2019-10-31T19:00:43","slug":"dve-istorii-kak-anki-mozhet-vam-pomoch-vyuchit-inostrannyj-yazyk-i-podgotovitsya-k-intervyu","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/news\/dve-istorii-kak-anki-mozhet-vam-pomoch-vyuchit-inostrannyj-yazyk-i-podgotovitsya-k-intervyu","title":{"rendered":"Duas hist\u00f3rias de como o ANKI pode ajud\u00e1-lo a aprender um idioma estrangeiro e se preparar para entrevistas","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Sempre acreditei que um programador pregui\u00e7oso \u00e9 um bom programador. Por qu\u00ea? Porque se voc\u00ea pede a um trabalhador esfor\u00e7ado para fazer algo, ele vai e faz. Mas um programador pregui\u00e7oso vai gastar 2 a 3 vezes mais tempo, mas vai escrever um script que far\u00e1 isso por ele. Pode ser que, na primeira vez, isso consuma um tempo injustificadamente grande, mas, considerando tarefas repetitivas, essa abordagem logo compensa. Eu me considero um programador pregui\u00e7oso. Essa foi uma introdu\u00e7\u00e3o, agora vamos ao ponto. <noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h2 id=\"istoriya-pervaya\">Primeira hist\u00f3ria<\/h2>\n<p><\/p>\n<p>Alguns anos atr\u00e1s, comecei a pensar em como melhorar meu ingl\u00eas. N\u00e3o me ocorreu nada melhor do que a leitura de literatura. Comprei um leitor de e-books, baixei livros e comecei a ler. Durante a leitura, frequentemente encontrava palavras desconhecidas. Eu as traduzia imediatamente com os dicion\u00e1rios embutidos no leitor, mas notei uma particularidade: as palavras n\u00e3o queriam ser lembradas. Quando eu encontrava essa palavra novamente algumas p\u00e1ginas depois, havia 90% de probabilidade de que eu precisasse traduzir novamente, e assim por diante a cada vez. A conclus\u00e3o que se impunha era que n\u00e3o bastava apenas traduzir as palavras desconhecidas durante a leitura; era preciso fazer algo mais. A solu\u00e7\u00e3o ideal seria incorpor\u00e1-las no dia a dia e come\u00e7ar a us\u00e1-las, mas eu n\u00e3o vivo em um pa\u00eds de l\u00edngua inglesa, o que torna isso pouco prov\u00e1vel. Ent\u00e3o, lembrei-me que um dia li sobre <noindex>Repeti\u00e7\u00e3o espa\u00e7ada<\/noindex>.<\/p>\n<p><\/p>\n<p>O que \u00e9 isso e para que serve? Em resumo, existe uma <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9A%D1%80%D0%B8%D0%B2%D0%B0%D1%8F_%D0%B7%D0%B0%D0%B1%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F\">curva do esquecimento<\/a><\/noindex>, a seguir uma cita\u00e7\u00e3o da Wikip\u00e9dia:<\/p>\n<p><\/p>\n<blockquote><p>J\u00e1 na primeira hora, at\u00e9 60% de toda informa\u00e7\u00e3o recebida \u00e9 esquecida; ap\u00f3s 10 horas de memoriza\u00e7\u00e3o, 35% do que foi estudado permanece na mem\u00f3ria. Depois, o processo de esquecimento ocorre lentamente, e ap\u00f3s 6 dias, cerca de 20% do total de s\u00edlabas inicialmente aprendidas permanece na mem\u00f3ria; a mesma quantidade permanece na mem\u00f3ria ap\u00f3s um m\u00eas.<\/p><\/blockquote>\n<p>E a conclus\u00e3o aqui <\/p>\n<p><\/p>\n<blockquote><p>As conclus\u00f5es que podem ser tiradas com base nesta curva s\u00e3o que para uma memoriza\u00e7\u00e3o eficaz \u00e9 necess\u00e1rio repetir o material aprendido.<\/p><\/blockquote>\n<p>Chegamos ent\u00e3o \u00e0 ideia de <noindex>repeti\u00e7\u00e3o espa\u00e7ada<\/noindex>.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/apps.ankiweb.net\/\">ANKI<\/a><\/noindex> este \u00e9 um programa absolutamente gratuito e de c\u00f3digo aberto que implementa a ideia de repeti\u00e7\u00e3o espa\u00e7ada. Em termos simples, s\u00e3o cart\u00f5es de flash computadorizados, de um lado uma pergunta, do outro a resposta. Como voc\u00ea pode fazer perguntas\/respostas usando apenas <em>html\/css\/javascript<\/em>, pode-se dizer que ele possui verdadeiramente possibilidades ilimitadas. Al\u00e9m disso, \u00e9 extens\u00edvel com plugins espec\u00edficos <noindex><a rel=\"nofollow\" href=\"https:\/\/ankiweb.net\/shared\/addons\/\">plugins<\/a><\/noindex>, e um deles ser\u00e1 muito \u00fatil para n\u00f3s mais adiante.<\/p>\n<p><\/p>\n<p>Criar cart\u00f5es manualmente \u00e9 demorado, tedioso, e com uma grande probabilidade de que, ap\u00f3s um tempo, voc\u00ea desista \u2014 por isso, em algum momento me perguntei se seria poss\u00edvel automatizar esse processo. A resposta \u00e9 sim, \u00e9 poss\u00edvel. E eu fiz isso. Direi de imediato, \u00e9 mais <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Proof_of_concept\">POC (Proof of concept)<\/a><\/noindex>, mas que pode ser usado. Se houver interesse por parte dos usu\u00e1rios e outros desenvolvedores se juntarem, isso pode ser transformado em um produto acabado, que at\u00e9 usu\u00e1rios tecnicamente leigos poder\u00e3o utilizar. No entanto, a utiliza\u00e7\u00e3o da minha ferramenta requer certo conhecimento em programa\u00e7\u00e3o.<\/p>\n<p><\/p>\n<p>Eu leio livros com a ajuda do programa <noindex><a rel=\"nofollow\" href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.neverland.alreader&amp;hl=en\">AIReader<\/a><\/noindex>. Ele tem a possibilidade de conectar dicion\u00e1rios externos e, ao traduzir uma palavra, salva a palavra que voc\u00ea chamou para tradu\u00e7\u00e3o em um arquivo de texto. Agora, resta apenas traduzir essas palavras e criar cart\u00f5es ANKI.<\/p>\n<p><\/p>\n<p>Inicialmente, tentei usar para tradu\u00e7\u00e3o <noindex><a rel=\"nofollow\" href=\"https:\/\/translate.google.com\/\">Google Translate<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.lingvolive.com\/en-us\">Lingvo API<\/a><\/noindex> etc. Mas os servi\u00e7os gratuitos n\u00e3o deram certo. Eu esgotei o limite gratuito ainda durante o processo de desenvolvimento e, al\u00e9m disso, de acordo com os termos da licen\u00e7a, n\u00e3o tinha permiss\u00e3o para armazenar palavras. Em algum momento, percebi que precisava traduzir as palavras por conta pr\u00f3pria. No final, um m\u00f3dulo foi escrito <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/anatoly314\/dsl2html\">dsl2html<\/a><\/noindex> que pode conectar <noindex><a rel=\"nofollow\" href=\"http:\/\/lingvo.helpmax.net\/en\/troubleshooting\/dsl-compiler\/dsl-dictionary-structure\/\">dicion\u00e1rios DSL<\/a><\/noindex> e que sabe como convert\u00ea-los em <em>HTML<\/em> formato. <\/p>\n<p><\/p>\n<p>Aqui est\u00e1 como um artigo de dicion\u00e1rio aparece em *<em>.html<\/em>, minha vers\u00e3o em compara\u00e7\u00e3o com a vers\u00e3o <noindex><a rel=\"nofollow\" href=\"http:\/\/goldendict.org\/\">GoldenDict<\/a><\/noindex><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Duas hist\u00f3rias de como o ANKI pode ajud\u00e1-lo a aprender um idioma estrangeiro e se preparar para entrevistas\" src=\"\/wp-content\/uploads\/2019\/06\/98317e694331c5764fe890827d59e3b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Antes de procurar a palavra nos dicion\u00e1rios conectados, eu a levo \u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9B%D0%B5%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\">forma de dicion\u00e1rio (lem\u00e1tica)<\/a><\/noindex> usando a biblioteca <noindex><a rel=\"nofollow\" href=\"https:\/\/stanfordnlp.github.io\/CoreNLP\/\">Stanford CoreNLP<\/a><\/noindex>. Na verdade, foi por causa dessa biblioteca que comecei a programar em Java e o plano inicial era escrever tudo em Java, mas durante o processo encontrei a biblioteca <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/joeferner\/node-java\">node-java<\/a><\/noindex> com a qual \u00e9 relativamente simples executar c\u00f3digo Java a partir do nodejs, e parte do c\u00f3digo est\u00e1 escrita em JavaScript. Se eu tivesse encontrado esta biblioteca antes, n\u00e3o teria escrito uma \u00fanica linha em Java. Outro projeto secund\u00e1rio que surgiu durante o processo foi a cria\u00e7\u00e3o <noindex><a rel=\"nofollow\" href=\"https:\/\/anatoly314.github.io\/dsl-manual\/\">de um reposit\u00f3rio com a documenta\u00e7\u00e3o DSL<\/a><\/noindex> que foi encontrada na internet no formato *<em>.chm<\/em>, convertida e apresentada de forma leg\u00edvel. Se o autor do arquivo original, conhecido pelo apelido <strong>yozhic<\/strong> estiver vendo este artigo, um grande obrigado pelo trabalho realizado; sem sua documenta\u00e7\u00e3o, provavelmente, nada teria funcionado.<\/p>\n<p><\/p>\n<p>Ent\u00e3o, eu tenho uma palavra em ingl\u00eas, seu artigo de dicion\u00e1rio no formato *<em>.html<\/em>, \u00e9 necess\u00e1rio consolidar tudo, criar artigos ANKI a partir da lista de palavras e inseri-los no banco de dados ANKI. Para isso, foi criado o seguinte projeto <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/anatoly314\/data2anki\">data2anki<\/a><\/noindex>. Ele \u00e9 capaz de receber uma lista de palavras como entrada, traduzir, criar artigos ANKI *<em>.html<\/em> e grav\u00e1-los no banco de dados ANKI. No final do artigo, h\u00e1 instru\u00e7\u00f5es sobre como us\u00e1-lo. Por enquanto, aqui est\u00e1 a segunda hist\u00f3ria onde repeti\u00e7\u00f5es espa\u00e7adas podem ser \u00fateis.<\/p>\n<p><\/p>\n<h2 id=\"istoriya-vtoraya\">Hist\u00f3ria dois.<\/h2>\n<p><\/p>\n<p>Todas as pessoas em busca de uma especialidade mais ou menos qualificada, incluindo programadores, enfrentam a necessidade de se preparar para entrevistas. Muitos conceitos que perguntam nas entrevistas voc\u00ea n\u00e3o utiliza na pr\u00e1tica di\u00e1ria e acabam sendo esquecidos. Ao me preparar para mais uma entrevista, folheando anota\u00e7\u00f5es, livros e guias, percebi que muito tempo e aten\u00e7\u00e3o eram gastos filtrando informa\u00e7\u00f5es que j\u00e1 conhecia, pois nem sempre \u00e9 \u00f3bvio, e \u00e9 necess\u00e1rio ler atentamente para entender o que \u00e9 irrelevante. Quando voc\u00ea chega ao t\u00f3pico que realmente precisa revisar, muitas vezes j\u00e1 est\u00e1 cansado e a qualidade da prepara\u00e7\u00e3o sofre. Em algum momento pensei, por que n\u00e3o usar cart\u00f5es ANKI para isso? Por exemplo, ao fazer anota\u00e7\u00f5es sobre um determinado tema, criar imediatamente um resumo no formato de pergunta-resposta, e ent\u00e3o, na revis\u00e3o, voc\u00ea saber\u00e1 imediatamente se conhece ou n\u00e3o a resposta para aquela pergunta.<\/p>\n<p><\/p>\n<p>O problema surgiu apenas na quest\u00e3o de que digitar perguntas \u00e9 muito demorado e tedioso. Para facilitar o processo, eu <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/anatoly314\/data2anki\">data2anki<\/a><\/noindex> adicionei ao projeto a funcionalidade de converter <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Markdown\">markdown<\/a><\/noindex> Texto no cart\u00e3o ANKI. Tudo o que voc\u00ea precisa fazer \u00e9 escrever um \u00fanico arquivo grande, no qual perguntas e respostas ser\u00e3o marcadas com uma sequ\u00eancia de s\u00edmbolos previamente acordada, de modo que o parser entenda onde est\u00e1 a pergunta e onde est\u00e1 a resposta.<\/p>\n<p><\/p>\n<p>Depois que este arquivo for criado, voc\u00ea executa o data2anki e ele cria os cart\u00f5es ANKI. O arquivo original \u00e9 f\u00e1cil de editar e compartilhar, basta excluir o cart\u00e3o correspondente(s) e executar o programa novamente, e uma nova vers\u00e3o ser\u00e1 criada.<\/p>\n<p><\/p>\n<h2 id=\"ustanovka-i-polzovaniyu\">Instala\u00e7\u00e3o e uso<\/h2>\n<p><\/p>\n<ol>\n<li>\n<p>Instala\u00e7\u00e3o do ANKI + AnkiConnect<\/p>\n<p><\/p>\n<ol>\n<li>Baixe o ANKI aqui: <noindex><a rel=\"nofollow\" href=\"https:\/\/apps.ankiweb.net\/\">https:\/\/apps.ankiweb.net\/<\/a><\/noindex><\/li>\n<li>Instale o plugin AnkiConnect: <noindex><a rel=\"nofollow\" href=\"https:\/\/ankiweb.net\/shared\/info\/2055492159\">https:\/\/ankiweb.net\/shared\/info\/2055492159<\/a><\/noindex><\/li>\n<\/ol>\n<p>\n<\/li>\n<li>\n<p>Instala\u00e7\u00e3o <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/anatoly314\/data2anki\">data2anki<\/a><\/noindex><\/p>\n<p><\/p>\n<ol>\n<li>Baixe <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/anatoly314\/data2anki\">data2anki<\/a><\/noindex> do reposit\u00f3rio github\n<pre><code class=\"plaintext\">git clone https:\/\/github.com\/anatoly314\/data2anki<\/code><\/pre>\n<\/li>\n<li>Instale as depend\u00eancias\n<pre><code class=\"plaintext\">cd data2anki &amp;&amp; npm install<\/code><\/pre>\n<\/li>\n<li>Baixe as depend\u00eancias java <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/anatoly314\/data2anki\/releases\/download\/0.1.0\/jar-dependencies.zip\">https:\/\/github.com\/anatoly314\/data2anki\/releases\/download\/0.1.0\/jar-dependencies.zip<\/a><\/noindex><\/li>\n<li>Extraia <strong>jar-dependencies.zip<\/strong> e coloque seu conte\u00fado em <strong>data2anki\/java\/jars<\/strong><\/li>\n<\/ol>\n<p>\n<\/li>\n<li>\n<p>Uso para tradu\u00e7\u00e3o de palavras:<\/p>\n<p><\/p>\n<ol>\n<li>\n<p>No arquivo <strong>data2anki\/config.json<\/strong>:<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>na chave <strong>modo<\/strong> escreva o valor <strong>dsl2anki<\/strong><\/p>\n<p>\n<\/li>\n<li>\n<p>na chave <strong>modules.dsl.anki.deckName<\/strong> e <strong>modules.dsl.anki.modelName<\/strong> escreva, respectivamente, <noindex><a rel=\"nofollow\" href=\"https:\/\/apps.ankiweb.net\/docs\/manual.html#decks\">Deck Name<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/apps.ankiweb.net\/docs\/manual.html#note-types\">Model Name<\/a><\/noindex> (j\u00e1 devem estar criados antes de criar os cart\u00f5es). Atualmente, apenas o modelo do tipo <strong>Basic<\/strong>:<\/p>\n<p><\/p>\n<blockquote><p>Possui campos Front e Back, e criar\u00e1 um cart\u00e3o. O texto que voc\u00ea inserir no Front aparecer\u00e1 na frente do cart\u00e3o, e o texto que voc\u00ea inserir no Back aparecer\u00e1 na parte de tr\u00e1s do cart\u00e3o. <\/p><\/blockquote>\n<p>onde a palavra original \u00e9 <em>Front field<\/em>, e a tradu\u00e7\u00e3o estar\u00e1 em <em>Back field<\/em>. <\/p>\n<p><\/p>\n<p>N\u00e3o h\u00e1 nenhum problema em adicionar suporte <strong>Basic (e cart\u00e3o reverso)<\/strong>, onde tanto a palavra quanto a tradu\u00e7\u00e3o ter\u00e3o um cart\u00e3o reverso, onde pela tradu\u00e7\u00e3o ser\u00e1 necess\u00e1rio lembrar a palavra original. S\u00f3 \u00e9 necess\u00e1rio ter tempo e vontade.<\/p>\n<p>\n<\/li>\n<li>\n<p>na chave <strong>modules.dsl.dictionariesPath<\/strong> escreva um array com os *<em>.dsl<\/em> dicion\u00e1rios conectados. Cada dicion\u00e1rio conectado \u00e9 um diret\u00f3rio contendo os arquivos do dicion\u00e1rio de acordo com o formato: <noindex><a rel=\"nofollow\" href=\"https:\/\/anatoly314.github.io\/dsl-manual\/#dict.html\">Estrutura do dicion\u00e1rio DSL<br \/>\n<\/a><\/noindex><\/p>\n<p>\n<\/li>\n<li>\n<p>na chave <strong>modules.dsl.wordToTranslatePath<\/strong> escreva o caminho para a lista de palavras que voc\u00ea deseja traduzir.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Execute com o aplicativo ANKI em funcionamento \n<pre><code class=\"plaintext\">node data2ankiindex.js<\/code><\/pre>\n<\/li>\n<li>PROFIT!!!<\/li>\n<\/ol>\n<p>\n<\/li>\n<li>\n<p>Uso para cria\u00e7\u00e3o de cart\u00f5es a partir de markdown<\/p>\n<p><\/p>\n<ol>\n<li>\n<p>No arquivo <strong>data2anki\/config.json<\/strong>:<\/p>\n<p><\/p>\n<ul>\n<li>na chave <strong>modo<\/strong> escreva o valor <strong>markdown2anki<\/strong><\/li>\n<li>na chave <strong>modules.markdown.anki.deckName<\/strong> e <strong>modules.dsl.anki.modelName<\/strong> escreva, respectivamente, <noindex><a rel=\"nofollow\" href=\"https:\/\/apps.ankiweb.net\/docs\/manual.html#decks\">Deck Name<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"https:\/\/apps.ankiweb.net\/docs\/manual.html#note-types\">Model Name<\/a><\/noindex> (j\u00e1 devem estar criados antes de criar os cart\u00f5es). Para <strong>markdown2anki<\/strong> modo, apenas o modelo do tipo \u00e9 suportado <strong>Basic<\/strong>.<\/li>\n<li>\n<p>na chave <strong>modules.markdown.selectors.startQuestionSelectors<\/strong> e <strong>modules.markdown.selectors.startAnswerSelectors<\/strong> escreva os seletores que voc\u00ea usa para marcar o in\u00edcio da pergunta e resposta, respectivamente. A pr\u00f3pria linha com o seletor n\u00e3o ser\u00e1 analisada e n\u00e3o aparecer\u00e1 no cart\u00e3o; o parser come\u00e7ar\u00e1 a trabalhar na pr\u00f3xima linha. <\/p>\n<p><\/p>\n<h5 id=\"naprimer-vot-eta-kartochka-voprosotvet\">Por exemplo, este cart\u00e3o pergunta\/resposta:<\/h5>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Duas hist\u00f3rias de como o ANKI pode ajud\u00e1-lo a aprender um idioma estrangeiro e se preparar para entrevistas\" src=\"\/wp-content\/uploads\/2019\/06\/1d32d4c8b44e62027350031090405dd2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h5 id=\"budet-vyglyadet-v-markdown-sleduyuschim-obrazom\">Aparecer\u00e1 no markdown da seguinte forma:<\/h5>\n<pre>\n#QUESTION#\n## Question 5. Write a mul function which will work properly when invoked with following syntax.\n\n```javascript\nconsole.log(mul(2)(3)(4)); \/\/ output : 24\nconsole.log(mul(4)(3)(4)); \/\/ output : 48\n```\n#ANSWER#\nBelow is the code followed by the explanation of how it works:\n\n```javascript\nfunction mul (x) {\n  return function (y) { \/\/ anonymous function\n    return function (z) { \/\/ anonymous function\n      return x * y * z;\n    };\n  };\n}\n```\n\nHere the `mul` function accepts the first argument and returns the anonymous function which takes the second parameter and returns the anonymous function which takes the third parameter and returns the multiplication of arguments which is being passed in successive\n\nIn Javascript function defined inside has access to outer function variable and function is the first class object so it can be returned by the function as well and passed as an argument in another function.\n- A function is an instance of the Object type\n- A function can have properties and has a link back to its constructor method\n- A function can be stored as variable\n- A function can be pass as a parameter to another function\n- A function can be returned from another function\n<\/pre>\n<blockquote><p>Exemplo retirado de aqui: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ganqqwerty\/123-Essential-JavaScript-Interview-Questions\">123-Perguntas-de-Entrevista-JavaScript<\/a><\/noindex><\/p><\/blockquote>\n<p>Ainda h\u00e1 um arquivo com exemplos na pasta do projeto <code>examples\/markdown2anki-example.md<\/code><\/p>\n<p>\n<\/li>\n<li>na chave <strong>modules.markdown.pathToFile<\/strong><br \/>\ninsira o caminho para o arquivo onde est\u00e1 *<em>.md<\/em> arquivo com perguntas\/respostas<\/li>\n<\/ul>\n<p>\n<\/li>\n<li>Execute com o aplicativo ANKI em funcionamento\n<pre><code class=\"plaintext\">node data2ankiindex.js<\/code><\/pre>\n<\/li>\n<li>PROFIT!!!<\/li>\n<\/ol>\n<p>\n<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"vot-tak-eto-vyglyadit-na-mobilnom-telefone\">Assim \u00e9 como aparece no celular:<\/h4>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"D35VtcTtxrs\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/D35VtcTtxrs\/hqdefault.jpg\" alt=\"Por que no hosting comum a administra\u00e7\u00e3o do PrestaShop \u00e9 lenta, e no seu n\u00e3o \u00e9?\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h2 id=\"rezultat\">Resultado<\/h2>\n<p><\/p>\n<p>Os cart\u00f5es ANKI gerados na vers\u00e3o desktop sincronizam perfeitamente com a nuvem ANKI (gratuito at\u00e9 100mb), depois disso, voc\u00ea pode us\u00e1-los em qualquer lugar. Existem clientes para Android e iPhone, al\u00e9m de poder acess\u00e1-los no navegador. Portanto, se voc\u00ea tem tempo livre, em vez de rolar sem destino no Facebook ou ver gatos no Instagram, pode aprender algo novo. <\/p>\n<p><\/p>\n<h2 id=\"epilog\">Ep\u00edlogo<\/h2>\n<p><\/p>\n<p>Como j\u00e1 mencionei, isso \u00e9 mais um POC funcional do que um produto finalizado. Aproximadamente 30% do padr\u00e3o do parser DSL n\u00e3o est\u00e1 implementado, e portanto, <noindex><a rel=\"nofollow\" href=\"https:\/\/anatoly314.github.io\/dsl-manual\/#tag_service.html#alt\">por exemplo, nem todos os artigos de dicion\u00e1rio dispon\u00edveis podem ser encontrados<\/a><\/noindex>, tamb\u00e9m h\u00e1 a ideia de reescrev\u00ea-lo em <em>JavaScript<\/em>, pois queremos &#171;consistency&#187;, al\u00e9m de que, atualmente, ele n\u00e3o est\u00e1 muito otimizado. Neste momento, o parser constr\u00f3i uma \u00e1rvore, o que, na minha opini\u00e3o, \u00e9 desnecess\u00e1rio e complica o c\u00f3digo. Em <strong>markdown2anki<\/strong> modo de imagem, n\u00e3o s\u00e3o analisados. Vou tentar ir desenvolvendo aos poucos, mas como estou escrevendo para mim mesmo, vou priorizar resolver as coisas que achar problem\u00e1ticas, mas se algu\u00e9m quiser ajudar, fica \u00e0 vontade. Se houver perguntas sobre o programa, ficarei feliz em ajudar atrav\u00e9s de quest\u00f5es abertas nos projetos correspondentes. Outras cr\u00edticas e sugest\u00f5es podem ser deixadas aqui. Espero que este projeto seja \u00fatil para algu\u00e9m.<\/p>\n<p><\/p>\n<p>P.S. Se notar erros (que, infelizmente, existem), entre em contato, eu corrigirei tudo.<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/454236\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042f \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0447\u0438\u0442\u0430\u043b, \u0447\u0442\u043e \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u041f\u043e\u0447\u0435\u043c\u0443? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438 \u0442\u0440\u0443\u0434\u043e\u043b\u044e\u0431\u0438\u0432\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e, \u043e\u043d \u043f\u043e\u0439\u0434\u0435\u0442 \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u0442. \u0410 \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442 \u0432 2-3 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043d\u043e \u043d\u0430\u043f\u0438\u0448\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u2014 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430 \u043d\u0435\u0433\u043e. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u043d\u0430 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043e \u043d\u0435\u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043d\u043e \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26237,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-34845","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042f \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0447\u0438\u0442\u0430\u043b, \u0447\u0442\u043e \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u041f\u043e\u0447\u0435\u043c\u0443? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438 \u0442\u0440\u0443\u0434\u043e\u043b\u044e\u0431\u0438\u0432\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e, \u043e\u043d \u043f\u043e\u0439\u0434\u0435\u0442 \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u0442.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/news\/dve-istorii-kak-anki-mozhet-vam-pomoch-vyuchit-inostrannyj-yazyk-i-podgotovitsya-k-intervyu\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0414\u0432\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043a\u0430\u043a ANKI \u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u043f\u043e\u043c\u043e\u0447\u044c \u0432\u044b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043a \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042f \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0447\u0438\u0442\u0430\u043b, \u0447\u0442\u043e \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u041f\u043e\u0447\u0435\u043c\u0443? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438 \u0442\u0440\u0443\u0434\u043e\u043b\u044e\u0431\u0438\u0432\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e, \u043e\u043d \u043f\u043e\u0439\u0434\u0435\u0442 \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/news\/dve-istorii-kak-anki-mozhet-vam-pomoch-vyuchit-inostrannyj-yazyk-i-podgotovitsya-k-intervyu\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:00:43+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:00:43+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Duas hist\u00f3rias de como ANKI pode te ajudar a aprender um idioma estrangeiro e se preparar para entrevistas | ProHoster","description":"Sempre considerei que um programador pregui\u00e7oso \u00e9 um bom programador. Por qu\u00ea? Porque pe\u00e7a a um trabalhador para fazer algo, ele ir\u00e1 e far\u00e1.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/news\/dve-istorii-kak-anki-mozhet-vam-pomoch-vyuchit-inostrannyj-yazyk-i-podgotovitsya-k-intervyu","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0414\u0432\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043a\u0430\u043a ANKI \u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u043f\u043e\u043c\u043e\u0447\u044c \u0432\u044b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043a \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e | ProHoster","og:description":"\u042f \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0447\u0438\u0442\u0430\u043b, \u0447\u0442\u043e \u043b\u0435\u043d\u0438\u0432\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u041f\u043e\u0447\u0435\u043c\u0443? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0441\u0438 \u0442\u0440\u0443\u0434\u043e\u043b\u044e\u0431\u0438\u0432\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e, \u043e\u043d \u043f\u043e\u0439\u0434\u0435\u0442 \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u0442.","og:url":"https:\/\/prohoster.info\/pt\/blog\/news\/dve-istorii-kak-anki-mozhet-vam-pomoch-vyuchit-inostrannyj-yazyk-i-podgotovitsya-k-intervyu","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:00:43+00:00","article:modified_time":"2019-10-31T19:00:43+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34845","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 20:49:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:14:05","updated":"2026-01-21 20:49:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/34845","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=34845"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/34845\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/26237"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=34845"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=34845"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=34845"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}