Novos rumos, novos desafios

Já faz algum tempo que não paro aqui para escrever e refletir sobre os rumos da minha vida. Gosto de fazer isso pois me ajuda a entender quem eu fui e quem eu me tornei. E por isso tudo, nunca tive coragem de apagar ou bloquear este espaço. Enfim, é chegada a hora de olhar para mais um ano e tentar antecipar algumas tendências e direcionamentos pessoais e profissionais.

Em 2012, como puderam ler aqui, eu retornei de uma jornada em outro Estado onde pude aprender muito. O ano de 2013 ficou marcado pela reconstrução da minha carreira profissional e a experimentação mais ativa da vida empreendedora. Durante os meses em que atuei como profissional autônomo, pude experimentar todas as facetas que um empreendedor pode passar, desde o atendimento até a execução, encerrando com o pós-venda e a fidelização de clientes. Trabalhei em grupo, em parceria e dividi responsabilidades com minha mulher e sócia. Fiz de tudo um pouco neste processo de oferecer meus conhecimentos em desenvolvimento web e administração de sistemas. Talvez por isso, essa sobrecarga de informações e responsabilidades, alguma coisa dentro de mim foi mudando. Criar um negócio, alimentá-lo e operacionalizá-lo é uma tarefa árdua. Durante esse processo encontrei-me em um estado de estafa e preocupação, pois apesar de considerar que estava obtendo sucesso nas tarefas, sentia a sobrecarga de diversas atividades simultâneas. Percebi que era preciso tomar uma atitude e “pivotar” mais uma vez a minha vida.

A oportunidade surgiu no final de 2013, após um trabalho bem realizado como freelancer para a empresa Quatix. Recebi um convite para integrar o time de desenvolvedores da empresa e posteriormente ficar responsável pelo acompanhamento e entrega de projetos de software sob demanda da empresa. O curioso dessa pequena trajetória até aqui é que a própria Quatix também passa por mudanças. Ela sempre foi uma empresa de tecnologia de destaque mas lhe faltava definir um foco, um nicho a ser explorado. Depois de anos convivendo e prestando serviço a clientes da área de mídia e entretenimento, a Quatix decidiu que esse era nicho correto a se dedicar. É óbvio que essa decisão tem influência de um estudo profundo de mercado e mudanças na sua estrutura organizacional, mas o fato é que nesse pouco tempo em que ainda entendo e absorvo as demandas que me são direcionadas, gosto cada vez mais do que faço. As responsabilidades são grandes como sempre, mas o prazer de continuar trabalhando na área comercial, além de poder desenvolver um perfil de gestão tem me agradado. Com o suporte e estrutura que a empresa me oferece, posso implementar o trabalho que eu acredito e ajudá-la a alcançar seu resultados.

É claro que o fato de agora estar colaborando com a Quatix me impossbilitou de seguir como freelancer em tempo integral. Entretanto, esse fato não me impede de continuar com algumas ações empreendedoras, até porque sinto que essas experimentações fazem parte do meu DNA. Continuo tocando a Xdevs junto da minha mulher, agora também com foco em administração de sistemas, no marketplace da Amazon AWS e de outras nuvens (Saiba mais na Storme). Essa nova “profissão”, de administrador de sistemas, também me chama muita atenção e me desperta a mesma curiosidade de quando iniciei minha carreira em programação.

Por fim, começo um ano novo ainda mais motivado e dedicado, esperando que Quatix e Xdevs alcancem seus objetivos. Sei que sou apenas mais um em suas engrenagens, mas fico feliz de poder ajudar e ainda desenvolver novas competências profissionais.

Obs: Estamos contratando na Quatix, aproveite 2014 para se juntar a uma empresa muita sagaz!

http://quatix.com.br/vagas/#.UtxMCWRpQy4

quatix-logo

xdevs-logo

 

Como desativar o perfil recorrente no Magento

Seguindo a linha dos últimos artigos, venho com mais uma dica para desenvolvimento de lojas virtuais com Magento. Desta vez, falarei como desativa a funcionalidade “Perfil Recorrente”.

Particularmente, não tive clientes que desejassem pagamentos recorrentes, então eu sempre desativo essa funcionalidade. Para fazer isso, é preciso:

1) Localizar dentro do seu tema/template o arquivo responsável pela implementação do perfil recorrente, ou seja, o arquivo recurring_profile.xml

