Advertisement
iamakulov

Untitled

Sep 20th, 2018
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.59 KB | None | 0 0
  1. *************************** 9. row ***************************
  2. id: 5ba14fe9cd4b330001500cde
  3. uuid: 04687a0d-66da-4715-aedf-459cca0f8b44
  4. title: Ser� que seus coment�rios est�o deixando seu c�digo pior?
  5. slug: sera-que-seus-comentarios-estao-deixando-seu-codigo-pior
  6. mobiledoc: {"version":"0.3.1","markups":[],"atoms":[],"cards":[["card-markdown",{"cardName":"card-markdown","markdown":"<p>Programador, voc� tem o costume de comentar seu c�digo de forma meticulosa e detalhada?�</p><p>Como a maioria das pessoas, voc� respondeu (ou ao menos gostaria de responder) SIM!</p><p>Mas ser� que seus coment�rios de c�digo realmente adicionam valor, ou est�o deixando seu c�digo pior?</p><p>Ficou curioso de como seus coment�rios podem piorar seus c�digos? Ent�o acompanhe o post que preparamos hoje!</p><h2>Nomear coisas � dif�cil</h2><p>Sobre a nossa profiss�o,<a href=\"https://martinfowler.com/bliki/TwoHardThings.html\"> Phil Kalton disse</a>:�</p><blockquote>S� existem duas coisas dif�ceis em Ci�ncia da Computa��o: invalida��o de cache e escolher nomes das coisas.�</blockquote><p>Como supostamente temos c�rebros anal�ticos e gostamos de problemas complexos, focamos sempre na primeira dificuldade. Mas clareza na comunica��o nunca � demais quando trabalhamos em bases de c�digo grandes com outros desenvolvedores.</p><p><strong>Dar nomes claros e objetivos para fun��es, par�metros e vari�veis � dif�cil.</strong></p><p>Tal falta de clareza, em alguns casos, � contornada com a utiliza��o de documenta��o � na forma de coment�rios <em>inline</em>. Por�m nem sempre mais documenta��o � melhor. �s vezes essa documenta��o � redundante, sintoma de problemas de clareza no seu c�digo, ou at� uma desculpa para n�o melhorar o c�digo.</p><p>Hoje em dia v�rias comunidades de desenvolvedores consideram que o antigo objetivo de comentar o m�ximo poss�vel � uma pr�tica obsoleta e at� danosa. Por exemplo, um<a href=\"https://github.com/bbatsov/ruby-style-guide#comments\"> dos mais populares guias de estilo de Ruby</a> postula que:</p><blockquote>O bom c�digo � sua pr�pria melhor documenta��o. Quando voc�s estiver prestes a adicionar um comentrio, se pergunte, \"Como eu posso melhorar o c�digo para que o este coment�rio n�o seja necess�rio?\" Melhore o c�digo e ent�o o documente para torna-lo ainda mais claro.Steve McConnell</blockquote><h3>Um exemplo</h3><p>Veja a fun��o abaixo, que era utilizada internamente em nosso produto.</p><h2><pre>/*\n Function to hide element\n stop -&gt; Minimum height for hiding\n el -&gt; Target element to be hidden\n Info: The class 'hidden' is used to hide the element\n*/\nfunction hideElement(stop, el) {\n if (window.pageYOffset &gt; stop) {\n el.className.add(\"hidden\");\n } else {\n el.classList.remove(\"hidden\");\n }\n}</pre></h2><p>Esses coment�rios aparentemente inofensivos s�o sintomas de problemas maiores com o nome das fun��es e seus par�metros.�</p><p>Vamos ver quais s�o estes problemas?</p><h3>1. Redund�ncia no nome da fun��o</h3><h2><pre>// Function to hide element</pre></h2><p>Perceba que a linha acima n�o faz nada mais do que repetir o a primeira linha de c�digo da fun��o, de forma quase literal:</p><h2><pre>function hideElement(stop, el) {</pre></h2><p>J� essa linha de c�digo n�o cont�m nenhuma ambiguidade quanto a seu objetivo. Sendo assim, � poss�vel remover o trecho de coment�rio sem nenhum preju�zo para a documenta��o.Existe um segundo problema com o nome desta fun��o, mas falaremos dele mais tarde.</p><h3>2. Nomes de par�metro pouco descritivos</h3><h2><pre>stop -&gt; Minimum height for hiding\nel -&gt; Target element to be hidden</pre></h2><p>Nesse caso, o nome dos par�metros � bastante vago. O que � <strong><em>el</em></strong>? E esse <strong><em>stop</em></strong>? � um verbo no imperativo, ou um substantivo?�</p><p>Esse tipo de ambiguidade atrapalha a utiliza��o da fun��o, e �s vezes exige que o programador leia seu c�digo inteiro antes de utiliz�-la.</p><p>Lendo os coment�rios podemos observar que � bem f�cil resolver isso, j� que eles pr�prios indicam nomes melhores.�</p><p>O par�metros <strong><em>stop</em></strong> poderia ser <strong><em>minHeight</em></strong>.�</p><p>J� o par�metros <strong><em>el</em></strong> poderia se chamar <strong><em>targetElement</em></strong>.</p><p>Essas duas pequenas mudan�as n�o ajudariam apenas a remover os coment�rios redundantes, como melhoraram a leitura da parte interna da fun��o.</p><h3><strong>3. Necessidade de informa��o adicional</strong></h3><h2><pre>Info: The class 'hidden' is used to hide the element</pre></h2><p>Essa pequena informa��o � um sintoma de outros dois problemas. Primeiramente, por repetir uma informa��o que j� existe dentro da fun��o � o que quebra o princ�pio DRY.</p><p>A string <em>hidden </em>aparece duas vezes dentro do nosso c�digo. O segundo problema � que essa string � similar a um<a href=\"https://pt.wikipedia.org/wiki/N%C3%BAmero_m%C3%A1gico_(inform%C3%A1tica)\"> n�mero m�gico</a>, e aparece no nosso c�digo e no coment�rio sem um contexto e sem um nome auto-explicativo.</p><p>Como j� estamos utilizando ES6, a solu��o mais pr�tica foi refatorar esta fun��o e utilizar par�metros opcionais.�</p><p>Isso permitiu tanto que a fun��o se tornasse auto-document�vel, quanto trouxe esta flexibiliza��o. Veja como ficou:</p><h2><pre>function hideElement(minHeight, targetElement, hidingClass = \"hidden\") {\n if (window.pageYOffset &gt; minHeight) {\n el.className = hidingClass;\n } else {\n el.classList.remove(hidingClass);\n }\n}</pre></h2><h3><strong>4. Omiss�es na documenta��o</strong></h3><p>Acredite, existe um problema ainda mais grave aqui! O nome da fun��o n�o � fiel a seu comportamento.</p><p>Ao ler o c�digo, � poss�vel ver que ela n�o est� simplesmente \"ocultando o elemento\" � como o nome indica. Ela apenas aplica a classe \"hidden\" quando o <em>offset y</em> da p�gina � maior que o valor <em>stop</em>, e o soltando quando o valor � igual ou menor.</p><p>A �nica maneira de obter-se esta informa��o � lendo o corpo da fun��o e se deparando com a linha com a condi��o <em>window.pageYOffset &gt; minHeight</em>.</p><p>A solu��o para o problema � dar um nome mais descritivo, que realmente captura a funcionalidade.</p><p>No fim das contas, nosso c�digo ficou assim:</p><h2><pre>function hideElementAfterHeight(minHeight, targetElement, hidingClass = \"hidden\") {\n if (window.pageYOffset &gt; minHeight) {\n el.className.add(hidingClass);\n } else {\n el.classList.remove(hidingClass);\n }\n}</pre></h2><h3>O que aprendemos?</h3><p>O objetivo deste artigo foi demonstrar o lado nocivo dos coment�rios de c�digo. Come�amos o artigo com uma fun��o simples, por�m com nomes que dificultavam sua usabilidade, e a transformamos em um trecho de c�digo que dispensa a documenta��o adicional. Qual � a �moral da hist�ria�?</p><p>O bom c�digo n�o deve focar apenas na performance de execu��o, mas tamb�m em sua simplicidade, legibilidade e facilidade de manuten��o por outros programadores.</p><p>E o objetivo dos coment�rios de c�digo n�o deve ser simplesmente repetir o que j� estamos dizendo no c�digo, ou mascarar problemas de legibilidade do mesmo.</p><p>E a�, este conte�do te ajudou? Acha que pode ajudar mais algu�m? Ent�o compartilhe nas suas redes sociais!</p><p></p>"}]],"sections":[[10,0]]}
  7. html: <p>Programador, voc� tem o costume de comentar seu c�digo de forma meticulosa e detalhada?�</p><p>Como a maioria das pessoas, voc� respondeu (ou ao menos gostaria de responder) SIM!</p><p>Mas ser� que seus coment�rios de c�digo realmente adicionam valor, ou est�o deixando seu c�digo pior?</p><p>Ficou curioso de como seus coment�rios podem piorar seus c�digos? Ent�o acompanhe o post que preparamos hoje!</p><h2>Nomear coisas � dif�cil</h2><p>Sobre a nossa profiss�o,<a href="https://martinfowler.com/bliki/TwoHardThings.html"> Phil Kalton disse</a>:�</p><blockquote>S� existem duas coisas dif�ceis em Ci�ncia da Computa��o: invalida��o de cache e escolher nomes das coisas.�</blockquote><p>Como supostamente temos c�rebros anal�ticos e gostamos de problemas complexos, focamos sempre na primeira dificuldade. Mas clareza na comunica��o nunca � demais quando trabalhamos em bases de c�digo grandes com outros desenvolvedores.</p><p><strong>Dar nomes claros e objetivos para fun��es, par�metros e vari�veis � dif�cil.</strong></p><p>Tal falta de clareza, em alguns casos, � contornada com a utiliza��o de documenta��o � na forma de coment�rios <em>inline</em>. Por�m nem sempre mais documenta��o � melhor. �s vezes essa documenta��o � redundante, sintoma de problemas de clareza no seu c�digo, ou at� uma desculpa para n�o melhorar o c�digo.</p><p>Hoje em dia v�rias comunidades de desenvolvedores consideram que o antigo objetivo de comentar o m�ximo poss�vel � uma pr�tica obsoleta e at� danosa. Por exemplo, um<a href="https://github.com/bbatsov/ruby-style-guide#comments"> dos mais populares guias de estilo de Ruby</a> postula que:</p><blockquote>O bom c�digo � sua pr�pria melhor documenta��o. Quando voc�s estiver prestes a adicionar um comentrio, se pergunte, "Como eu posso melhorar o c�digo para que o este coment�rio n�o seja necess�rio?" Melhore o c�digo e ent�o o documente para torna-lo ainda mais claro.Steve McConnell</blockquote><h3>Um exemplo</h3><p>Veja a fun��o abaixo, que era utilizada internamente em nosso produto.</p><h2><pre>/*
  8. Function to hide element
  9. stop -&gt; Minimum height for hiding
  10. el -&gt; Target element to be hidden
  11. Info: The class 'hidden' is used to hide the element
  12. */
  13. function hideElement(stop, el) {
  14. if (window.pageYOffset &gt; stop) {
  15. el.className.add("hidden");
  16. } else {
  17. el.classList.remove("hidden");
  18. }
  19. }</pre></h2><p>Esses coment�rios aparentemente inofensivos s�o sintomas de problemas maiores com o nome das fun��es e seus par�metros.�</p><p>Vamos ver quais s�o estes problemas?</p><h3>1. Redund�ncia no nome da fun��o</h3><h2><pre>// Function to hide element</pre></h2><p>Perceba que a linha acima n�o faz nada mais do que repetir o a primeira linha de c�digo da fun��o, de forma quase literal:</p><h2><pre>function hideElement(stop, el) {</pre></h2><p>J� essa linha de c�digo n�o cont�m nenhuma ambiguidade quanto a seu objetivo. Sendo assim, � poss�vel remover o trecho de coment�rio sem nenhum preju�zo para a documenta��o.Existe um segundo problema com o nome desta fun��o, mas falaremos dele mais tarde.</p><h3>2. Nomes de par�metro pouco descritivos</h3><h2><pre>stop -&gt; Minimum height for hiding
  20. el -&gt; Target element to be hidden</pre></h2><p>Nesse caso, o nome dos par�metros � bastante vago. O que � <strong><em>el</em></strong>? E esse <strong><em>stop</em></strong>? � um verbo no imperativo, ou um substantivo?�</p><p>Esse tipo de ambiguidade atrapalha a utiliza��o da fun��o, e �s vezes exige que o programador leia seu c�digo inteiro antes de utiliz�-la.</p><p>Lendo os coment�rios podemos observar que � bem f�cil resolver isso, j� que eles pr�prios indicam nomes melhores.�</p><p>O par�metros <strong><em>stop</em></strong> poderia ser <strong><em>minHeight</em></strong>.�</p><p>J� o par�metros <strong><em>el</em></strong> poderia se chamar <strong><em>targetElement</em></strong>.</p><p>Essas duas pequenas mudan�as n�o ajudariam apenas a remover os coment�rios redundantes, como melhoraram a leitura da parte interna da fun��o.</p><h3><strong>3. Necessidade de informa��o adicional</strong></h3><h2><pre>Info: The class 'hidden' is used to hide the element</pre></h2><p>Essa pequena informa��o � um sintoma de outros dois problemas. Primeiramente, por repetir uma informa��o que j� existe dentro da fun��o � o que quebra o princ�pio DRY.</p><p>A string <em>hidden </em>aparece duas vezes dentro do nosso c�digo. O segundo problema � que essa string � similar a um<a href="https://pt.wikipedia.org/wiki/N%C3%BAmero_m%C3%A1gico_(inform%C3%A1tica)"> n�mero m�gico</a>, e aparece no nosso c�digo e no coment�rio sem um contexto e sem um nome auto-explicativo.</p><p>Como j� estamos utilizando ES6, a solu��o mais pr�tica foi refatorar esta fun��o e utilizar par�metros opcionais.�</p><p>Isso permitiu tanto que a fun��o se tornasse auto-document�vel, quanto trouxe esta flexibiliza��o. Veja como ficou:</p><h2><pre>function hideElement(minHeight, targetElement, hidingClass = "hidden") {
  21. if (window.pageYOffset &gt; minHeight) {
  22. el.className = hidingClass;
  23. } else {
  24. el.classList.remove(hidingClass);
  25. }
  26. }</pre></h2><h3><strong>4. Omiss�es na documenta��o</strong></h3><p>Acredite, existe um problema ainda mais grave aqui! O nome da fun��o n�o � fiel a seu comportamento.</p><p>Ao ler o c�digo, � poss�vel ver que ela n�o est� simplesmente "ocultando o elemento" � como o nome indica. Ela apenas aplica a classe "hidden" quando o <em>offset y</em> da p�gina � maior que o valor <em>stop</em>, e o soltando quando o valor � igual ou menor.</p><p>A �nica maneira de obter-se esta informa��o � lendo o corpo da fun��o e se deparando com a linha com a condi��o <em>window.pageYOffset &gt; minHeight</em>.</p><p>A solu��o para o problema � dar um nome mais descritivo, que realmente captura a funcionalidade.</p><p>No fim das contas, nosso c�digo ficou assim:</p><h2><pre>function hideElementAfterHeight(minHeight, targetElement, hidingClass = "hidden") {
  27. if (window.pageYOffset &gt; minHeight) {
  28. el.className.add(hidingClass);
  29. } else {
  30. el.classList.remove(hidingClass);
  31. }
  32. }</pre></h2><h3>O que aprendemos?</h3><p>O objetivo deste artigo foi demonstrar o lado nocivo dos coment�rios de c�digo. Come�amos o artigo com uma fun��o simples, por�m com nomes que dificultavam sua usabilidade, e a transformamos em um trecho de c�digo que dispensa a documenta��o adicional. Qual � a �moral da hist�ria�?</p><p>O bom c�digo n�o deve focar apenas na performance de execu��o, mas tamb�m em sua simplicidade, legibilidade e facilidade de manuten��o por outros programadores.</p><p>E o objetivo dos coment�rios de c�digo n�o deve ser simplesmente repetir o que j� estamos dizendo no c�digo, ou mascarar problemas de legibilidade do mesmo.</p><p>E a�, este conte�do te ajudou? Acha que pode ajudar mais algu�m? Ent�o compartilhe nas suas redes sociais!</p><p></p>
  33. comment_id: 5ba14fe9cd4b330001500cde
  34. plaintext: Programador, voc� tem o costume de comentar seu c�digo de forma meticulosa e
  35. detalhada?
  36.  
  37. Como a maioria das pessoas, voc� respondeu (ou ao menos gostaria de responder)
  38. SIM!
  39.  
  40. Mas ser� que seus coment�rios de c�digo realmente adicionam valor, ou est�o
  41. deixando seu c�digo pior?
  42.  
  43. Ficou curioso de como seus coment�rios podem piorar seus c�digos? Ent�o
  44. acompanhe o post que preparamos hoje!
  45.  
  46. Nomear coisas � dif�cil
  47. Sobre a nossa profiss�o, Phil Kalton disse
  48. [https://martinfowler.com/bliki/TwoHardThings.html]:
  49.  
  50. S� existem duas coisas dif�ceis em Ci�ncia da Computa��o: invalida��o de cache e
  51. escolher nomes das coisas.Como supostamente temos c�rebros anal�ticos e gostamos
  52. de problemas complexos, focamos sempre na primeira dificuldade. Mas clareza na
  53. comunica��o nunca � demais quando trabalhamos em bases de c�digo grandes com
  54. outros desenvolvedores.
  55.  
  56. Dar nomes claros e objetivos para fun��es, par�metros e vari�veis � dif�cil.
  57.  
  58. Tal falta de clareza, em alguns casos, � contornada com a utiliza��o de
  59. documenta��o � na forma de coment�rios inline. Por�m nem sempre mais
  60. documenta��o � melhor. �s vezes essa documenta��o � redundante, sintoma de
  61. problemas de clareza no seu c�digo, ou at� uma desculpa para n�o melhorar o
  62. c�digo.
  63.  
  64. Hoje em dia v�rias comunidades de desenvolvedores consideram que o antigo
  65. objetivo de comentar o m�ximo poss�vel � uma pr�tica obsoleta e at� danosa. Por
  66. exemplo, um dos mais populares guias de estilo de Ruby postula que:
  67.  
  68. O bom c�digo � sua pr�pria melhor documenta��o. Quando voc�s estiver prestes a
  69. adicionar um comentrio, se pergunte, "Como eu posso melhorar o c�digo para que o
  70. este coment�rio n�o seja necess�rio?" Melhore o c�digo e ent�o o documente para
  71. torna-lo ainda mais claro.Steve McConnellUm exemplo
  72. Veja a fun��o abaixo, que era utilizada internamente em nosso produto.
  73.  
  74. /*
  75. Function to hide element
  76. stop -> Minimum height for hiding
  77. el -> Target element to be hidden
  78. Info: The class 'hidden' is used to hide the element
  79. */
  80. function hideElement(stop, el) {
  81. if (window.pageYOffset > stop) {
  82. el.className.add("hidden");
  83. } else {
  84. el.classList.remove("hidden");
  85. }
  86. }
  87.  
  88.  
  89. Esses coment�rios aparentemente inofensivos s�o sintomas de problemas maiores
  90. com o nome das fun��es e seus par�metros.
  91.  
  92. Vamos ver quais s�o estes problemas?
  93.  
  94. 1. Redund�ncia no nome da fun��o
  95. // Function to hide element
  96.  
  97.  
  98. Perceba que a linha acima n�o faz nada mais do que repetir o a primeira linha de
  99. c�digo da fun��o, de forma quase literal:
  100.  
  101. function hideElement(stop, el) {
  102.  
  103.  
  104. J� essa linha de c�digo n�o cont�m nenhuma ambiguidade quanto a seu objetivo.
  105. Sendo assim, � poss�vel remover o trecho de coment�rio sem nenhum preju�zo para
  106. a documenta��o.Existe um segundo problema com o nome desta fun��o, mas falaremos
  107. dele mais tarde.
  108.  
  109. 2. Nomes de par�metro pouco descritivos
  110. stop -> Minimum height for hiding
  111. el -> Target element to be hidden
  112.  
  113.  
  114. Nesse caso, o nome dos par�metros � bastante vago. O que � el? E esse stop? � um
  115. verbo no imperativo, ou um substantivo?
  116.  
  117. Esse tipo de ambiguidade atrapalha a utiliza��o da fun��o, e �s vezes exige que
  118. o programador leia seu c�digo inteiro antes de utiliz�-la.
  119.  
  120. Lendo os coment�rios podemos observar que � bem f�cil resolver isso, j� que eles
  121. pr�prios indicam nomes melhores.
  122.  
  123. O par�metros stop poderia ser minHeight.
  124.  
  125. J� o par�metros el poderia se chamar targetElement.
  126.  
  127. Essas duas pequenas mudan�as n�o ajudariam apenas a remover os coment�rios
  128. redundantes, como melhoraram a leitura da parte interna da fun��o.
  129.  
  130. 3. Necessidade de informa��o adicional
  131. Info: The class 'hidden' is used to hide the element
  132.  
  133.  
  134. Essa pequena informa��o � um sintoma de outros dois problemas. Primeiramente,
  135. por repetir uma informa��o que j� existe dentro da fun��o � o que quebra o
  136. princ�pio DRY.
  137.  
  138. A string hidden aparece duas vezes dentro do nosso c�digo. O segundo problema �
  139. que essa string � similar a um n�mero m�gico
  140. [https://pt.wikipedia.org/wiki/N%C3%BAmero_m%C3%A1gico_(inform%C3%A1tica)], e
  141. aparece no nosso c�digo e no coment�rio sem um contexto e sem um nome
  142. auto-explicativo.
  143.  
  144. Como j� estamos utilizando ES6, a solu��o mais pr�tica foi refatorar esta fun��o
  145. e utilizar par�metros opcionais.
  146.  
  147. Isso permitiu tanto que a fun��o se tornasse auto-document�vel, quanto trouxe
  148. esta flexibiliza��o. Veja como ficou:
  149.  
  150. function hideElement(minHeight, targetElement, hidingClass = "hidden") {
  151. if (window.pageYOffset > minHeight) {
  152. el.className = hidingClass;
  153. } else {
  154. el.classList.remove(hidingClass);
  155. }
  156. }
  157.  
  158.  
  159. 4. Omiss�es na documenta��o
  160. Acredite, existe um problema ainda mais grave aqui! O nome da fun��o n�o � fiel
  161. a seu comportamento.
  162.  
  163. Ao ler o c�digo, � poss�vel ver que ela n�o est� simplesmente "ocultando o
  164. elemento" � como o nome indica. Ela apenas aplica a classe "hidden" quando o
  165. offset y da p�gina � maior que o valor stop, e o soltando quando o valor �
  166. igual ou menor.
  167.  
  168. A �nica maneira de obter-se esta informa��o � lendo o corpo da fun��o e se
  169. deparando com a linha com a condi��o window.pageYOffset > minHeight.
  170.  
  171. A solu��o para o problema � dar um nome mais descritivo, que realmente captura a
  172. funcionalidade.
  173.  
  174. No fim das contas, nosso c�digo ficou assim:
  175.  
  176. function hideElementAfterHeight(minHeight, targetElement, hidingClass = "hidden") {
  177. if (window.pageYOffset > minHeight) {
  178. el.className.add(hidingClass);
  179. } else {
  180. el.classList.remove(hidingClass);
  181. }
  182. }
  183.  
  184.  
  185. O que aprendemos?
  186. O objetivo deste artigo foi demonstrar o lado nocivo dos coment�rios de c�digo.
  187. Come�amos o artigo com uma fun��o simples, por�m com nomes que dificultavam sua
  188. usabilidade, e a transformamos em um trecho de c�digo que dispensa a
  189. documenta��o adicional. Qual � a �moral da hist�ria�?
  190.  
  191. O bom c�digo n�o deve focar apenas na performance de execu��o, mas tamb�m em sua
  192. simplicidade, legibilidade e facilidade de manuten��o por outros programadores.
  193.  
  194. E o objetivo dos coment�rios de c�digo n�o deve ser simplesmente repetir o que
  195. j� estamos dizendo no c�digo, ou mascarar problemas de legibilidade do mesmo.
  196.  
  197. E a�, este conte�do te ajudou? Acha que pode ajudar mais algu�m? Ent�o
  198. compartilhe nas suas redes sociais!
  199. feature_image: https://s3.amazonaws.com/chorus-static-files-production20180703025311327900000004/a0132077a97542be94567c41b6641e9b/2018/09/4290373eede1124b7c4752104caff8aa.jpg-X-Amz-Algorithm-AWS4-HMAC-SHA256-X-Amz-Credential-AKIAJ3BVJGGW4RD4RJDA-2F20180918-2Fus-east-1-2Fs3-2Faws4_request-X-Amz-Date-20180918T192002Z-X-Amz-Expires-900-X-Amz-SignedHeaders-host-X-Amz-Signature-276e0bda88e3f2d19a4c3dc39d7d853a10646980061d9ee7d512cf2a30c97427.jpg
  200. featured: 0
  201. page: 0
  202. status: published
  203. locale: NULL
  204. visibility: public
  205. meta_title: NULL
  206. meta_description: NULL
  207. author_id: 1
  208. created_at: 2018-09-18 19:20:09
  209. created_by: rockstudio-author
  210. updated_at: 2018-09-18 19:20:09
  211. updated_by: rockstudio-author
  212. published_at: 2018-09-18 19:20:09
  213. published_by: rockstudio-author
  214. custom_excerpt: NULL
  215. codeinjection_head: NULL
  216. codeinjection_foot: NULL
  217. og_image: NULL
  218. og_title: NULL
  219. og_description: NULL
  220. twitter_image: NULL
  221. twitter_title: NULL
  222. twitter_description: NULL
  223. custom_template: NULL
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement