2009
09.27

Na 5º feira estive a falar com um amigo meu, que também é freelancer no mundo da programação..

Então contou-me que foi apresentar um orçamento a um cliente, e que este lhe tinha dado uma tareia das antigas, porque os orçamentos que ele estava a dar eram completamente irreais e muito acima dos valores que pretendiam..

Ora então lá começou o cliente a explicar porquê… é que pelos vistos existe uma empresa em PT que faz sites por cerca de 300€ mais IVA, com gestor de conteúdos!

Sites por 300€, deve estar tudo doido.. só pode..como é que eles pagam aos programadores que lá têm? Até que fui ver mais informações sobre esta empresa ( da qual eu não vou dizer o nome por diversas razões.. )

Então um dos planos que eles lá têm é 295€ ( + IVA ) pela configuração do site e por adaptarem o layout existente ao logotipo do cliente, e anualmente ainda têm que pagar no mínimo 194€ ( + IVA ), estes 194€ ( + IVA ) é o alojamento e sabe-se lá mais o quê…

E o que é que isto dá direito? Dá direito a 15 páginas, a estatísticas ( que só diz quantas visitas é que a página teve ) e também a um CMS…

Ora se aquilo é um CMS eu sou o pai natal! ( verdade seja dita que só me falta as barbas brancas e treinar o Ho! Ho! Ho! )

O gestor de CMS é composto, apenas pelo KtmlEditor, que é um produto da Adobe que já foi descontinuado sabe lá Deus quando.. e por mais nada! E depois cobram valores absurdos por pequenas coisas, um banner em Flash é 150€ ( + IVA )… repararam que o CMS é apenas um editor do tipo WYSIWYG… em que terra é que isto é um CMS?

Mas realmente o que interessa é que os gajos se andam a safar… têm uma solução mais que simples que serve a muita a gente..

Mas para mim cada cliente é um cliente, e não pode ser tudo corrido pela mesma moeda que é o que eles fazem… mas também há que ver que o que eu faço é mais consultadoria do que outra coisa.. eu arranjo soluções para aquilo que os clientes pedem..

Um bem haja a todos e bom código..

PS: Tenho de pensar numa solução destas, só que ainda mais barata, sei lá 150€ + IVA…que tal uma empresa ter um site na net, por apenas 150€…parece-me bastante bem…

2009
09.08

