Entity Framework: Editar um registro modificando apenas algumas propriedades

Category : Desenvolvimento

No exemplo abaixo, a entity Pessoa tem vários propriedades, mas no POST da action Edit só vai poder alterar o Nome e a DataNascimento

View Code CSHARP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[HttpPost]
public ActionResult Edit(Pessoa pessoa)
{
	if (ModelState.IsValid)
	{
		db.PessoaSet.Attach(pessoa);
 
		System.Data.Objects.ObjectStateEntry entry = db.ObjectStateManager.GetObjectStateEntry(pessoa);
		entry.SetModifiedProperty("Nome");
		entry.SetModifiedProperty("DataNascimento");
		db.SaveChanges();
 
		return RedirectToAction("Index");
	}
	return View(pessoa);
}

A História de Bel Pesce – A Menina do Vale

Category : Empreendedorismo

A Menina do Vale – Como o empreendedorismo pode mudar sua vida

Category : Empreendedorismo

 

Iniciativa? Trabalho em equipe? Networking? Determinação? Quais são as coisas que podem fazer toda a diferença para quem sonha em empreender?

Em A Menina do Vale, Bel Pesce conta o que tem aprendido em sua jornada empreendedora e cita diversos cases de sucesso que mostram como o perfil empreendedor pode mudar uma vida.

Se prepare para mergulhar em histórias cativantes, que mostram que tudo é possível se você se dedicar de cabeça e coração.

DOWNLOAD DO LIVRO

 

Nascida e criada em São Paulo, Bel estudou no renomado Massachusetts Institute of Technology (MIT). Durante a faculdade, trabalhou na Microsoft, Google e Deutsche Bank, e terminou vários cursos: Engenharia Elétrica, Ciências da Computação, Administração, Economia e Matemática, além de fazer programas em Liderança e Inovação.

Desde pequena, Bel gosta de criar idéias e começar projetos, e já esteve envolvida com muitas startups. Após se formar, resolveu viver no Vale do Silício, onde se respira empreendedorismo. Liderou três times de engenheiros na companhia americana Ooyala e mais recentemente se juntou ao time fundador da Lemon. Apenas 3 meses após o lançamento, a Lemon já conta com mais de 1 milhão de usuários.

Bel é uma grande defensora de que todos os sonhos são atingíveis e de que a força está dentro de cada um de nós. Sua história possui episódios completamente improváveis e Bel acredita piamente que qualquer pessoa é capaz de alcançar os seus sonhos. Você pode conhecer mais da sua história nesse vídeo e no seu site pessoal.

Sempre dando o melhor de si, Bel recebeu diversos prêmios no MIT, na Microsoft e na Google, foi finalista de uma série de competições de planos de negócios e é uma Sandboxer e TED Fellow, dentre muitos outros reconhecimentos.

Redimensionar imagem mantendo a proporção (Atualizado)

Category : Desenvolvimento

Algoritmo para redimensionar imagem mantendo a proporção

View Code CSHARP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static System.Drawing.Image Redimensionar(System.Drawing.Image image, int NewWidthMax, int NewHeightMax)
{
	float Fator = 0;
	if (image.Width / WidthMaximo > image.Height / HeightMaximo)
		Fator = (float)image.Width / WidthMaximo;
	else
		Fator = (float)image.Height / HeightMaximo;
 
	int NewWidth = (int)((float)image.Width / Fator);
	int NewHeight = (int)((float)image.Height / Fator);
 
	Bitmap newImage = new Bitmap(NewWidth, NewHeight);
	using (Graphics gr = Graphics.FromImage(newImage))
	{
		gr.SmoothingMode = SmoothingMode.HighQuality;
		gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
		gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
		gr.DrawImage(image, new Rectangle(0, 0, NewWidth, NewHeight));
	}
 
	return newImage;
}

Split no Sql Server

Category : Desenvolvimento

Function Split para Sql Server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ALTER FUNCTION [dbo].[Split](@Input VARCHAR(MAX), @Var VARCHAR(MAX))
	RETURNS @Return TABLE (ID INT, Item VARCHAR(MAX))