Exemplo de localização:

/app/design/frontend/base/default/layout/sales/recurring_profile.xml

2) Comentar as marcações referentes a implementação do perfil recorrente:

<!--?xml version="1.0"?-->

    &lt;customer_account&gt;
        <!--
        <reference name="customer_account_navigation" >
            <action method="addLink" translate="label"><name>recurring_profiles</name><path>sales/recurring_profile/</path><label>Recurring Profiles</label></action>
        </reference>
        -->

    &lt;sales_recurring_profile_index&gt;
        <!--
        <update handle="customer_account"/>
        <reference name="root">
            <action method="setTemplate"><template>page/2columns-left.phtml</template></action>
        </reference>
        <reference name="my.account.wrapper">
            <block type="sales/recurring_profiles" name="sales.recurring.profiles" template="sales/recurring/profiles.phtml">
                <block type="sales/recurring_profiles" name="sales.recurring.profiles.grid" as="grid" template="sales/recurring/grid.phtml">
                    <action method="prepareProfilesGrid"/>
                    <action method="setEmptyGridMessage" translate="value"><value>There are no recurring profiles yet.</value></action>
                    <action method="setGridHtmlId"><value>recurring_profile_list_view</value></action>
                </block>
            </block>
        </reference>
        -->

    &lt;sales_recurring_profile_view__tabs&gt;
        <!--
        <reference name="root">
            <action method="setTemplate"><template>page/2columns-left.phtml</template></action>
        </reference>
        <reference name="my.account.wrapper">
            <block type="sales/recurring_profile_view" name="sales.recurring.profile.view" template="sales/recurring/profile/view.phtml">
                <action method="prepareViewData"/>
                <action method="setShouldPrepareInfoTabs"><value>1</value></action>
                <block type="core/text" as="profile_info" name="sales.recurring.profile.view.tab.profile">
                    <action method="addToParentGroup"><value>info_tabs</value></action>
                    <action method="setViewLabel" translate="value"><value>Profile Information</value></action>
                    <action method="setViewAction"><value>view</value></action>
                </block>
<!-- not implemented
                <block type="core/text" as="history" name="sales.recurring.profile.view.tab.history">
                    <action method="addToParentGroup"><value>info_tabs</value></action>
                    <action method="setViewLabel" translate="value"><value>History</value></action>
                    <action method="setViewAction"><value>history</value></action>
                </block>
-->
            <!--
                <block type="core/text" as="related_orders" name="sales.recurring.profile.view.tab.orders">
                    <action method="addToParentGroup"><value>info_tabs</value></action>
                    <action method="setViewLabel" translate="value"><value>Related Orders</value></action>
                    <action method="setViewAction"><value>orders</value></action>
                </block>
<!-- not implemented
                <block type="core/text" as="vendor_info" name="sales.recurring.profile.view.tab.vendor">
                    <action method="addToParentGroup"><value>info_tabs</value></action>
                    <action method="setViewLabel" translate="value"><value>Gateway Information</value></action>
                    <action method="setViewAction"><value>vendor</value></action>
                </block>
