Arquivo do mês: fevereiro 2012

How to use # halt in a cascade

#halt é um método da classe Object usado para inserir um breakpoint no interior de um método. Então você pode enviá-lo a qualquer objeto. Entre duas linhas de um método você pode inserir self halt como abaixo:

result := #(1 2 3 4 5) select: [:x| x > 3].
self halt.
Transcript cr; show: 'size: ', result size

Mas numa cascata de chamadas você deve omitir, obviamente, o self e fazer assim:

html
    div id: #cascade;
    halt;
    with: '#halt in a cascade'

Penis Day

A primeira vez que ouvi falar de tal evento foi através do post Pênis e Subjetividade (*).

O mais interessante dos post do Ghiraldelli é a discussão sobre as concepções nietzschianas sobre a “grande e a pequena razão”.

Para confirmar busquei Penis Day no Google.
Esses japoneses são incríveis mesmo.

Infomadri: arapuca?


Estou com um processo contra a Infomadri, no qual Marcelo Strippoli é réu condenado à revelia, já na fase de execução. Tenho alguns dados que podem ajudar quem estiver nas mesmas condições que eu e disposto a trocar informações.

Veja também o googling ‘Marcelo Strippoli’.

A parte aí em cima deste post foi publicada em 17/12/2008.

O site da Infomadri desapareceu da Web mas o cara-de -pau agora está no linkedin. Se você conhece este cara cuidado! É um tremendo 171. Uma vez vi num site que ele praticava o esporte do Kite Surf em Santos. Mas só agora consegui ver a cara do meliante. Vou imprimir para enfiar um alfinetes de voodoo na imagem. Quem sabe dá certo.

No Facebook suspeito que é dele a foto de criança que colocou. Mas o burro esqueceu e deixou outra foto ótima lá:

Ataque das caravelas

Banhávamo-nos em grupo na Praia do Saco quando uma das mulheres que estavam no grupo começou a gritar: “Tira! Tira! tira!”. Era Martinha. Pensei que o peixe boi que frequenta a região tinha aparecido e a assustado. Quando fui me aproximar senti uma lancinante dor na perna. Ao abaixar-me e passar a mão na perna senti mais dor perto do pulso da mão direita. Lembrei logo das caravelas que tem infestado as praias ultimamente. Fomos presas de caça das mesmas. Gritei imediatamente para Carolina retirar Iasmin da água. 

Meu filho correu numa casa próxima e atirou uma garrafa de vinagre para socorrer-nos. Passei um pouco também e consegui algum alívio. Ao voltarmos para casa Neide sugeriu usar água sanitária. Pareceu mais eficaz do que o vinagre. Passamos também uma pomada Duodrat e tomamos Prebsin para prevenir complicações. As caravelas não eram as de Cabral mas sim como a mostrada na imagem abaixo. Estou cheio de colares vermelhos na pele, vestígios dos pontos onde a toxina foi injetada.

Classes from Smalltalk category

Seaside Evaluator Online

Resolvi escrever um avaliador simples de expressões Smalltalk e de expressões para geração de páginas no Seaside (mensagens para o WARenderCanvas).

A interface para o avaliador de expressões em Smalltalk:

A interface para o avaliador de expressões para renderização de componentes:

A solução se baseia principalmente nos métodos:

EVASmalltalkEvaluator>>evaluate: aExpression
    ^ [Compiler evaluate: aExpression] on: Error do: [:error | error]</pre>
EVASeasideCanvasEvaluator>>evaluate: aExpression
    ^ super evaluate: (self wrappedWithCanvas: aExpression)
EVASeasideCanvasEvaluator>>wrappedWithCanvas: aExpression
    ^ 'WARenderCanvas builder render: [:html| ', aExpression , ']'

O file-out completo segue abaixo:

WAComponent subclass: #EVABaseEvaluator
	instanceVariableNames: 'expression result'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'Evaluator-Core'!

!EVABaseEvaluator methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/21/2012 12:51'!
evaluate: aExpression
	self subclassResponsibility ! !

!EVABaseEvaluator methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/21/2012 13:53'!
example
	self subclassResponsibility ! !

!EVABaseEvaluator methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/21/2012 12:07'!
renderContentOn: html
	html heading: self evaluatorName.
	html horizontalRule .
	html form: [
		self renderExpressionAreaOn: html.
		self renderEvaluateButtonOn: html.
		self renderResultAreaOn: html
		]! !

!EVABaseEvaluator methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/21/2012 12:41'!
renderEvaluateButtonOn: html
	html submitButton with: 'Evaluate' ! !

!EVABaseEvaluator methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/21/2012 13:52'!
renderExpressionAreaOn: html
	html textArea
	value: self expression;
	callback: [:value| self expression: value. self result: (self evaluate: self expression)];
	with: 'Enter expression here. Example: ', self example.! !

!EVABaseEvaluator methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/21/2012 12:44'!
renderResultAreaOn: html
	html textArea value: self result; with: 'Result goes here'! !

!EVABaseEvaluator methodsFor: 'accessing' stamp: 'FranciscoAryMartins 1/21/2012 12:19'!
expression
	^ expression! !

!EVABaseEvaluator methodsFor: 'accessing' stamp: 'FranciscoAryMartins 1/21/2012 12:19'!
expression: anObject
	expression := anObject! !

!EVABaseEvaluator methodsFor: 'accessing' stamp: 'FranciscoAryMartins 1/21/2012 12:48'!
result
	^ result! !