BEGIN 
	DECLARE @ID INT 
	SET @ID = 0
	WHILE CHARINDEX(@Var, @Input) > 0 BEGIN
		SET @ID = @ID + 1
		INSERT INTO @Return VALUES (@ID, LTRIM(SUBSTRING(@Input, 0, CHARINDEX(@Var, @Input))))
		SET @Input = SUBSTRING(@Input, CHARINDEX(@Var, @Input) + 1, LEN(@Input) - 1)
	END 
	INSERT INTO @Return VALUES (@ID + 1, LTRIM(@Input))
	RETURN 
END
GO
 
-- Teste 01
SELECT * FROM Split('aaa aab aba abb', ' ')
 
-- Teste 02
SELECT * FROM Split('aaa,aab,aba,abb AAA', ',')

DotNetXMLHttpRequest no NuGet

Category : Desenvolvimento

Para instalar o DotNetXmlHttpRequest via NuGet, é necessário ter instalado o NuGet Package Manager. Depois abra o console de comando (menu Tools > Library Package Manager > Package Manager Console)  e execute o comando abaixo ou instale o Manage NuGet Packages.

PM> Install-Package DotNetXmlHttpRequest

Exemplo de uso da classe:

View Code CSHARP
1
2
3
4
5
6
7
8
9
10
11
12
using DotNetXmlHttpRequest;
class Program
{
    static void Main(string[] args)
    {
        XMLHttpRequest xml = new XMLHttpRequest();
        xml.Open(XMLHttpRequest.EnumMethod.GET, "http://ycaro.net/");
        xml.Send();
        System.Console.Write(System.Text.RegularExpressions.Regex.Match(xml.responseText, "(.*)"));
        System.Console.ReadLine();
    }
}

eXtreme Go Horse (XGH)

Category : Uncategorized

Metodologia de desenvolvimento mais usada no mundo

eXtreme Go Horse (XGH)

1- Pensou, não é XGH.

XGH não pensa, faz a primeira coisa que vem à mente. Não existe segunda opção, a única opção é a mais rápida.

2- Existem 3 formas de se resolver um problema, a correta, a errada e a XGH, que é igual à errada, só que mais rápida.

XGH é mais rápido que qualquer metodologia de desenvolvimento de software que você conhece (Vide Axioma 14).

3- Quanto mais XGH você faz, mais precisará fazer.

Para cada problema resolvido usando XGH, mais uns 7 são criados. Mas todos eles serão resolvidos da forma XGH. XGH tende ao infinito.

4- XGH é totalmente reativo.

Os erros só existem quando aparecem.

5- XGH vale tudo, só não vale dar o toba.

Resolveu o problema? Compilou? Commit e era isso.

6- Commit sempre antes de update.

Se der merda, a sua parte estará sempre correta.. e seus colegas que se *****.

7- XGH não tem prazo.

Os prazos passados pelo seu cliente são meros detalhes. Você SEMPRE conseguirá implementar TUDO no tempo necessário (nem que isso implique em acessar o BD por um script malaco).

8- Esteja preparado para pular fora quando o barco começar a afundar… ou coloque a culpa em alguém ou algo.

Pra quem usa XGH, um dia o barco afunda. Quanto mais o tempo passa, mais o sistema vira um monstro. O dia que a casa cair, é melhor seu curriculum estar cadastrado na APInfo, ou ter algo pra colocar a culpa.

9- Seja autêntico, XGH não respeita padrões.

Escreva o código como você bem entender, se resolver o problema, commit e era isso.

10- Não existe refactoring, apenas rework.

Se der merda, refaça um XGH rápido que solucione o problema. O dia que o rework implicar em reescrever a aplicação toda, pule fora, o barco irá afundar (Vide Axioma 8).

11- XGH é totalmente anárquico.

A figura de um gerente de projeto é totalmente descartável. Não tem dono, cada um faz o que quiser na hora que os problemas e requisitos vão surgindo (Vide Axioma 4).

12- Se iluda sempre com promessas de melhorias.

Colocar TODO no código como uma promessa de melhoria ajuda o desenvolvedor XGH a não sentir remorso ou culpa pela cagada que fez. É claro que o refactoring nunca será feito (Vide Axioma 10).