Não, não foi um erro ao escrever o título ( não vá vocês pensarem que estava a falar do filme “48 horas”..

Estas 38 horas, foi o número de horas que tive acordado desde domingo até ontem ( segunda-feira ), sim fiz directa de domingo para segunda…

Isto devido ao trabalho que estava uma loucura, e era preciso acabar esta fase até ontem…então foi quase toda a gente trabalhar..

Então tivémos no escritório no sábado das 11 até às 5 da manhã ( mais coisa menos coisa ), e no domingo a malta foi toda para lá às 11 da manhã, e eu apareci lá eram 8 da noite ( tive almoçarada com a famelga cá em casa… )

Nunca tinha feito uma directa a trabalhar.. já tinha ficado até às 3 ou 4 da manhã.. mas nunca tinho sido de um dia a outro..

O que foi interessante no mínimo..

Quando cheguei lá, estava completamente a morrer, ainda estava de barriga cheia do almoço, e como tinha dormido pouco de sábado para domingo ( cerca de 5 horas )..

Chega às 3/ 4 da manhã, e começo a beber café…bebi para aí 4 cafés em 4 hora… eram 6 da matina estava cá com uma pica que até metia medo… tudo cheio da sono, e eu a bombar em T-SQL como se não houvesse dia seguinte.. ( eu há 2 anos que não bebo café regularmente, só quando saio para os copos ou coisa parecida… )…

Durante o dia de segunda-feira, tive algumas quebras, principalmente quando estava parado, como se costuma dizer, “parar é morrer”.. mas sempre que estava a bater código ou outra coisa qualquer..estava-se bastante bem… acabei por sair de lá ontem eram 23 e 30 ( mais ou menos ), foi chegar a casa, comer, fumar um cigarrito e ir dormir..com isto tudo era 1 da manhã..

E hoje acordei eram 13 horas e estive bem pior hoje o dia todo que ontem… até agora estou completamente a morrer…e não tarda nada vou é roncar..

Um bem haja a todos e bom código..

2009
09.04

Cheguei há cerca de 1 hora a casa, depois de mais um dia de trabalho de 12 horas… ( estas últimas 3 semanas têm sido uma constante… )

Entretanto recebi um mail da Net empregos, e decidi ir ver o que havia para aí no mercado.. só mesmo naquela para andar informado..

Houve um anúncio que me chamou à atenção:

Empresa em vias de expansão no mercado internacional procura:

Perfil do candidato:
Boa cultura visual
Experiência em PHP / MySQL / xHTML / CSS / AJAX / XML
Experiência em e-commerce, bases de dados, backoffice, etc…
Disponibilidade imediata para trabalho em full-time durante 2 meses com possibilidade de continuação
Espírito inovador e pró-activo

Preferência aos candidatos:
Zona de Lisboa e arredores

Oferecemos:
Integração em equipa dinâmica
Bom ambiente de trabalho
800-1000 euros líquidos

Local de Trabalho: Home sweet Home

Ou seja, tem de ter experiência, e para saber aquilo tudo não chega só um ano ( porque um gajo não nasce ensinado )….e depois oferecem um excelente ordenado..entre os 800€ e os 1000€ líquidos…é que está aqui um ordenado que é um espectáculo, para além disso, só temos a garantia de 2 meses de trabalho, depois logo se verá.. se eu andasse à procura nem desperdiçava o meu tempo com esta gente..

No entanto há alguns anúncios que são simplesmente lindos, ora vejam este:

Grupo de Webgeeks procura Geek para adoptar, no Porto

És um geek? Não podes viver sem a net? Os teus melhores amigos vivem do outro lado do mundo e só os conheces pelo nick dos fóruns?

PHP é o teu nome do meio? Comes bases de dados com milhões de registos ao pequeno almoço?

Se tens mais de 18 anos e correspondes a este perfil candidata-te. Se não correspondes ao perfil, o melhor é procurares um emprego. Este lugar não é para ti.

Simples, conciso, eficiente… nada daquelas tangas de “Renumeração equivalente com a experiência mostrada”, nem nada do género… só pelo anúncio gostava de ir trabalhar para lá…

O que é giro é que praticamente todos os anúncios que se vêm têm sempre o tradicional: “Capacidade de trabalhar em equipa”, “Excelente capacidade de comunicação” etc etc etc… esta gente não sabe variar..

Um bem haja a todos e bom código…

2009
09.03

A Microsoft lançou uma campanha que dá comida a 8 sem abrigo, quando uma pessoa faz download do IE8…

Isto no mínimo é bastante rebuscado… e porquê 8? Porque não 10? Mas se com esta campanha, eles conseguirem que uns quantos milhões de pessoas façam upgrade para o IE8, já fico super contente..

Podem ver o site aqui: Browser for the better..

Browser for the better

Uma dica, carreguem no lado direito onde diz “Better Browser”, para verem uns vídeos que é só rir..

Ora aí está uma boa campanha…quase que me convenciam a usar apenas o IE8 como browser.. ou não… estou simplesmente fascinado com o Google Chrome.. mas faltam-lhe os plugins que uso no Firefox…só depois de os ter é que me mudo para o Chrome..

E uma coisa interessante, se abrirem o site no Chrome, primeiro vêem logo que o fundo não se adapta ao ecrã totalmente… e começa a tocar uma música que ou será irritante ou de partir o coco a rir…brincadeira da Microsoft em relação ao Chrome?

Edit: Afinal é um bug, ou no código deles ou no Chrome, porque a música é de um vídeo que está no site, que no Firefox só começa a tocar quando se carrega no link apropriado, mas no Chrome arranca logo a tocar.. ups..

Ficam aqui com um dos vídeos que não consegui ver no site deles:

Um bem haja a todos e bom código..

2009
09.03

Para aqueles que não conhecem o Kentico CMS, aconselho a darem uma olhadela à homepage deles, considero-o um bom CMS ( tendo em conta aquilo com que já trabalhei, Joomla e Mambo, que para mim são péssimos… )…

Têm várias versões de licenciamento do software, mas a meu ver são bastante irreais para o mercado português, então para a comunidade freelancer ainda pior, no entanto têm uma versão free, mas que têm uma condição.. da qual eu não gosto nada, para podermos usar a versão free temos de por o “branding” deles em todas as páginas que são geridas pelo CMS, não acredito que seja fácil vender isto a um cliente…

Mas no final, considero que é um excelente CMS, e na última versão que testei ( versão 4.0 ), está mesmo muito bom… já saiu a versão 4.1 ( no mês passado senão estou em erro )…

Mas voltando ao que me fez criar um post..

Ontem e hoje, estive à luta com um CMS:Repeater ( controlo do Kentico, basicamente fizeram um “extend” ao Repeater do .Net ) e com o CMS:TemplateDataPager…

Já tinha usado esta combinação 2 dias antes, e não tive problemas, só que tinha usado através de webpart’s clonadas ( clonei a webpart do Kentico CMS:Repeater ), desliguei o DataBindingByDefault e o EnablePagging do CMS:Repeater e problema resolvido, foi só afectar o TemplateDataPager com o DataSource do CMS:Repeater e problema resolvido…

Vendo o exemplo deles, é bastante fácil de o fazer:

Página:

<table style="border: solid 1px #CCCCCC; margin-left: auto; margin-right: auto;">
    <tr>
        <td style="border-bottom: solid 1px #CCCCCC; padding: 10px; text-align: center;">
            <cc1:cmsrepeater id="CMSRepeater1" runat="server" path="/%" classnames="CMS.Product"
                transformationname="CMS.Product.preview">
            </cc1:cmsrepeater>
        </td>
    </tr>
    <tr>
        <td style="padding: 10px; background-color: #D9D9D9;">
            <cc1:templatedatapager id="TemplateDataPager1" runat="server">
                <NumberTemplate>
                    <a href="?Page=<%# Eval("PageNumber")  %>"><%# Eval("PageNumber")  %></a>
                </NumberTemplate>
                <SelectedNumberTemplate>
                    <b><%# Eval("PageNumber")  %></b>
                </SelectedNumberTemplate>
                <SeparatorTemplate>
                    -
                </SeparatorTemplate>
                <FirstItemTemplate>
                    <a href="?Page=1">First</a>&nbsp;|&nbsp;
                </FirstItemTemplate>
                <LastItemTemplate>
                    &nbsp;|&nbsp;<a href="?Page=<%# pageCount %>">Last</a>
                </LastItemTemplate>
                <PreviousItemTemplate>
                    <a href="?Page=<%# previousPage %>">Previous</a> &nbsp;|&nbsp;
                </PreviousItemTemplate>
                <NextItemTemplate>
                    &nbsp;|&nbsp; <a href="?Page=<%# nextPage %>">Next</a>
                </NextItemTemplate>
            </cc1:templatedatapager>
        </td>
    </tr>
</table>

Code behind:

using CMS.GlobalHelper;
public partial class CMSControlsExamples_TemplatedDataPager : ControlsExamplesPage
{
    public string pageCount = "1";
    public string previousPage = "1";
    public string nextPage = "";

    ///
    /// OnInit override
    ///
    ///
    protected override void OnInit(EventArgs e)
    {
        // Disable repeater pager and databindbydefault
        CMSRepeater1.EnablePaging = false;
        CMSRepeater1.DataBindByDefault = false;
        base.OnInit(e);
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        // Get repeater datasource
        TemplateDataPager1.DataSource = CMSRepeater1.DataSource;
        // Set page size
        TemplateDataPager1.PageSize = 1;
        // Set current page from query string
        TemplateDataPager1.CurrentPage = ValidationHelper.GetInteger(Request.QueryString["Page"], 1);
        // Get page number for last link
        pageCount = ((int)(TemplateDataPager1.PageCount - 1)).ToString();
        // Set default next page link
        nextPage = pageCount;
        // Set previous link
        if ((TemplateDataPager1.CurrentPage - 1) >= 1)
        {
            previousPage = ((int)(TemplateDataPager1.CurrentPage - 1)).ToString();
        }
        // Set next link
        if ((TemplateDataPager1.CurrentPage + 1) <= (TemplateDataPager1.PageCount - 1))
        {
            nextPage = ((int)(TemplateDataPager1.CurrentPage + 1)).ToString();
        }
        // Set paged datasource to the repeater and databind it
        CMSRepeater1.DataSource = TemplateDataPager1.PagedData;
        if (!DataHelper.DataSourceIsEmpty(CMSRepeater1.DataSource))
        {
            CMSRepeater1.DataBind();
        }
    }
}

Até aqui sem problemas, consegui-o usar sem acontecer nada, o problema surgiu foi quando tentei afectar o CMS:Repeater com um DataSource vindo de uma query, tentei de várias maneiras afectar o DataSource do CMS:TemplateDataPager, que o DataSource ficava sempre a vazio, apesar de a query estar a retornar 38000 resultados.

Estava a usar mais ou menos este código ( na realidade tenho as chamadas à base de dados encapsuladas com tratamento de excepções):

protected void Page_Load(object sender, EventArgs e)
{
    GeneralConnection cn = new GeneralConnection();
    DataSet ds = null;
    object[,] parameters = new object[1, 3];
    parameters[0, 0] = "@UserName";
    parameters[0, 1] = "johns";
    CMSRepeater1.DataSource = cn.ExecuteQuery("cms.user.selectbyname", parameters).Tables[0];
    // Get repeater datasource
    TemplateDataPager1.DataSource = CMSRepeater1.DataSource;
    // Set page size
    TemplateDataPager1.PageSize = 1;
    // Set current page from query string
    TemplateDataPager1.CurrentPage = ValidationHelper.GetInteger(Request.QueryString["Page"], 1);
    // Get page number for last link
    pageCount = ((int)(TemplateDataPager1.PageCount - 1)).ToString();
    // Set default next page link
    nextPage = pageCount;
    // Set previous link
    if ((TemplateDataPager1.CurrentPage - 1) >= 1)
    {
        previousPage = ((int)(TemplateDataPager1.CurrentPage - 1)).ToString();
    }
    // Set next link
    if ((TemplateDataPager1.CurrentPage + 1) <= (TemplateDataPager1.PageCount - 1))
    {
        nextPage = ((int)(TemplateDataPager1.CurrentPage + 1)).ToString();
    }
    // Set paged datasource to the repeater and databind it
    CMSRepeater1.DataSource = TemplateDataPager1.PagedData;
    if (!DataHelper.DataSourceIsEmpty(CMSRepeater1.DataSource))
    {
        CMSRepeater1.DataBind();
    }
}

Este código não faz absolutamente nada, ou melhor até faz, a query à base de dados é efectuada correctamente, retorna resultados, só que quando se afecta a DataSource do TemplateDataPager, esta ficava sempre a null…

E qual era o problema, é que pelos vistos quando afectava a DataSource do CMS:Repeater, a DataSource ficava com o tipo DataTable, até aqui tudo bem, se eu comentasse o CMS:TemplateDataPager, o CMS:Repeater era preenchido, o transform efectuado e tudo aparecia às mil maravilhas..

O que acontece é que o DataSource do CMS:TemplateDataPager tem de ser um DataView, em vez do DataTable..coisa simples não é?

Clonando a webpart deles, nunca afectamos directamente o DataSource do CMS:Repeater, este é afectado por eles, e o DataSource fica sempre com DataView, quer seja um CMS:Queryrepeater, quer seja um CMS:Repeater… por isso é que o erro não foi detectado nas webpart’s que tinha clonado anteriormente…

Após ter alterado o código para:

protected void Page_Load(object sender, EventArgs e)
{
    GeneralConnection cn = new GeneralConnection();
    DataSet ds = null;
    object[,] parameters = new object[1, 3];
    parameters[0, 0] = "@UserName";
    parameters[0, 1] = "johns";
    CMSRepeater1.DataSource = cn.ExecuteQuery("cms.user.selectbyname", parameters).Tables[0].DefaultView;
    // Get repeater datasource
    TemplateDataPager1.DataSource = CMSRepeater1.DataSource;
    // Set page size
    TemplateDataPager1.PageSize = 1;
    // Set current page from query string
    TemplateDataPager1.CurrentPage = ValidationHelper.GetInteger(Request.QueryString["Page"], 1);
    // Get page number for last link
    pageCount = ((int)(TemplateDataPager1.PageCount - 1)).ToString();
    // Set default next page link
    nextPage = pageCount;
    // Set previous link
    if ((TemplateDataPager1.CurrentPage - 1) >= 1)
    {
        previousPage = ((int)(TemplateDataPager1.CurrentPage - 1)).ToString();
    }
    // Set next link
    if ((TemplateDataPager1.CurrentPage + 1) <= (TemplateDataPager1.PageCount - 1))
    {
        nextPage = ((int)(TemplateDataPager1.CurrentPage + 1)).ToString();
    }
    // Set paged datasource to the repeater and databind it
    CMSRepeater1.DataSource = TemplateDataPager1.PagedData;
    if (!DataHelper.DataSourceIsEmpty(CMSRepeater1.DataSource))
    {
        CMSRepeater1.DataBind();
    }
}

Ficou tudo a funcionar às mil maravilhas..

Nem imaginam as voltas que dei para encontrar esta solução, estava difícil mas consegui..

Um bem haja a todos e bom código..

2009
09.02

…me parecem bastante mal…

No outro dia no escritório, pediram a uma parte dos colaboradores para dar umas ideias para um folheto que estavam a fazer para fazer promoção da empresa..

Cometeram 2 erros…a meu ver…

Primeiro não convidaram todos os colaboradores, erro crasso este, embora os que faltassem não fossem da área criativa/área web, não interessa, de certeza que tinham ideias bem jeitosas…

Segundo, enviei um email para toda a gente com a minha opinião e com algumas ideias diferentes, nada do que é habitual no meio da publicidade ( mas que já está a ser comum ), basicamente era tudo virado para o “Viral Marketing”…e no entanto só uma pessoa me respondeu, e não foi a pessoa que tinha pedido a opinião dos colaboradores…

Claro que devido a não terem ido todos os colaboradores, ouve alguns que chegaram ao pé de mim, e me perguntaram: “O que raio é aquele email que tu enviaste?”

Ora isto só vem é cair mal, estive para ali eu a perder o meu tempo a escrever um email, à procura de informações para ser algo que fizesse sentido, expondo as minhas ideias e conceitos para que se podesse evoluir, e no entanto nem uma resposta obtive da pessoa que “me” veio pedir ajuda/opinião..

Ora pede-se a opinião das pessoas e depois nem se dá cavaco? Humm… não me parece nada bem…

Mas isto também pode ser problema meu… se calhar é suposto não esperar uma resposta, nem que seja uma do género: “Não, esquece lá isso, nós não estamos minimamente interessados em ir por essa via…”, ao menos ficava a saber que tinham lido o email, assim nem sei…

Um bem haja a todos..

2009
09.02

… é assim:

Embedded video from CNN Video

Como se poder ver, é exactamente igual a milhares de empresas existentes em Portugal… ( para quem não percebeu estou a ser sarcástico )..

Ora se em algumas empresas em Portugal, até ver um vídeo no Youtube é considerado um insulto à produtividade, imaginem as salas recreativas onde existem consolas/instrumentos musicais e afins.. então isto é o descalabro..

Imagino uma empresa em Portugal onde sirvam o pequeno-almoço e almoço de borla, imagino o que iria acontecer… toda a gente ia querer ir trabalhar para lá ( mesmo não recebendo o subsídio de almoço ), ora se toda a gente queria ir trabalhar para lá, o que é que acontecia? Os melhores dos melhores iriam lá parar, sem excepção..

Já tinha falado sobre este tema num post do meu outro blog: “Fazer as coisas bem feitas!“, neste caso falava do exemplo da Fog Creek Software, uma empresa que desenvolve aplicações baseada nos estados unidos, ora estes têm um problema bastante grande, as grandes empresas na América são a Google, Yahoo e Microsoft, e como é lógico, estas levam sempre os melhores programadores para as suas trincheiras, não só pelo nome mas pelas excelentes condições de trabalho…

Mas estes fizeram de tudo, para criar um escritório onde qualquer potencial colaborador que fosse lá a uma entrevista, ficasse completamente babado e deixasse de pensar em ir parar à Microsoft ou Google ou Yahoo…

Quando é que será que os gestores portugueses vão reparar nestes pormenores, quando é que vão perceber que é preciso uma pessoa divertir-se no trabalho para fazer um bom trabalho, e quando digo divertir-se não é divertir-se com o trabalho, é desligar/descontrair, lançar uma piada ou cometer um erro exageradamente estúpido onde toda a gente se fica a rir…

Eu adoro aquilo que faço, mas se não fosse os meus colegas de trabalho e eu a quebrar a monotomia do dia a dia, acho que nunca iria ser feliz a programar…

Aquela história toda dos cúbiculos, para mim não pega de maneira nenhuma, para mim tem de ser “open space”, para poder haver comunicação e discussão de ídeias..

Ouvi uma vez uma proposta de uns chefes em que consistia em criar cúbiculos numa sala que devia ter uns 7 x 5 metros ( mais coisa menos coisa ) onde estavam 6 pessoas a trabalhar… que coisa mais idiota que alguma vez foi proposta.. mas enfim…

As mentalidades em Portugal têm que mudar, e eu acho que isso só vai acontecer quando houver sangue novo nas posições de gestor, será a próxima geração? Será já a minha geração? Não sei, sei que quando os gestores da época Google/Yahoo/Microsoft entrarem a funcionar em pleno, aí sim, teremos uma mudança nas condições de trabalho que serão assustadoras mas no entanto bastante melhores…

Um bem haja a todos…