-->
<!--
            </block>
        </reference>
    -->

    &lt;sales_recurring_profile_view&gt;
        <!--
        <update handle="customer_account"/>
        <update handle="sales_recurring_profile_view__tabs"/>
        <reference name="sales.recurring.profile.view.tab.profile">
            <action method="setIsViewCurrent"><v>1</v></action>
        </reference>
        <reference name="sales.recurring.profile.view">
            <block type="sales/recurring_profile_view" name="sales.recurring.profile.view.general" as="general" template="sales/recurring/profile/view/info.phtml">
                <action method="prepareReferenceInfo"/>
                <action method="addToParentGroup"><value>info_blocks_row_1</value></action>
                <action method="setViewColumn"><value>1</value></action>
                <action method="setViewLabel" translate="value"><value>Reference</value></action>
            </block>
            <block type="sales/recurring_profile_view" name="sales.recurring.profile.view.item" as="item" template="sales/recurring/profile/view/info.phtml">
                <action method="prepareItemInfo"/>
                <action method="addToParentGroup"><value>info_blocks_row_1</value></action>
                <action method="setViewColumn"><value>2</value></action>
                <action method="setViewLabel" translate="value"><value>Purchased Item</value></action>
            </block>
            <block type="sales/recurring_profile_view" name="sales.recurring.profile.view.schedule" as="profile" template="sales/recurring/profile/view/info.phtml">
                <action method="prepareScheduleInfo"/>
                <action method="addToParentGroup"><value>info_blocks_row_2</value></action>
                <action method="setViewColumn"><value>1</value></action>
                <action method="setViewLabel" translate="value"><value>Profile Schedule</value></action>
            </block>
            <block type="sales/recurring_profile_view" name="sales.recurring.profile.view.fees" as="fees" template="sales/recurring/profile/view/info.phtml">
                <action method="prepareFeesInfo"/>
                <action method="addToParentGroup"><value>info_blocks_row_2</value></action>
                <action method="setViewColumn"><value>2</value></action>
                <action method="setViewLabel" translate="value"><value>Profile Payments</value></action>
            </block>
            <block type="sales/recurring_profile_view" name="sales.recurring.profile.view.billing" as="billing_address" template="sales/recurring/profile/view/info.phtml">
                <action method="prepareAddressInfo"/>
                <action method="addToParentGroup"><value>info_blocks_row_3</value></action>
                <action method="setViewColumn"><value>1</value></action>
                <action method="setViewLabel" translate="value"><value>Billing Address</value></action>
            </block>
            <block type="sales/recurring_profile_view" name="sales.recurring.profile.view.shipping" as="shipping_address" template="sales/recurring/profile/view/info.phtml">
                <action method="setAddressType"><value>shipping</value></action>
                <action method="prepareAddressInfo"/>
                <action method="addToParentGroup"><value>info_blocks_row_3</value></action>
                <action method="setViewColumn"><value>2</value></action>
                <action method="setViewLabel" translate="value"><value>Shipping Address</value></action>
            </block>
        </reference>
    -->

<!-- not implemented
    <sales_recurring_profile_history>
        <update handle="customer_account"/>
        <update handle="sales_recurring_profile_view__tabs"/>
        <reference name="sales.recurring.profile.view.tab.history">
            <action method="setIsViewCurrent"><v>1</v></action>
        </reference>
    </sales_recurring_profile_history>
-->

    &lt;sales_recurring_profile_orders&gt;
        <!--
        <update handle="customer_account"/>
        <update handle="sales_recurring_profile_view__tabs"/>
        <reference name="sales.recurring.profile.view.tab.orders">
            <action method="setIsViewCurrent"><v>1</v></action>
        </reference>
        <reference name="sales.recurring.profile.view">
            <block type="sales/recurring_profile_view" name="sales.recurring.profile.view.orders" as="table" template="sales/recurring/grid.phtml">
                <action method="prepareRelatedOrdersFrontendGrid"/>
                <action method="setViewLabel" translate="value"><value>Orders Based on This Profile</value></action>
                <action method="setEmptyGridMessage" translate="value"><value>There are no orders yet.</value></action>
                <action method="setGridHtmlClass"><value>info-box</value></action>
                <action method="setGridHtmlCss"><value>border:0</value></action>
            </block>
        </reference>
    -->

<!-- not implemented
    <sales_recurring_profile_vendor>
        <update handle="customer_account"/>
        <update handle="sales_recurring_profile_view__tabs"/>
        <reference name="sales.recurring.profile.view.tab.vendor">
            <action method="setIsViewCurrent"><v>1</v></action>
        </reference>
    </sales_recurring_profile_vendor>
-->

Pronto, agora o perfil recorrente não aparecerá mais na página administrativa do cliente.

Lib jQuery para navegação por âncora

Existem 2 efeitos em websites que eu gosto muito que é o scrollTo (quando você clica em um link e a página é direcionada para um ponto específico) e a própria navegação por âncora (pois facilita a aplicação de SEO). Encontrei uma lib em jQuery que faz muito bem essas duas coisas.

Você pode fazer um fork no Github do projeto e utilizá-la em suas aplicações agora mesmo:

https://github.com/briangonzalez/jquery.arbitrary-anchor.js

Dê uma olhada na aplicação da lib aqui:

http://briangonzalez.org/arbitrary-anchor

Exibindo produtos em grid na página de categoria do OpenCart

Inaugurando a seção “OpenCart” aqui do blog, compartilho uma dica rápida para aplicar na página de categoria da loja virtual.