!EVABaseEvaluator methodsFor: 'accessing' stamp: 'FranciscoAryMartins 1/21/2012 12:48'!
result: anObject
	result := anObject! !

WAComponent subclass: #EVAEvaluatorApplication
	instanceVariableNames: 'smalltalkEvaluatorComponent seasideCanvasEvaluatorComponent'
	classVariableNames: ''
	poolDictionaries: ''
	category: 'Evaluator-Core'!

!EVAEvaluatorApplication methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/21/2012 13:34'!
seasideCanvasEvaluatorName
	^self seasideCanvasEvaluatorComponent evaluatorName! !

!EVAEvaluatorApplication methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/21/2012 11:36'!
smalltalkEvaluatorName
	^self smalltalkEvaluatorComponent evaluatorName! !

!EVAEvaluatorApplication methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/21/2012 12:01'!
tab: html
	html space. html space. html space. html space
	! !

!EVAEvaluatorApplication methodsFor: 'accessing' stamp: 'FranciscoAryMartins 1/21/2012 13:30'!
seasideCanvasEvaluatorComponent
	^ seasideCanvasEvaluatorComponent! !

!EVAEvaluatorApplication methodsFor: 'accessing' stamp: 'FranciscoAryMartins 1/21/2012 13:30'!
seasideCanvasEvaluatorComponent: anObject
	seasideCanvasEvaluatorComponent := anObject! !

!EVAEvaluatorApplication methodsFor: 'accessing' stamp: 'FranciscoAryMartins 1/21/2012 11:49'!
smalltalkEvaluatorComponent
	^ smalltalkEvaluatorComponent! !

!EVAEvaluatorApplication methodsFor: 'accessing' stamp: 'FranciscoAryMartins 1/21/2012 11:49'!
smalltalkEvaluatorComponent: anObject
	smalltalkEvaluatorComponent := anObject! !

!EVAEvaluatorApplication methodsFor: 'initialization' stamp: 'FranciscoAryMartins 1/21/2012 15:50'!
initialize
	super initialize.
	self smalltalkEvaluatorComponent: EVASmalltalkEvaluator new.
	self seasideCanvasEvaluatorComponent: EVASeasideCanvasEvaluator new! !

!EVAEvaluatorApplication methodsFor: 'rendering' stamp: 'FranciscoAryMartins 1/21/2012 15:46'!
renderContentOn: html
	html heading: 'Evaluator'.
	html horizontalRule.
	html text: 'Select evaluator:'.
	self renderSmalltalkEvaluatorAnchorOn: html.
	self renderSeasideCanvasEvaluatorAnchorOn: html! !

!EVAEvaluatorApplication methodsFor: 'rendering' stamp: 'FranciscoAryMartins 1/21/2012 13:23'!
renderSeasideCanvasEvaluatorAnchorOn: html
	html
		div: [
			self tab: html.
			(html anchor)
				callback: [ self call: self seasideCanvasEvaluatorComponent ];
				with: self seasideCanvasEvaluatorName ]! !

!EVAEvaluatorApplication methodsFor: 'rendering' stamp: 'FranciscoAryMartins 1/21/2012 13:22'!
renderSmalltalkEvaluatorAnchorOn: html
	html
		div: [
			self tab: html.
			(html anchor)
				callback: [ self call: self smalltalkEvaluatorComponent ];
				with: self smalltalkEvaluatorName ]! !

"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!

EVAEvaluatorApplication class
	instanceVariableNames: ''!

!EVAEvaluatorApplication class methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/21/2012 11:55'!
initialize
	"
	self initialize
	"
	WAAdmin register: self asApplicationAt: 'tools/evaluator'! !

EVABaseEvaluator subclass: #EVASmalltalkEvaluator
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	category: 'Evaluator-Core'!

!EVASmalltalkEvaluator methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/21/2012 12:59'!
evaluate: aExpression
	^ [Compiler evaluate: aExpression] on: Error do: [:error| error]! !

!EVASmalltalkEvaluator methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/21/2012 11:57'!
evaluatorName
	^ 'Smalltalk Evaluator'! !

!EVASmalltalkEvaluator methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/21/2012 13:54'!
example
	^ '2 + 3'! !

EVASmalltalkEvaluator subclass: #EVASeasideCanvasEvaluator
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	category: 'Evaluator-Core'!

!EVASeasideCanvasEvaluator methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/29/2012 10:48'!
evaluate: aExpression
	^ super evaluate: (self wrappedWithCanvas: aExpression)! !

!EVASeasideCanvasEvaluator methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/29/2012 10:46'!
evaluate_del: aExpression
	^ [Compiler evaluate: (self wrappedWithCanvas: aExpression)] on: Error do: [:error| error]! !

!EVASeasideCanvasEvaluator methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/21/2012 13:05'!
evaluatorName
	^ 'Seaside Canvas Evaluator'! !

!EVASeasideCanvasEvaluator methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/21/2012 13:54'!
example
	^ 'html div'! !

!EVASeasideCanvasEvaluator methodsFor: 'as yet unclassified' stamp: 'FranciscoAryMartins 1/21/2012 13:20'!
wrappedWithCanvas: aExpression
	^ 'WARenderCanvas builder render: [:html| ', aExpression , ']'! !

EVAEvaluatorApplication initialize!

Existe em http://seafox.seasidehosting.st/ uma opção interessante na Web que ajuda a construir interfaces programaticamente em Smalltalk no Seaside a partir de exemplos em HTML.