13- XGH é absoluto, não se prende à coisas relativas.

Prazo e custo são absolutos, qualidade é totalmente relativa. Jamais pense na qualidade e sim no menor tempo que a solução será implementada, aliás… não pense, faça!

14- XGH é atemporal.

Scrum, XP… tudo isso é modinha. O XGH não se prende às modinhas do momento, isso é coisa de *****. XGH sempre foi e sempre será usado por aqueles que desprezam a qualidade.

15- XGH nem sempre é POG.

Muitas POG’s exigem um raciocínio muito elevado, XGH não raciocina (Vide Axioma 1).

16- Não tente remar contra a maré.

Caso seus colegas de trabalho usam XGH para programar e você é um coxinha que gosta de fazer as coisas certinhas, esqueça! Pra cada Design Pattern que você usa corretamente, seus colegas gerarão 10 vezes mais código podre usando XGH.

17- O XGH não é perigoso até surgir um pouco de ordem.

Este axioma é muito complexo, mas sugere que o projeto utilizando XGH está em meio ao caos. Não tente por ordem no XGH (Vide Axioma 16), é inútil e você pode jogar um tempo precioso no lixo. Isto fará com que o projeto afunde mais rápido ainda (Vide Axioma 8). Não tente gerenciar o XGH, ele é auto suficiente (Vide Axioma 11), assim como o caos.

18- O XGH é seu brother, mas é vingativo.

Enquanto você quiser, o XGH sempre estará do seu lado. Mas cuidado, não o abandone. Se começar um sistema utilizando XGH e abandoná-lo para utilizar uma metodologia da moda, você estará fudido. O XGH não permite refactoring (vide axioma 10), e seu novo sistema cheio de frescurites entrará em colapso. E nessa hora, somente o XGH poderá salvá-lo.

19- Se tiver funcionando, não rela a mão.

Nunca altere, e muito menos questione um código funcionando. Isso é perda de tempo, mesmo porque refactoring não existe (Vide Axioma 10). Tempo é a engrenagem que move o XGH e qualidade é um detalhe desprezível.

20- Teste é para os fracos.

Se você meteu a mão num sistema XGH, é melhor saber o que está fazendo. E se você sabe o que está fazendo, vai testar pra que? Testes são desperdício de tempo, se o código compilar, é o suficiente.

21- Acostume-se ao sentimento de fracasso iminente.

O fracasso e o sucesso andam sempre de mãos dadas, e no XGH não é diferente. As pessoas costumam achar que as chances do projeto fracassar utilizando XGH são sempre maiores do que ele ser bem sucedido. Mas sucesso e fracasso são uma questão de ponto de vista. O projeto foi por água abaixo mas você aprendeu algo? Então pra você foi um sucesso!

22- O problema só é seu quando seu nome está no Doc da classe.

Nunca ponha a mão numa classe cujo autor não é você. Caso um membro da equipe morra ou fique doente por muito tempo, o barco irá afundar! Nesse caso, utilize o Axioma 8.

 

Site oficial: http://gohorseprocess.wordpress.com/extreme-go-horse-xgh/

 

Arvixe Web Hosting = Hospedagem Windows + Sql Server ilimitado por menos de 12 reais

Category : Propaganda

A Arvixe é uma empresa de hospedagem web, com sede em Santa Rosa, EUA.

Com 5 dólares por mês, é possível ter um host muito bom, com vários serviços ilimitados. Entre outras coisas, o Arvixe possuí:

SQL Server ilimitado
MySQL ilimitado
Contas FTP ilimitadas
Espaço em disco ilimitado
Transferencia ilimitada
Domínios 6
Sub domínio ilimitado
Caixa de email ilimitado
Streaming de audio e vídeo

Na maioria (se não, todas) dos serviços de hospedagem nacional, é necessário pagar um adicional para ter isso ilimitado

Apesar de ser no Estados Unidos, pode ser feito pagamento por Paypal ou Google Checkout, o que torna muito fácil, seguro e NÃO PRECISA de cartão de crédito internacional.

O atendimento é muito eficiente. Eu precisei do suporte para resolver um problema e fui muito bem atendido. 