Por padrão, a exibição de produtos no OpenCart é em lista. Para ativar o modo  ”grid” como padrão, abra o arquivo category.tpl, dentro da pasta product e localize o trecho:

if (view) {
   display(view);
} else {
   display('list');
}

Altere para:

if (view) {
   display(view);
} else {
   display('grid');
}

Como desativar as tags de produtos do Magento

Continuando a série de dicas para desenvolvimento de lojas virtuais com Magento, compartilho uma dica com relação ao sistema de  tags de produtos.

A ideia das tags é permitir que o cliente possa associar produtos com termos preferidos possibilitando uma espécie de gerenciamento de seus artigos preferidos e tagueados em ambiente logado. Particularmente alguns clientes preferem que o gerenciamento de artigos preferidos fique a cargo da Lista de Desejos, e por isso é preciso desativar essa funcionalidade. Para desativar é preciso:

1) Localizar dentro do seu tema/template o arquivo responsável pela implementação das tags, ou seja, o arquivo tag.xml

Exemplo de localização:

/app/design/frontend/sua-interface/seu-tema/layout/tag.xml

2) Comentar as marcações referentes a implementação da tag:

<?xml version="1.0"?>
<layout version="0.1.0">

<!--
Default layout, loads most of the pages
-->

    <default>
        <!-- Mage_Tag -->
        <!--
        <reference name="left">
            <block type="tag/popular" name="tags_popular" template="tag/popular.phtml"/>
        </reference>
        -->
    </default>

<!--
Customer account pages, rendered for all tabs in dashboard
-->

    <customer_account>
        <!-- Mage_Tag -->
        <!--
        <reference name="customer_account_navigation">
            <action method="addLink" translate="label" module="tag"><name>tags</name><path>tag/customer/</path><label>My Tags</label></action>
        </reference>
        -->
    </customer_account>

<!--
Customer account home dashboard layout
-->

    <customer_account_index>
        <!-- Mage_Tag -->
        <reference name="customer_account_dashboard">
            <action method="unsetChild"><name>customer_account_dashboard_info2</name></action>
            <block type="tag/customer_recent" name="customer_account_dashboard_info2" as="info2" template="tag/customer/recent.phtml"/>
        </reference>
    </customer_account_index>

    <catalog_product_view translate="label">
        <label>Catalog Product View</label>
         <!-- Mage_Tag -->
         <!--
         <reference name="product.info.tabs">
            <action method="addTab" translate="title" module="tag"><alias>product.tags</alias><title>Product Tags</title><block>tag/product_list</block><template>tag/list.phtml</template></action>
        </reference>
        <reference name="product.tags">
            <block type="page/html_wrapper" name="product.tag.list.list.before" as="list_before" translate="label">
                <label>Tags List Before</label>
                <action method="setMayBeInvisible"><value>1</value></action>
            </block>
        </reference>
        -->
    </catalog_product_view>

<!--
All tags page
-->

    <tag_list_index translate="label">
        <label>Tags List (All Available)</label>
        <!-- Mage_Tag -->
        <!--
        <reference name="root">
            <action method="setTemplate"><template>page/2columns-left.phtml</template></action>
        </reference>
        <reference name="content">
            <block type="tag/all" name="tags_all" template="tag/cloud.phtml"/>
        </reference>
        -->
    </tag_list_index>

    <tag_product_list translate="label">
        <label>Tagged Products List</label>
        <!-- Mage_Tag -->
        <!--
        <reference name="root">
            <action method="setTemplate"><template>page/2columns-left.phtml</template></action>
        </reference>        
        <reference name="content">
            <block type="tag/product_result" name="tag_products" template="catalogsearch/result.phtml">
                <block type="catalog/product_list" name="search_result_list" template="catalog/product/list.phtml">
                    <block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
                        <block type="page/html_pager" name="product_list_toolbar_pager"/>
                    </block>
                    <action method="setToolbarBlockName"><name>product_list_toolbar</name></action>
                </block>
                <action method="setListOrders"/>
                <action method="setListModes"/>
                <action method="setListCollection"/>
            </block>
        </reference>
        -->
    </tag_product_list>
    <!--
    <tag_customer_index translate="label">
        <label>Customer My Account My Tags List</label>
        <update handle="customer_account"/>
        <reference name="root">
            <action method="setHeaderTitle" translate="title" module="customer"><title>My Account</title></action>
        </reference>
        <reference name="my.account.wrapper">
            <block type="tag/customer_tags" name="customer_tags" template="tag/customer/tags.phtml"/>
        </reference>
    </tag_customer_index>

    <tag_customer_view translate="label">
        <label>Customer My Account Tag View</label>
        <update handle="customer_account"/>
        <reference name="root">
            <action method="setHeaderTitle" translate="title" module="customer"><title>My Account</title></action>
        </reference>
        <reference name="my.account.wrapper">
            <block type="tag/customer_view" name="customer_view" template="tag/customer/view.phtml"/>
        </reference>
    </tag_customer_view>
    -->

