Raphael's profileC# DevelopersBlogListsNetworkMore ![]() | Help |
C# DevelopersEasy to Learn. Easy to Use. It's C#! |
|||||
|
June 12 Pontos a ponderar…Trabalhar com desenvolvimento é fascinante. As coisas novas, o universo de informação e conteúdo que você adquire, tudo é muito bom, mas o entusiasmo acaba no momento em que você se depara com a falta de organização e o descaso com que a massa trabalhadora, a mão de obra realmente ativa da área, é tratada. É muito difícil trabalhar quando você se depara com analistas despreparados, patrões aflitos e clientes difíceis. Quando digo analistas despreparados, eu não me refiro àqueles que estão no mercado há pouco tempo, tendo que ralar muito para atender o que o mercado espera dele. Eu me refiro a profissionais que estão já há algum tempo trabalhando, que já conhecem o mercado, que sabem como essa máquina funciona. Mas mesmo assim, não sabem (ou sabem, mas não o fazem) como fazer um documento de requisitos, uma documentação de casos de uso, e pra piorar, não sabem como aconselhar o cliente sobre quais são as melhores práticas aplicadas atualmente na informática, sobre a viabilidade ou não de se aplicar tal funcionalidade em seu sistema. Tudo o que o cliente pede é lei, mesmo sendo algo impossível ou impraticável. Muitas vezes o que o cliente pede é inviável, e é nessas horas que cabe ao analista mostrar uma saída mais prática e eficiente. Patrões aflitos são preocupantes. Cadeia hierárquica pra eles parece não ter significado algum. Exigem prazos diretamente dos desenvolvedores, sem consultarem antes como está o nível de trabalho, se está calmo, se está atribulado. Eles querem apenas prazos, e prazos curtos (no mercado atual, rapidez é essencial; mas quando se exige rapidez demasiada, esbarramos em situações-problema), pois assim o pagamento vem mais rápido (nada mais justo, se às vezes isso não esbarrasse na questão rapidez demasiada). Não existe um padrão para se calcular o tempo de trabalho necessário (na verdade há, mas muitas vezes não é aplicado). Tomam quase sempre por base o tempo que um profissional mais experiente levaria, sem considerar que os demais profissionais que trabalham pra ele podem não possuir tanta experiência assim, o que nos leva a atrasos no decorrer do projeto. Não respeitam banco de horas (isso acontece também em outros setores da economia, não é um “privilégio” apenas da área de TI), enrolam até onde podem para dar férias aos funcionários (ídem ao anterior). E não importa se estão na sala ao lado, ou se estão há quilômetros de distância, o comportamento é o mesmo. Para completar o caos total, soma-se a tudo isso o fator “clientes difíceis”. Existe uma política de “maleabilidade” que algumas empresas de software aplicam em seus negócios. Um projeto mais personalizado, mais voltado às necessidades do cliente, fora daquele padrão de sistemas fechados, como vemos em alguns sistemas empresariais (ironicamente, esses sistemas são os mais eficientes e também os mais requisitados no mercado), isso atrai o cliente. Mas quando essa “maleabilidade” é usada pelo cliente para fazer da vida do desenvolvedor um inferno, seja com indecisão quanto ao que ele quer realente, seja com prazos impossíveis, ou com modificações não documentadas e/ou aprovadas, aí chegamos ao fundo do poço. Existem fatores que não citei, mas que também interferem não só na produtividade, mas também nos ânimos de quem trabalha na área. Mas são fatores de importância menor, e não interferem a tal ponto de deixar alguém puto da vida. Não sei dizer se tudo o que eu disse aqui acontece em todo lugar, mas acontece. Também não quero radicalizar ao extremo. Só quero mostrar que, para não haver turbulências dentro de uma empresa, é preciso duas coisas, apenas pra começar: planejamento e comunicação. Planejamento, pois a falta dele leva à documentações incompreensíveis e prazos impossíveis. Comunicação, pois sem ela, não há como fazer um planejamento adequado. Analistas, eu sei que é chato (eu estudo engenharia de software na faculdade, e é chato mesmo), mas procurem fazer uma documentação simples, coesa e de fácil entendimento, com todas as informações necessárias (e aprovadas). Patrões, muita calma. Vocês podem assustar um funcionário ao fazerem isso (a não ser que na empresa seja apenas patrão e funcionários, sem gerentes ou cargos intermediários), despertando repentinamente dentro deles o medo da rescisão contratual. Clientes, se vocês souberem realmente o que precisam, passarem todas as informações necessárias aos analistas, e, de preferência, com tempo hábil para desenvolvimento, o projeto e o cronograma fluirá tranqüilamente sem maiores percalços. Revisado e re-intitulado em 26 de junho de 2009: Retirada a parte sobre stress pessoal. Creio que não interessa a ninguém se eu estava ou estou estressado. June 02 O blog acabou?! Não… Só o blogueiro que está atolado…Isso mesmo, a situação apertou de vez. Tanto no trabalho quanto na faculdade, a coisa tá feia… Tanto que eu não pude pesquisar nada de novo para postar aqui. Mas não se preocupem! Em breve (espero), pretendo voltar com novidades e muitas dicas para vocês. Por enquanto, eu continuo apanhando do LINQ e sofrendo um pouco com CSS e infra… Até o próximo post! January 28 RegisterStartupScript e erros malucos do Asp .NetPost de última hora!!!
Nesses últimos dias andei tendo problemas na hora de adicionar uma folha de scripts (JavaScript) no HTML de um projeto em Asp .Net, coisa que nunca me aconteceu antes. Sempre que eu precisava, eu adicionava a folha da seguinte maneira:
<script src="[Nome do Arquivo].js" type="text/javascript" />
Notem que eu utilizei uma tag de XHTML (adiciono uma barra antes de fechar a tag), e mesmo assim nunca me ocorreu nenhum problema. Até ontem.
Creio que foi até antes, não me lembro bem, mas isso não vem ao caso. O que interessa mesmo é que, de uma hora pra outra, a folha de scripts começou a entrar em conflito com os scripts que o próprio Visual Studio cria. Sendo assim, ao carregar a tela, já surgia o ícone de alerta na barra de status do IE. Ao verificar qual erro era, a informação que era dada dizia o seguinte: "'theForm' is undefined". O problema consiste no fato de que a tal variável "theForm" (que é gerada pelo Visual Studio) existe e está declarada. De alguma maneira, quando eu adiciono a minha folha de scripts, os erros surgem do nada, e quando eu removo a mesma, os erros desaparecem.
Pesquisando feito um louco na internet, eis que o André, meu superior aqui na Fábrica de Softwares, encontrou a solução: registrar a folha de scripts via código. Solução bem simples, que consiste em adicionar a seguinte linha no evento Page_Load de sua página:
Page.ClientScript.RegisterStartupScript(typeof([qualquer tipo]), "[qualquer nome]", "<script type='text/javascript' language='javascript' src='[Nome do Arquivo].js' />");
Problema resolvido?! Pensamos que sim...
A priori, tudo correu bem, pois a página passou a funcionar corretamente. O pior aconteceu depois, quando os menus pararam de funcionar. Voltamos à mesa de projetos... Nessa hora, percebemos que, ao comentar o código que registrava a folha de scripts na página, os menus voltavam a funcionar. Não sei qual o motivo, mas descobrimos depois que não podíamos ter registrado o script em uma tag de XHTML, deveríamos ter colocado em tags de HTML convencional. Sendo assim, o código passou a ser:
Page.ClientScript.RegisterStartupScript(typeof([qualquer tipo]), "[qualquer nome]", "<script type='text/javascript' language='javascript' src='[Nome do Arquivo].js'></script>");
Dizem que o erro ocorria porque, no momento em que a página era criada, a tag não era convertida de XHTML para HTML, se bem que o mais intrigante nisso é que eu já observei tags de XHTML sendo interpretadas normalmente pelo IE, mas pode ser que isso ocorra apenas em tags utilizadas para carregar folhas de estilo (CSS).
Fica a dica: surgiu o erro "'theForm' is undefined", utilizem o segundo método, para evitar conflitos com o javascript que controla o menu (javascript que também é gerado pelo Visual Studio).
O André encontrou a solução neste endereço: http://www.codeverge.net/ng.asp-net-forum.master_pages_themes_and_navigation_controls/theform-undefined, e eu solucionei o restante por acaso.
Até o próximo post! January 21 Parado... Mas observando...Nada desde outubro?! É, o fim de ano foi corrido, tanto na empresa quanto na faculdade... Mas não é o fim! Assim que eu conseguir me organizar, eu volto a postar. Já tenho até em mente o assunto, mas não quero estragar a surpresa... Apenas para deixar um gostinho na boca de vocês, eu posso dizer que tem a ver com Repeaters... Chega, não digo mais nada...
Até o próximo post! October 29 Omitindo itens do MenuE aí pessoal! Esse post de hoje é para aqueles que andam tendo problemas com o objeto SiteMapPath, recurso bem interessante para programadores Web.
Quem nunca se deparou com a seguinte situação: você edita o seu Web.sitemap com todas as páginas que são chamadas através do objeto Menu. Esse mesmo Web.sitemap alimenta o seu SiteMapPath. Ao acessar uma página pelo Menu, o SiteMapPath exibe o título da página, de acordo com o planejado. Eis que agora vem o problema, pois, por algum motivo, você precisa acessar uma página que não possui acesso pelo Menu, e sim por algum outro meio, seja ele um LinkButton, um Hyperlink ou um Button mesmo. O que acontece? Seu SiteMapPath simplesmente desaparece, pois essa nova página não consta no seu Web.sitemap.
A solução é acrescentá-la no seu Web.sitemap. Simples assim?! Ainda não, pois você não que que seu Menu possua submenus, pelo menos não nessa opção. Complicou denovo, não é?! Pois aqui está a solução:
1. Em seu Web.sitemap, acrescente o comando 'showInMenu="false"' na tag que você não deseja que apareça no Menu (essa opção não é nativa do ASP.net, ela só existe para o que faremos mais adiante), conforme mostrado abaixo:
<siteMapNode title="[titulo da página]" url="~/[url_da_pagina].aspx" showInMenu="false" />
2. Acrescente o seguinte código no evento "onMenuItemDataBound" do seu Menu:
protected void [Nome do seu objeto Menu]_MenuItemDataBound(object sender, MenuEventArgs e)
{ SiteMapNode node = e.Item.DataItem as SiteMapNode; if (!string.IsNullOrEmpty(node["showInMenu"])) { bool isVisible; if (bool.TryParse(node["showInMenu"], out isVisible)) { if (!isVisible) { e.Item.Parent.ChildItems.Remove(e.Item); } } } } Essa rotina vai verificar quais nós do seu Web.sitemap possuem o comando "showInMenu". Nos nós que possuírem esse comando, ele vai verificar se o comando recebe um "true" ou um "false". Se for "false", essa opção não será exibida, nem como menu, nem como submenu.
Fácil, não é?! O autor do código é Dave Sussman, e o código se encontra em http://forums.asp.net/t/1133319.aspx.
Até o próximo post! |
|
||||
|
|