A Arvixe tem a hospedagem e suporte muito melhor do que a maioria das hospedagens do Brasil. Com toda essa facilidade e qualidade, vai contratar hospedagem nacional por que?

Sql Server: Converter números para extenso (Atualizado)

1

Category : Desenvolvimento

Converte números para extenso entre 0 e 999999999.99.

O código abaixo retorna o número por extenso no formato Real (R$). Para usar outros tipos, é só mudar o texto na última FUNCTION [dbo].[NExtenso].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
CREATE FUNCTION [dbo].[NExtenso_Extenso](@Num INTEGER)
	RETURNS VARCHAR(50)
AS
BEGIN 
	-- Por Ycaro Afonso 03/12/2011
	-- V 0.1
	RETURN CASE @Num 
		WHEN 1000 THEN 'Mil' WHEN 1000000 THEN 'Milhões' WHEN 1000000000 THEN 'Bilhões'
		WHEN 100 THEN 'Cento' WHEN 200 THEN 'Duzentos' WHEN 300 THEN 'Trezentos' WHEN 400 THEN 'Quatrocentos' WHEN 500 THEN 'Quinhentos' WHEN 600 THEN 'Seiscentos' WHEN 700 THEN 'Setecentos' WHEN 800 THEN 'Oitocentos' WHEN 900 THEN 'Novecentos'
		WHEN 10 THEN 'Dez' WHEN 11 THEN 'Onze' WHEN 12 THEN 'Doze' WHEN 13 THEN 'Treze' WHEN 14 THEN 'Quartorze' WHEN 15 THEN 'Quinze' WHEN 16 THEN 'Dezesseis' WHEN 17 THEN 'Dezesete' WHEN 18 THEN 'Dezoito' WHEN 19 THEN 'Dezenove'
		WHEN 20 THEN 'Vinte' WHEN 30 THEN 'Trinta' WHEN 40 THEN 'Quarenta' WHEN 50 THEN 'Cinquenta' WHEN 60 THEN 'Sessenta' WHEN 70 THEN 'Setenta' WHEN 80 THEN 'Oitenta' WHEN 90 THEN 'Noventa' 
		WHEN 1 THEN 'Um' WHEN 2 THEN 'Dois' WHEN 3 THEN 'Tres' WHEN 4 THEN 'Quatro' WHEN 5 THEN 'Cinco' WHEN 6 THEN 'Seis' WHEN 7 THEN 'Sete' WHEN 8 THEN 'Oito' WHEN 9 THEN 'Nove' 
		ELSE NULL END
END
GO
 
CREATE FUNCTION [dbo].[NExtenso_Fator](@Num INTEGER)
	RETURNS INTEGER
AS
BEGIN 
	-- Por Ycaro Afonso 03/12/2011
	-- V 0.1
	IF @Num < 10 RETURN 1
	ELSE IF @Num < 100 RETURN 10
	ELSE IF @Num < 1000 RETURN 100
	ELSE IF @Num < 1000000 RETURN 1000
	ELSE IF @Num < 1000000000 RETURN 1000000
	ELSE IF @Num < 1000000000000 RETURN 1000000000
	RETURN NULL
END
GO
 
CREATE FUNCTION [dbo].[NExtenso_Convert](@Num DECIMAL(18, 6), @Fat DECIMAL(18, 6))
	RETURNS VARCHAR(1000)