</layout>

Pronto, agora as tags não aparecerão mais nas páginas de produtos nem no ambiente logado.

Ativando template padrão no Magento

Olá amigos, aqui vai uma dica rápida e útil. Muitas vezes ao desenvolver ou customizar temas para Magento, precisamos conferir funcionalidades no template padrão. Após instalar um template novo, para retornar ao padrão é bastante fácil.

Vá até a administração e acesse: Sistema > Configuração > Design

O primeiro campo chama-se “Nome do pacote atual”. Digite “default” e deixe os campos da aba “Temas” em branco. Agora é só salvar a configuração e fazer seus testes.

Screen Shot 2013-07-04 at 4.36.24 PM

 

 

Tradução Magento Português BR

Sabemos que o Magento se tornou um grande Market Place em que todos os participantes saem ganhando: desenvolvedores, criadores de módulos, empresas de hospedagem e clientes. E um dos motivos do sucesso é o Magento Connect, ambiente responsável por hospedar os principais módulos gratuitos e pagos utilizados na ferramenta.

Screen Shot 2013-07-02 at 8.23.22 PM

Essa explicação toda foi para trazer o link da tradução de Magento Português BR pelo Magento Connect. Venho utilizando a tradução dessa maneira pela facilidade que é instalar um módulo através do Magento Connect e porque na comunidade brasileira existem algumas iniciativas dispersas que acabam por não me oferecer confiança. Portanto, acabei optando pela versão disponibilizada no Magento Connect.

Permissões no Magento

Olá amigos, estou aqui para compartilhar mais uma dica para desenvolvedores Magento. Recentemente implementei um ambiente de homologação para meus projetos rodando nGinx + PHP-FPM no backend. Para deixar o Magento rodando 100%, recebendo uploads de arquivos de forma correta, precisei executar os seguintes comandos no Shell.

find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
chmod 550 mage
chmod -R o+w media

Você pode conferir todas as informações no Wiki do Magento, em Inglês.

Mercado WordPress – Episódio de estreia

Como já dito aqui, criei um podcast junto do amigo Cristiano Web com o objetivo de falar sobre WordPress e seus profissionais brasileiros. Finalmente estou aqui para anunciar que lançamos o episódio de estreia do nosso querido projeto.

highlight-soundcloud_-_episodio-#001_-_com-cayo-medeiros_-_case-imovel-rj

Neste primeiro episódio abordamos a utilização do WordPress adaptado como produto. A ferramenta foi customizada para atingir os objetivos de um corretor de imóveis e o projeto gerou grandes resultados financeiros para o cliente. Cayo e Cristiano compartilharam também um pouco de suas experiências  no processo de trabalho e na customização da ferramenta.

Então é isso, aguardo vocês lá no podcast.

https://soundcloud.com/mercadowordpress/mercado-wordpress-episodio-01

Site/Podcast sobre WordPress – MercadoWordPress.com.br

Há algum tempo tenho a ideia de criar um website que valorize um determinado nicho de trabalho que eu atue além de compartilhar conteúdo com o público dele. Dentro desta ideia, criei o Mercado WordPress e convidei meu grande amigo Cristiano Web, Designer especializado em temas WordPress, para participar deste projeto comigo.

logotipo-mercado-wordpress

Começamos o projeto com um podcast hospedado no SoundCloud (https://soundcloud.com/mercadowordpress). Até o início de segundo semestre pretendemos colocar no ar o site que facilitará a conexão entre os interessados pelo tema, ou seja, clientes e profissionais de WordPress.

Fiquem ligados nos novos episódios e em breve, em nosso site.