AS 
BEGIN 
	-- Por Ycaro Afonso 03/12/2011
	-- V 0.1
	DECLARE @Ret VARCHAR(1000), @_Num DECIMAL(18, 6)
	SET @Ret = ''
	SET @_Num = 0
 
	IF @Fat > 0 BEGIN 
		IF @Num = 1000000000 BEGIN 
			SET @Ret = @Ret + ' Um Bilhão'
		END ELSE IF @Num = 1000000 BEGIN 
			SET @Ret = @Ret + ' Um Milhão'
		END ELSE IF @Num = 1000 BEGIN 
			SET @Ret = @Ret + ' Um Mil'
		END ELSE IF @Num = 100 BEGIN 
			SET @Ret = @Ret + 'Cem'
		END ELSE IF @Num > 10 AND @Num < 20 BEGIN
			SET @Ret = @Ret + ISNULL(dbo.NExtenso_Extenso(@Num) + ' e ', '')
		END ELSE BEGIN 
			IF @Fat >= 1000 BEGIN 
				SET @_Num = CAST((@Num - (@Num % @Fat)) * (CAST(1 AS DECIMAL(18, 6)) / @Fat) AS INTEGER)
 
				IF @_Num = 1 BEGIN 
					SET @Ret = @Ret + ISNULL(dbo.NExtenso_Convert(@Fat, @Fat * .1), '')
				END ELSE BEGIN 
					SET @Ret = @Ret + ISNULL(dbo.NExtenso_Convert(@_Num, dbo.NExtenso_Fator(@_Num)), '') + ' ' + ISNULL(dbo.NExtenso_Extenso(@Fat), '')
				END 
 
				SET @_Num = @Num - (@_Num * @Fat)
 
				SET @Fat = dbo.NExtenso_Fator(@_Num)
 
				SET @Ret = @Ret + CASE WHEN (@Fat > 100 OR @Fat < 100) AND CAST((@_Num - (@_Num % @Fat)) * (CAST(1 AS DECIMAL(18, 6)) / @Fat) AS INTEGER) < 100 THEN ' e ' ELSE ', ' END + ISNULL(dbo.NExtenso_Convert(@_Num, @Fat), '')
			END ELSE BEGIN 
				SET @_Num = @Num - (@Num % @Fat)
				SET @Ret = @Ret + ISNULL(dbo.NExtenso_Extenso(@_Num) + ' e ', '') + dbo.NExtenso_Convert(@Num - @_Num, @Fat * .1)
			END 
		END
	END 
	RETURN REPLACE(REPLACE(@Ret + '.', ' e .', ''), '.', '')
END
GO 
 
CREATE FUNCTION [dbo].[NExtenso](@Num DECIMAL(15, 2))
	RETURNS VARCHAR(1000)
AS 
BEGIN 
	-- Por Ycaro Afonso 03/12/2011
	-- V 0.4
	DECLARE @Ret VARCHAR(500)
	IF @Num > 0 BEGIN 
 
		SET @Ret = ''
		SET @Ret = dbo.NExtenso_Convert(@Num, dbo.NExtenso_Fator(@Num)) + 
			CASE FLOOR(@Num) WHEN 0 THEN '' WHEN 1 THEN ' Real' ELSE ' Reais' END + 
			CASE FLOOR(@Num) WHEN 0 THEN '' ELSE ' e ' END
 
		SET @Num = @Num - FLOOR(@Num) 
		IF @Num > 0 BEGIN 
			--WHILE @Num - FLOOR(@Num) > 0 BEGIN
			--	SET @Num = @Num / .1
			--END 
 
			SET @Num = REPLACE(CAST(@Num AS VARCHAR(20)), '0.', '')
 
			SET @Ret = @Ret + dbo.NExtenso_Convert(@Num, dbo.NExtenso_Fator(@Num)) + CASE @Num WHEN 1 THEN ' Centavo' ELSE ' Centavos' END
		END
	END ELSE BEGIN
		SET @Ret = 'Zero Reais'
	END
	RETURN @Ret
END 
GO
 
-- Exemplo 
SELECT dbo.NExtenso(0)

Primeiro sistema com arduino (Arduino + Botão + Display)

Category : Desenvolvimento

Lista:
1 Arduino
1 Potenciômetro
1 Resistor
1 Botão
1 Display LCD 16×2
Vários fios

Esquema

Código do Arduino

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
 02/09/2011
 by Ycaro Afonso
 */
 
#include 
 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
int BotaoPino = 7;
int qtdeBotao = 0;
int ap = 0;
 
void setup() {
  lcd.begin(16, 2);
  lcd.print("oi");
 
  pinMode(BotaoPino, INPUT);
}
 
void loop() {
  if(digitalRead(BotaoPino) == 1){
    if(digitalRead(BotaoPino) != ap){
      ap = 1;
      qtdeBotao++;
    }
  }
  else if(ap == 1){
    ap = 0;
  }
 
  lcd.setCursor(5, 1);
  lcd.print(qtdeBotao);
}