sexta-feira, 14 de agosto de 2009

10 Steps High Performance CF

1. Analise de logs
Todos os logs usando janela de 7 dias.
Uso de logs para manter o foco nos problemas.

2. Ferramenta de teste
SeeFusion 4.0.7 para testes de URL (disse que eh mais fácil de usar, mas eh paga)
Pode usar o JMeter tb
A vantagem de usar essa é que tudo está na mesma janela e segundo o cara é mais fácil de mexer, pois não existem configurações presentes no Jmeter.

Ele começou com 20 usuários para tentar achar os erros e depois foi crescendo.
2s de delay, 15 minutos de teste

A ferramenta gera logs com o uso threads e de memória inclusive.
O default do CF é usar 25 threads. Vc pode ver pelo delay nos logs como está sua app.
Se vc começa a ter delays com as threads, vc percebe que a performance começa a degradar rapidament.

Ele costuma usar o heap space da jvm em 1Gb. O que é mole com as máquinas de hoje.

É importante sempre deixar objetos para o Garbage Collector na parte young do que old para melhorar a preformance. O CF gera mais objetos que as aplicações java comuns. Observar se o GC está cheio.

O grafico que ele usa pra tirar conclusoes eh o Spectrum of Click Times (4d).

iPhone Apps + ColdFusion

Palestra realizada pelo Modormo Sinistro.

Ate agora ele não falou nada de mais.

iPhone + ColdFusion
iPhone = client device with safari browser
ColdFusion = Server Application

Iphone + Coldfusion

Construção de Iphones Apps sem Objective-C só com html, javascript e css.

O Iphone ainda não tem um suporte decente para flash.

O CF serve tanto para browser como data-provider para o iphone
Obviamente não é possível acessar os devices do iphone via browser...

Mais banda a ser consumida, e menos updates em relação a app em Objective-C.
É de graça, não precisa hospedar na AppleStore (US90,00), em compensação, o usuário deve acessar seu site (com o qr code e uma conexão eh moleza)

20 dias até a aprovação pela Apple!

Essa é uma palestra (do mordomo sinistro) para te convencer a usar a plataforma CF pra fazer aplicativos para o Iphone. Se vc faz apenas visualização de dados blz, cc não tem como competir com a aplicação escrita pro telefone....

No exemplo do camarada ele criou uma view de depois inseriu uma web-view dentro com o endereço da aplicação. Esta é uma maneira simples de colocar seu aplicativo no telefone sem programar nada. Desta forma vc continua pagando, mas tem o seu "link" no telefone do cliente.

Frameworks para criar apps do iphone sem objective-C:
Nimblekit (http://www.nimblekit.com)
PhoneGap (http://phonegap.com/) <- dá pra fazer aplicativo pra Android e Black tb
QuickConnect (http://quickconnect.sourceforge.net/browser/index.html)

Performance Tuning CF

Identification:
. listen to what your server is trying to tell you
. enable slow page loggin
. obtain and analyze a heap dump
. review memory utilization with visual vm and visual gc plugin
. investigate method calls with hpjmeter
. capure a sql trace during peak production site load

dica: Interessante habilitar o kernel times no taskmgr para identificar problemas no servidor. ver linhas do grafico

Slow page Loggin:
. enable in cf
. process the server.log with findslow.cfm (cfcode.com) to get a report on the most often used slow templates.

heap dump:
.
obtain a heap dump. -XX:+HeapDumpOnOutOfMemoryError
VisualVM (app -> heap dump)
. Review the heap dump in netbeans or visualvm
===> quando o CF trava ele escreve um arquivo no /bin. (sobreescreve o ultimo criado)

HPJmeter
.
Capture method invocation data
. Identify lingering objects (mem leaks)

Not always about the code
. network issues - identify overload nic with task mgr, host issues (ping pathping), wireshark (packet listing)
. ports open (free extended task mgr).
. identify overload disk resources (check memory , cpu, processes, disk i/o)
. poorly configured database - capture a .trc file using sql profiler with 'tuning' profile selected (in production). Run .trc through database tuning advisor (available on sql standard or higher) and quickly locate database slow-downs, and even implement recommended fixes.
-- the more sample the better the result.

o tracer contem todas as execucoes que foram feitas naquele banco de dados durante o periodo capturado, o software ira executar essas operacoes e verificar onde estao os gargalos na db especificada.

in the end its all about user perception

.
enable gzip compression of static site assets
. combine css and js for faster loading
. enable expiration tags for images, css, and js files for future date.
. use a tool like yslow to id user-side issues.
. testing with tools like jmeter can help you get a better user perspective on site performance.

Chris Peterson
www.alagad.com
cpeterson@alagad.com
(888) alagad4 ext 369
override11 twitter

ColdFUsion 9 OverView

Putz, quem esta dando a palestra é o indiano que fala indigles.

New in ColdFusion 9
  • Object Relation Mapping
  • Portal Integration
  • SOA
  • Enhanced Ajax Tool Kit
  • e outro que nao consegui anotar
Changes
  • Performance
  • Tags and built in funsctions
  • Server Administrator
Performance
  • Caching (page fragment caching), object cache
  • UUID Key Generator
  • New Search Engine with Soir (lucent based tec), faster indexing
  • Improved Clustering (serialization of querys, arrays)
  • Improve CFC creation & runtime
  • Generated getter/setter CFCs
  • Application cfc/cfm lookup order can be specified (avoid file seach on disk)
Language Changes
  • UDFs in CFC can use buit in names
  • Multiple assigments a=b=c=expr;
  • Implicit arrat/struct in ternary expression (a>b ? c : d,c and d can be inline array or struct
  • cfpdf
  • cftransaction

CFPDF
  • Size optimization
  • Extract text & images
  • Create PDF package
  • Transform a PDF page
  • Thumbnails generator
  • Adding Watermark
  • Name & destination attribute
  • Add & Delete headers & Footers
CFTRANSACTION
  • Add nestings attribute
  • Helps calling others modules
CFMAIL
  • New Atributes in server administrators
  • Added support signing the mail
  • keystore
  • others
CFDUMP
  • abort cfdump abort=true agora tem abort
  • matainfo (show extra info)
CFQUERY
  • generated id colums
CFCOOKIE
  • New HTTP only atribute
  • Can use HTTPS for better security
CFHTTP
  • Youtube upload
  • MultupartType
New Bult In Functions
  • Array functions
  • List functions
  • File & Directory functions
  • Object related
  • isNULL
Array
  • array cintains
  • arrayfind
  • arrayfindnocase
  • arraydelete
List
  • takes new boolean atributes
  • more functions to includeempytyfields
  • List is a string
  • Operation by tokenizing a list like java
File
  • RAndom Access File
  • FileOpen
  • FileSeek
  • FileSkipBytes
Directory Functions
  • Directory Create
  • Directory List
  • Directory Delete
  • Directory Rename
OBJECT
  • Object Save
  • Object load
  • Object Equals
isNULL
  • check null passed variable or expression
  • Useful in ORM
  • Faster alternative to isDefined
  • No need quotes
getVFSMetadata
  • gets in memory file system metadata (enable, limit, used, free)
Server & Application
  • Application Stop
  • Application.cfc settings
  • onServerStart
  • onCFCRequest
Application Variables
  • Datasource
  • Ormenable
  • ORM settings
  • smtpServer settings
  • Timeout
  • debug ip address
  • Google Map Key
  • Enable robust exception
OnServerStart
  • Specify a CFC in admin with onServer Method
  • Default to server on webroot
  • Specify timeout
  • cfhttp calls to itself not possible
onCFCRequest
  • separate calls to cfm and cfc invocations
  • Support Ajax & Flash Remoting calls
  • Direct CFC calls, webservices calls pass-through
Administrator Change
  • New MySQL driver from database
  • Query timeout data source
  • a new admin property - disable autogenkeys
  • added new undelivered mail manager
  • setting summary can be saved as PDF

Geolocation

Geolocation é a identificação de localidades geográficas usando um device eletronico.

A palestra é sobre a identificação da posição do usuário para qualquer fim. Ex. maps, directions, marketing....

1. Métodos de detecção da posição.
Blablabla

2.Detectores / Conversores de dados de geolocation
geonames.org
ipinfodb.com
ip2location.com
maxmind.com
hostip.info
ipligence.com

3.Ferramentas para o coldfusion
InetAddressLocation

SimpleGeoCode no site da RiaForge

São ferramentas úteis para identificação do usuário.
Pode ser interessante para apresentar ao cara restaurantes ou vinhos mais próximos da localidade dele...
Acredito que quando tivermos o site a nivel nacional/internacional essas features podem ser mais úteis...

4. Tags do CF
[cf_gMap..
Nessa tag vc dá a sua chave do google api e mais um monte de parametros....
[cf_gMapMarker

No CF9 tem o CFMap
[cfmap...
vc bota cep, latitude, zoom, endereço, handlers para javascript, vistas de satelite/hibridas...


Se nao usar isso pode usar o Railo CFmap

Para Flex/Flash tem: http://www.adobe.com/devnet/flex/tourdeflex
http://code.google.com/apis/maps/documentation/flash


É palestra do mesmo russo (turco) daquela "super palestra do coldfusion escalavel".
Regular, essa cara é meio 171.

Coldfusion na real

Coldspring na real

http://wiersmablog.com

É um framework MVC baseado em injeção de dependência

Foi apresentada a arquitetura comum de uma aplicação CF
View, Controllers (CFM, etc...), Service objetcs, Gateways e DAOS, DB
Beans (objetos do dominio) em paralelo

1. Parte 1 (Container)
Foi apresentado um Service tipico do CF
um facade para criacao de daos, gateways, services..sempre instancia objetos a cada request
com o Coldspring vc cria beans que vao gerenciar estos objetos (usa singletons para reduzir o numeo de criação de objetos a cada requisição do serviço)

Coldspring é focado em fazer configuraçãoes e dependencias mais fáceis de serem gerenciadas
É um container de objetos (todo objeto dentro dele eh um singleton, vc só muda a referencia)

Não é recomendável para guardar tudo, apenas coisas comuns a toda aplicação

Usa xmls para configuração

2. Parte 2 (AOP)
Pode criar CFCs on the fly para integrar melhor o CF com outros produtos da Adobe
Vc pode criar Factories para objetos com facilidade

Vc pode programar orientado a aspectos, inserindo código ortogonal a aplicação sem sujar o código.'
Caching, loggin, métodos remotos..


3. Conclusão
É um framework interessante para tarefas da aplicação, não da view.

Intro to OO Modeling and Design

Speaker: Brian Kotek

What is Good Design:
  • Elegant
  • Simple
  • Robust
  • Flexible
  • Appropriate
Design == Trade offs

Its all about Art and Science

Where To Start???
  • Requirements and Use Cases
  • Identify Nouns and Verbs: Nouns(Costumer) Verbs (LogIn)
Commonality and Variability
Wine, Restaurants, Regions

Design Principles
  • Single Responsibility Principle (Do one thing, but do it well)
  • Dry (Dont repeat your self)
  • Open / Closed (open for extension but closed for modification)
  • Tell, Dont Ask
  • Law of Demeter (employee.pay())
  • Design to Interfaces
  • Encapsulation (Do in cfc), data, type, reveal by need
Indicator of Design Quality
  • Loose Coupling / Connascence (Objects should not depends on a lot of other objects, keep dependencies small)
  • Interface Coupling (user.addUser() )
  • Inheritance Coupling (price = super.price * discount)
  • Cohesion
  • Class Reference Set (You have to know how many objects depends of that specific object)
  • Testability
Theory Meets Real Life
  • Is there Such a Thing? Very Difficult
Olhar os softwares de XML, OO e outros da Altova INC

www.briankotek.com/blog
www.alagad.com
Search for Calisthenics (Parece ser bom)

Keeping Front Ending Dependencies

Reducing front ending pre loading to improve performace

Dependencies:
  • JavaScript
  • CSS
5 Steps
  • Organize and plan
  • location matters
  • load smart, load once
  • mazimize caching opportunities
  • Optime, minify and compress
Organization and Plan Java Script Library
Spry, jQuery, Prototype,, YUI, EXT.js, DOJO, GWT

Classic Pairings
  • ColdFusion + Spry
  • ColdFusion + EXT
  • ColdFusion + jQuery
Externalize Scripts, at the Bottom (colocar todos os scripts no fim da página)

head
...
...
link Script
/head

body
...
...
script
/body

Com o ColdFusion tambem é possivel jogar o javascript para ser processado para o servidor
cf_scriptalizer

Minify & Compress
  • minify everything for production (strip out white space, comments, extra character to minimize file size
  • Gzip files over 1 or 2K (browser entendem gzip)
Cache
  • use external scripts
  • use google-hosted libraries for caching benefit
  • set expires header on common scripts
  • configure entity tags on clusters
Olhar o JSLint para analisar performance de codigo em java script

CSS
  • externalize cdd, at the top (uma das primeiras coisas do head
  • Minify
  • Create groups of related styles (search hooks)
Olhar Reset CSS - comprehensive : Eric Meyer, Basic: YUI (yuilibrary.com)

Toward Modular CSS
Build a grid system
http://24ways.org/2008/maging-modular-layout-systems
BlueprintCSS
960 Grid System
YUI Grids

Working with Multiple Files
  • Good: organize by purpose
  • Bad: problematic organize by rule type
IMAGES
Organization and Planning
images: logo, structure, content
PNG files are your friends
jpegs for photos

Use CSS Sprites for nav tabs, buttons, icons
Do you realy need an image? Use CSS3 (corners, radius, RGBa)
Usar igual ao Yelp, carregar uma unica imagem com um monte de coisas e usar um shift para mostrar só aquela parte que vc quer.

Essential Tools
  • FireBug
  • YSlow
  • FireFox web developer tool bar
Summary
  • Organize and plan
  • Location matters
  • Load Smart
www.riaunleashed.com
rmaxim.blogspot.com
@raelehman

DB Performance Tuning

Damon Brown
dabrown@policy-studies.com

Cause of poor performance:
. Stale or missing statistics
. Lack of appropriate indexes to support your query
. SQL that is inefficient by design
. Misuse or poor use of Oracle features
. ..

SQL tuning:
. trial and error
. guessing
. use materialzied views or temporary tables or ebuild tables and indexes

tuning methodoly
. methor R - fast effective easy (book optimizing oracle performance by oreily)
1. identify 2. measure response time 3. optimize 4. repeat until best optimal

understanding reponse time:
. rt = wait time + service time
. st = cpu time => joining, parsing etc
. wt = watiint on a n event

tuning objectives:
. set clear and well defined performance goals
. how do you met your goals?
. remember that timings are ultimately what is imporat to the business
. the scope of a solution to a perfmrnace problem should match the scope of the problem

tools:
. dbmps_xplan
--- retrieves exectuion plan of the query, sequence of operations, rolleup cost of each op, remember this in a prediction
. 10046 sql trace
. awr (dw)

good and bad plans:
. do not automatically jump to the conclusion that a bad plan contains full table scans and a good plan olny uses index
...

Database tuning

1.Causas de baixa performance no banco:

2. Metodologias de sql tunning
Tentativa e erro, adivinhamento, revisão do modelo de dados, uso de views materializadas e reconstrução de views, uso de estatisticas

3. Metodologia
Method R - Response Time
Optimizing Oracle Performance by Orely

Identificar tarefas importantes, medir o tempo (r), otimizar do jeito mais economico, repetir até que a economia tenha custo beneficio ótimo
r = wait time (i/o) + service time (cpu)

Foram apresentadas algumas ferramentas oracle e muitos relatórios exclusivos oracle

CF and Ajax Driven Pages

A palestrante está demonstrando vários exemplos de uso de ajax para enriquecer as páginas feitas pelo CF

1.Componentes
[cffileupload...
Existem algumas funções do próprio cf em javascript que servem como handlers para operações de file upload.

[cfprogressbar...
O mesmo é aplicável a progress bars.
ColdFuison.ProgressBar.hide(progressBar)

[cfmessagebox...
alertviews com opções, alertas, ou mesmo campos...

[cfslider...
controle para ajuste de valores em um range (o que haviamos pensado para dar avaliações de vinhos)

[cfslider name="slider" format="html" clickToChange="true" min="1" max="10" increment="1" value="5" tip="true" onchange="setNumberValue"]
JS disable/enable/getValue/setValue/hide/show

[cflayout type="accordion"]
é aquele box que expande conforme a seleção, parecido com o iphone


A idéia geral é definir o componente que vc quer colocar na página e especificar handlers para tratar eventos que o componente executa.

2.Melhorias trazidas para o CF9
O CFgrid ganhou mais opções para o usuário organizar os dados, ele pode agrupar e agora tb tem várias opções de ordenamento, tudo implementado de graça na cftag

3. Dynamic Binding
É o tipo de ligação mais utilizada para dar comportamento aos componentes
cfmap tem uma ligação com o marcador, o cfprogressbar com o processo da progressão, e cfmediaplayer com a fonte do video

A apresentadora demonstrou um clone do itunes feito somente com CF, usando interfaces ricas com o uso de ajax
Tem até overlays com a interface de um player, e videos
sinistro

ColdFusion + Ajax - Driven User Interfaces

cfmediaplayer: carrega um built in media player do proprio ColdFusion para passar um streaming de video, existem varios javasripts neste tag para várias interações do video com mapas ou outros objetos nas página.

cffileupload: Display a dialog uploading multiple files from user computer. Muito bom para carregar fotos dos usuarios, fotos dos vinhos, fotos dos pratos para harmonização.

Ex:
cffileupload extensionfilter="jpg,jpeg,png" maxfileselect = "number of files" maxuploadsoze= "file size in mega bytes" name = "file upload name" oncomplete = "java script function name"

JS Functions para CFUPLOAD:
  • ColdFusion.FileUpload.cancelUpload(name)
  • outras ...
Progress Bar:
cfprogressbar: defines a progress bar indicate the progress of an activity

cfprogrssbar name ="identificador" autoDisplay="true or false" bind="bind expression" duration="time value" interval="time in miliseconds" onComplete="function name" onError="Java Script"

Para vc ter uma função completa, vc tem que usar o cffileupload junto com a cfprogressbar.

MesageBox = Muito legal em ajax, pode pedir até para entrar com dados
cfmessagebox = Defines a control for display pop-up messages

Slide The Values:
cfslider: defines a control to enter values within a range
Serve para o formulario do vinho, slider do formulario para selecionar as características do vinho, muito legal.

Layout = ja tinha essas funções no ColdFusion 8, mas agora funciona em Ajax, antes era só em flash.
cflayout type="accordion", podemos usar com cuidado no formulario do vinho

GridEnhancements
Title for grids = cfgrid title="nome"
  • Dynamic display columns
  • column sorting
  • collapse grig
  • row grouping
  • adding date type
  • checkbox selection
  • row insertion
  • delimiter in grideow
  • hearder icon for grid in column headers
  • OnloadEvent
Agora é obrigado especificar o width e o hight da grid.

Dynamic Binding
  • cfmap - bind marker content
  • cfprogressbar
  • cfmediaplayer
  • Autosuggest = matchcontains
  • cfwindow = destryonclos
Outro tipo de layout é o Border e Tab para ajax

Tem um componente para Tree Object, Slider, getWindows

Com o novo cfmap, vc pode gerar uma série de marcações no mapa já com as informações das vinículas direto no mapa da Google.

quinta-feira, 13 de agosto de 2009

CFGroovy

Groovy extende a sintaxe de java
Dinamicamente tipada, interpretada ou compilada.
Acesso direto a java (boa para integração no código cfml)

A sintaxe eh mais simplificada no entanto perdemos com a despadronização.
É necessário um compilador e jvm específico para rodar.

O uso desta linguagem requer treinamento específico e como não devemos utilizar muito no código da winetag, não parece ser uma boa opção.

Advanced ORM

Blog: www.manjukiran.net
Manjukiran Pacchhipulusu
Senior Lead Software Engineer

O indiano mostrou as configurações padrões no Aplication.cfc e no Employee.cfc

O HQL deve ser gerado dentro de um cfproperty
Ex: cfproperty name="orders" formula="select Count(*) from employee

Relationship tambem vai em uma cfproperty
cfproperty name="relationshipid" fieldidtype="many-to-many" cfc="ordes" fkcolumn="employeeID"

Olhar: http://www.manjukiran.net/2009/07/15/coldfusion-orm-define-one-to-many-and-many-to-one-relationships/


Dentro do cfproperty tem um parametro chamado cascade que vc especifica o que acontece com os filhos do relacionamento.

Procedimentos ColdFusion
Aplication Start - Orm Enable? - Load Hibernate configuration - Load Hibernate mappings
Search for persistent CFCs - Generate DDL base on dbcreate - build hibernate session factory - proceed with other activities

Advanced Mapping
- Collection Mapping = similar to 1:n relationship
- Inheritance Mapping = Types: hierarchy, per subclass without discriminator
- Embedded Mapping = refers to another cfc
- Join Mapping = use one cfc for multiple tables

ORM Session
- Automatically managed by CF
- All ORM operations happen in a session
- ORM Session Management - Transactions

Load Relationships - cfproperty
-timestamp
-immediate fetching
-lazy fetching
-eager fetching
-batch fetching

Caching
-session level
-secondary level

A configuração default do cache ja serve a principio para nossa necessidade

Advanced ORM

http://www.manjukiran.net/

Foi dada uma breve explicação do processo de transformação de operações sobre objetos em operações sobre tabelas em indiano.

1. Application.cfc
[cfcomponent]
[cfset this.name = "orm_cfunited"
[cfset this.ormenabled = true
[cfset this.datasource = "winetag"
[cfset this.dialect = "MSSQL" //Nao peguei

2.Employes.cfc
[cfcomponent persistent="true" entityName="employees" table="tb_employees"
[cfproperty name="employeeId"
[cfproperty name="name"
[cfproperty numberOforders formula="select count from ..."
[cfproperty name="order" fieldtype="many-to-one" cfc="orders" fkcolumn="orderId"]
//cria um array de orders que podem ser pegos a partir da instancia deste funcionario

3. Test.cfm
EntityLoad("employees",1,true) //chama pelo employee id=1
empObj.hasOrders()
[cfdump var="#empObj.getOrders()#"] //mostra o array de orders

Para salvar apenas um campo de um objeto é preciso carregar ele todo em memória e salvar. Não há com o que se preocupar em relação a performance devido ao cache do Hibernate.

4. Como o ORM eh habilitado
Quando a aplicação é iniciada ela ve se o hibernate está habilitado, se estiver cria a configuração se especificada, daí carrega os hbm.xml
Procura então pelos CFCs persistentes, daí o CF gera os arquivos de mapeamento hbm.xml inspecionando o banco.
Gera DDL baseada no dbcreate e cria a session factory do hibernate

5. Mapeamento de herança
.Uma tabela por hierarquia
.Uma tabela por subclasse sem discriminador (cliente / store / restaurant)
.Uma tabela por subclasse com discriminador


6. ORM Sessions
representa a conversasao entre a app e o db
todas operacoes acontecem quando a sessao eh terminada (nao deve ter problemas com lazy loading)
se usar o [cftransaction action="begin"... a sessao eh terminada no fim da transacao

7. Concorrencia
Usa o lock otimista
propriedades, all (todos os campos sao lockados), dirty apenas os campos da sessao, version (versao da coluna colocado no banco), nenhum

ex. name="lastmodified" fieldtype="timestamp|version"

8. Loading
.Imediate fetch="select"
.Lady lazy="true", lazy="extra"
.Eager carrega tudo de uma vez na memoria, util para relacionamentos 1:1
.Batch antecipa dados carregados em memoria

9.Cache
Session level (dados somente para a sessao)
Secondary Level (querys e collections)

no App.cfc
ormsettings.secondarycacheenabled
ormsettings.Cacheprovider (default eh o ehcache)
ormsettings.cacheconfig="ehcache.xml"

uso:
read-write

é possível limpar objetos no cache diretamente e sobrescrever listeners para executar operacoes quando um objeto entrar ou sair do cache
ormsetting.eventhandling="true

É possível fazer o CF gerar as tabelas a partir do cfc automaticamente, com um namingStrategy e methodNamingStrategy

hkhandel@adobe.com
Hemant Khandelwal

Mandar dúvida sobre http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WS027D3772-2E98-4d5b-8800-054A62EBF8D9.html

Introdution to ORM

ORM mean write less SQL, write less code.

ColdFusion use Hibernate.

OLD Query
Easy to write but hard to maintain

OLD WAY, write everything in CFC, encapsulate, easy to write, very hard to maintain.

New ORM

Easy to write, more free time

A quantidade de codigo escrito do ORM comparado com o InLine code é quase a mesma coisa.
Só que o ORM é mais fácil de manter.

Long Life to ColdFusion

ColdFusion Community. Ideas.

Jolt Intelligent Enterprise

Alternativa para ColdFusion: http://www.getrailo.org/

CFML Advantages:
Easy to learn
Extensions for common business purposes

Exemplos:
http://www.slidesix.com
http://www.myswitzerland.com

Hack Proofing 2

1. Insecure Direct Object Reference
Nao mostrar os ids reais do banco para os usuários (e nosso caso do vinho???)
chaves primárias, mudar para CreateUUID()

Ou usar hash(user_id) e fazer o mesmo para validar...
semelhante ao que eh feito com passwords encriptados no banco de dados

2. Cross Site Request Forgery
Com a vítima logada,
[img src="deleteUser.cfm?user_id=1"]

Por isso evitar ao máximo usar os ids reais
Nunca usar GET passando parametros pela url...
Re-autenticação em páginas sensíveis
Checar dados passados como parametros com o que tiver guardado em sessão se aplicavel.

3. Information Leakage and Improper error Handling
Não deixar aparecer erros de código para o usuário pois pode passar detalhes de funcionamento para um hacker. Pode incluir informações de código, arquivos, banco, etc...

Desabilitar Debugging em producao
Definir páginas 404
Usar [CFERROR]
Usar códigos para erros sensíveis ao invés de mensagens
Mostrar apenas "login failed" na autenticação, nada de "senha errada"...

4. Broken Authentication and Session Management
Loging Tampering, Brute Force
Session Hijacking

pelo menos 8 caracteres de password com letras e numeros
não enviar passwords por email
expirar passwords e não permitir repetições
Acesso restrito depois de tentativas falhas de login
Não ser muito restritivo para os usuários, fazer a primeira pelo menos.
Mudar e-mail, pedir senha
Usar SSL no login
Gerar nova session na autenticacao
usar J2EE Sessions (fecha sessao ao fechar o browser)
usar a UUID no CFToken
controlar o timeout de sessao
desabilitar cache do browser para essas areas protegidas
session cookies para HTTPOnly

checar variaveis CGI
usar funcoes de [CFLOGIN] e [CFNTAuthenticate]

5. Insecure Cryptographic Storage
O nome diz tudo.
Nunca gravar os passwords em clear text no banco
Usar pelo menos Hash()

6. Insecure communication
Usar SSL para informações sensíveis
Se for usar cartoes de crédito e tal no futuro tem que seguir um padrão (pelo menos nos EUA).

7. Failure to Restrict URL Access
Não usar gets para fazer ações
Checar permissoes em todos requests
Controlar o acesso por um lugar apenas (mais seguro com sessions que com cookies)
Se deixar arquivos do tipo .old .bak junto com os outros arquivos o browser pode retornar o código da aplicação!
bloquear acesso a arquivos que nao interessam ao usuario (.ini, xml, etc...)


8. CF Admin

disable flash remoting
acess to internal cooldfusion java comps
watch conf files for changes
request timeout = 10 segundos
checar "prefix serialized Json"
enable global script prot
setar max size do post
mudar client variables do registro
usar logs do OS tb
cf service as user
criar um privilegio de usuario para cada DSN
sandbox app

http://www.adobe.com/devnet/coldfusion/security.html
http://www.shlomygantz.com/blog

Charting and ColdFusion

Raymond Camden
Twitter: cfjedimaster

Options:

-ColdFusion Native Charting
-Google Charts
-XML/SWF Charts
-Flex Charting

O novo ColdFusion suporta Charting nos formatos Flash, JPG, PNG.

O ColdFusion tem um editor de Charting (Charting Editor) que vc pode configurar o servidor para alregar os tags do cfcharting e configurar para funcionar do seu jeito. Tem que ir na pasta cfcharting na instalação do ColdFusion.

Ele não gosta do design dos chartings criados.

-----------------------------------------------------------------------------------------

Google Charts

Export PNG only
Line, Bar, Pie, Venn, QR Codes, Maps

O problema do Google Charting é que vc tem que colocar todos os dados a serem gerados em uma URL, fica uma URL gigante, com todos os dados que vc quer gerar, o problema é que vc
fica limitado na capacidade de dados da URL. Tem um design melhor que os graficos do ColdFusion.

O Flex charting é legal, mas muito trabalhoso, não vale a pena usar o Flex só para charting, ele só gera flash e tem que ser gerado toda vez que ele for acessado.

O que vale mais a pena de usar é o chat do cold fusion.

Ele falou que é possível gerar baked charts, ou seja, são gráficos já calculados que vc ja acessa ele pronto, vc não tem que gerar ele toda vez que carregar a pagina.

Ele falou para usar o cfcache para guardar o chart por mais tempo e nao calcular toda hora.

Recommendations:
Use cfchartings

ray@camdenfamily.com

Se tivermos alguma duvida, enviar um email para ele.

Hack Proofing

Ataques na aplicação
.Interpretação de HTTP request, SQL querys, Mensagens da aplicação
.Difícil de identificar e replciar
.Ataques efitos com códigos simples e com ferramentas gráficas (Paros, Netcat)
.Mais perigosos que ataques de infra (servidores), pois vai no core da empresa e para o conserto haverá necessidade de re-design

www.owasp.org 10 top list

1. XSS (cross site scripting)
Eum script no browser da vitima para roubar as informações de sessão, desfigurar sites, inserir conteúdo, fazer pishing
No exemplo o cara mostrou que podia inserir um código javascript no textbox, com isso ele pegou os dados da sessao do cara e inseriu código dele na página dando um redirect pra outro site.

Quando for mostrar o conteúdo inserido pelo usuário usar a função HTMLEditFormat() para desabilitar os códigos inseridos. Isso tb ajuda a resolver o ataque seguinte.

2. Input Validation
O cara pode mudar atributos passados em atributos hidden (ex. preço de uma mercadoria)

Validar o código no cliente e no servidor. Usar os validadores do próprio CF isNumber(), maxLength(), etc,,,
Especificar o encoding

Usar regexs no neo-security.xml para remover [object] etc...
CF_XSSBLOCK

3. Injection Flaws
SQL Injection e HTML Injection

Dá pra visualizar todos os dados do banco de dados inserindo código em uma consulta.
O html eh muito semelhante.
Ex. colocar um comentario no fim de um item de uma lista, e fechar no ultimo item, assim o browser nao vai mostrar os dados corretos, o que pode enganar um administrador que só usa o browser por exemplo.

Dá pra fazer um ataque XSS desta forma tb.

Usar PreserveSingleQuotes, CFQUERYPARAM, permissões de sgbd, desabilitar XP_cmdshell e equivalentes
Em resumo... nunca deixar single quotes ''

tools: wsdigger, sqlmap


4. Remote file Inclusion
execução remota de código, instalação de rootkit
ex. upload de arquivos dos usuários

O camarada passa um arquivo cfm por exemplo com código para execução de código no servidor
Dá pra fazer um terminal via browser do nosso servidor...

Usar no cffile os accepts "image/jpg" JUNTO com isImageFile(), isPdfFile()...
(validacao cliente/servidor)

Upload dos files fora do webroot, limitar o tamanho , mudar o nome quando receber com user_id e data por exemplo

jQuery Form Validation

jQuery is an Ajax Based Framework.
No jQuery, primeiro vc precisa mostrar onde ele acha o que vc quer fazer
e aonde e depois executa.

$(#some id) - mostra onde achar

Ele procura pelas IDs do CSS

Vc manda ele mudar em algum lugar pela ID do CSS daquele lugar
Ex: Eu tenho uma box com ID chama #INTRO

No jQuery vc começa assim $(#INTRO), ou seja, o comando sera executado
no box intro.


Hoje é quase obrigatorio fazer as paginas todas em CSS sendo controladas
por jQuery
e ColdFusion.

Custom Form Selector:
contains, checked, selected, enable, disable, next, prev, chuldren, simblings,
filter.


Vc pode mandar ele procurar por radio buttons selecionados e abilitar box
escondidos,
isso vai ser muito bom para o formulario de avaliação dos vinhos.

As manipulaç≤oes no formularios podem adicionar campos, remover campos,
alterar
atributos, alterar conteudo.

Precisamos aprender jQuey para usar nesta primeira versão do site.

Tem uma função chamada wrap que pode dividir e repartir o formulario para
organizar
o layout quando algo for selecionado.

CSS + jQuery + ColdFusion are perfect together.

Usar jquey search para facilitar busca.

Ele mostrou um exemplo igual a nossa busca, tem um select para dizer o que
deve ser
procurado (vinho, pessoas, viniculas) e depois tem um campo para o
usuario escrever
o que ele deseja procurar. Depois o jQuery carrega a busca
em baixo do campo sem
precisar carregar a pagina novamente.

Olhar o site www.texotela.co.uk/code/jquery/select/

quarta-feira, 12 de agosto de 2009

Living in The Cloud

Living in the cloud

1. Definição
Recursos virtualizados
escalabilidade dinâmica
Servico disponibilizado na net

Pros
Barato pois vc paga pelo que usa
Não precisa de uma infra cara (que pode inviabilizar um porjeto/empresa)
Escalabilidade fácil (teoricamente)

Cons
Questoes de segurança e privacidade (não conhece o ambiente real / servidor)
Questoes legais/geográficas
Padrões

2. Tipos diferentes

.Infra como um serviço
(baixo nivel, pay per use, Ex. Amazon)


.Plataforma como serviço
(emerging, deployment em uma camada de software, ex. Azure, Force.com, Stax, Heroku)
(te oferecem uma vm e vc instala o servico)

.SaaS
(High level apps, Ex. Google Office, Facebook, Hotmaill)


3. Anatomia usando o Amazon como exemplo

.Arquitetura tradicional
Usuario <-> Web Server <-> App Server <-> DB Server

.Amazon Web Services
(Vc coloca uma imagem (snapshot de um servidor), que segue um padrao, no Amazon
EC2 (computação), S3 (persistencia acessivel pela web), EBS (persistencia fixa)

Usuario <-> Web Server <-> App Server <-> DB Server (EC2)
|
| Code |
|
Assets <-> AM <-> DAta (S3/EBS)


4. Problemas
.persistencia (catastroficas)
.um IP por imagm (restricoes de SSL)
.mandar um email de um serviço destes pode fazer seu email entrar numa blacklist de um gerenciador de spam (ip unico)
.S3 expoe arquivos via web (solucao meia boca: criar urls temporarias para os arquivos)

5. Considerações de Design
.gerenciamento de conteudo
.escalabilidade horizontal:
.nao há replicacao de sessao
.deve ter uma configuração proxima de zero
.questoes de cache e sincronizacao

6. Migrando para a nuvem
.Fazer backup de tudo direto!
.controlar versao das snapshots enviadas
.Usar deployment automático para imagens não ficarem obsoletas quando trocar
.Nao há persistencia tradiconal: pensar em um file server para suprir arquivos pra app!

7. Performance do Amazon
EBS é mais rapido que EC2
CPU é rapida, e armazenamento lento

8. Licensing
Ambientes virtualizados nao conhecem o numero de cpus
CF9 vai ter esquema diferente, pensando em cobrar por hora

9. Começando...experiencia do cara
AWStats em uma instancia pequena do EC2 (10 cents a hora)
Nagios para monitoramento
Backup por 3 dolares para uma S3
EC2 para teste
(comentário do cara: conhece uma empresa que faz testes em escala usando isso.
pagam 10 cents por hora com centenas de instancias diferentes!)
Model Glue / Coldspring
CF8 enterprise com permissão da adobe
Mysql / linux
Groovy/Spring/Hibernate/Jboss
S3 pra servir o iphone

10. Pros/Cons
Só vai sentir os benefícios se pensar na aplicação pra nuvem
O tempo de deploy de uma imagem e de quase um dia no modo manual
Hoje ainda é muito dependente de scripts em linux para gerenciar as imagens

CF911 - Server Troubleshooting

When the stuff hits the fan...

Scenarios:

CF Stops Responding
. restart coldfusion - nao necessariamente resolvera o problema.
. olhar os logs - na maioria das vezes nao te dao informacao suficiente ou relevante
. softwares de monitoramento - qual? builtin? procurar a ferramenta certa
. outras opcoes - procurar no google

Ferramentas
. CFSTAT e PERFMon integration
cmd line, reports high lvl measures: number of requests running, queued, avg ret time, etc. (bult-in cf/bin). Doesnt work in multi-server mode.

. Performance Monitor Stats
Provides cfstat measures in Windows Perfmon

. Adobe features enable in CF admin

Problema: avg queue time é uma media entre os dois ultimos requests!!!! mesmo que tenha acontecido ha muito tempo atras.

. GetMetricData()
mesmo do cfstat com aparencia do perfmonitor.

. Jrun Metrics
cf6-8. inclui threads, memory usage, j2ee errors, etc.
http://tutorial351.easycfm.com
www.adobe.com/go/tn_19120

. Cf8 server monitor (enterprise, developer)
melhor opcao de monitoramento. Bastante completa e customizavel.
www.carehart.org/articles/#2007_2
necessario tomar cuidado com algumas configuracoes de monitoramento (memory tracking!!) que podem fazer um load extremamente excessivo no servidor o que fará com que o mesmo fique sem resposta e, portanto, sem acesso tambem a pagina de administracao. REINICIAR O SERVICO NAO RESOLVE O PROBLEMA!

Ferramentas comerciais
. Fusion Reactor - Interessante, pois avisa o usuario de possiveis problemas via email, alem de ter um log bastante detalhado e permitir uso de scripts.
. SeeFusion

O que é importante verificar com esses softwares:
. Verificar todos os requests em execucao
. Poder terminar requests longos
. Ver requests anteriores
. Ver detalhes de cada query executada em cada request
. Ver stack trace
etc.

Outras:
. Cf ajax System Monitor
. FlexMon CF Monitor
. Scope Enhancer
. ServerStats
. WhosOn CFC

www.cf411.com/#cfmon
www.cf411.com/#sysmon

Para Webservers:

. IISTracer, comercial
. ManageEngine ApplicationsManager, free e comercial

www.cf411.com/#wsmon
www.cf411.com/#sitemon

Para Java:
GlassBox, JaMonApi, JManage (opensource)

www.cf411.com/#appmon

Http Request:
Importante para software do iphone?!
Fridler, Firebug, ColdFire, Yslow
Charles, ServiceCapture (comercial)

www.cf411.com/#proxy

Tcp Monitor:

Database monitor:
. Sql Server PRofiler, Sql Server Trace
. Simpel SQL Server Monitor
. MYsql Monitor, Mytop

www.cf411.com/#dbmon

www.cfperformance.com!!!!!!!!!!!!!!!!!
carehart.org/presentations

Clustering Myths and Legends

Algumas considerações:

.Clustering nao significa load balance!
. J2EE clustering do ColdFusion nao clusteriza o servidor web.
. Aumentar o numero de servidores nunca irá significativamente aumentar a redundancia dos dados. É melhor utilizar apenas 1 servidor potente do que dividir em varios.
. Considerar fazer clustering desde o primeiro dia de desenvolvimento.

Desafios:

. Sincronização das Copias do Codigo
. Session Variables - client variables?
. Application Variables - Request Scope?
. Hard coded localization - directory paths, ip addresses
. Third Party Devices - Databases etc.

Algoritmo recomendado: round robin (utilizado pelo cf8 cluster manager)

Mike Brunt - mbrunt@go2ria.net
http://www.cfwhisperer.com
(+1) 888.511.2821 usa only
+1.562.243.6265 intl.

Aplicações escaláveis com o CF

1.Escalabilidade
Habilidade do servidor de manter o site funcionando corretamente com o aumento do tráfego crescendo.

2. Confiabilidade
consistêcia, tempo de recuperação, tempo de up/down, erros

3.Razões para prolemas de performance em ordem:
Hardware/Network, código, DB, bibliotecas externas, usuários

4. Como escalar?
Verticalmente: Adicionar recursos, virtualização, cloud (melhor)
Horizontalmente: Adicionar nós (clustering, balanceamento de carga, particionamento)
Vertical:Cada nó tem um papel específico (web, app, database, search)
Horizontal: Todos com o mesmo papel e recursos distribuídos

Foram apresentados algumas tecnologias como RAID, clustering, etc...

5. Código escalável
Qualidade de desenvolvimento:
Ambientes (dev, test, prod, ...), controle de versão, integração contínua com o Hudson (teremos testes automáticos?)
Deployment com o Ant

6. Database
Clustering (ativa/passiva), nós read-only, particionamento, design, código (index, locks, etc..)

7.Arquitetura
Padrões de código, boas práticas (CFC, OO), MVC

8. Teste
Infra, Testes unitários/integração/UI/regressão/carga, integração contínua

9. Internacionalização
Faça o design da aplicação primeiro, depois internacionalize!
Unicode / Locales

Conselho: O uso correto do escopo de variáveis impacta significamente na performance.
Tomar cuidado pra não subutilizar variaveis globais e nem ficar instanciando novos objetos!

Conclusão: Foram comentados os assuntos os tópicos acima, não foi apresentada nenhuma novidade para nós. Esperava mais pela propaganda feita em torno desta palestra.

Hands On Css Part I

Files: http://senduit.com/406ae4 Exemplos da aula de CSS.

Apresentadora: Dee Sadler

Esta aula passou pelos seguintes topicos de CSS:
menus
layouts
marginCollapse
roundedCorners
Dynamic Css

CSS BASICS:
slectors
cascading
Box
Best Practices

--------------------------------------------

SELECTORS EXAMPLE:

ID (#)
# only 1 Per Page (Muito Dificil)
Class (.)
. RepeatTableItem
Tags
body, p, a, ul, h1-h6
Advanced / Compound
ul li a, footer a

--------------------------------------------

Usar FireBug para melhorar o reuso do CSS e entender como o CSS esta sendo usado.

Principles:
-Layout
-Color
-Imagery
-Forms

Elastics Layout = based on ems
Liquid Layout = basedon % of your screen size
Hybrid = em for sidebar % for content wrappers

Extensao para o firefox : WebDeveloper

Best Practices:
  • Avoid inline styling whenever possible
  • Use consisstent semantic markup when possible (h1 must be the samo throught site)
  • Module vs Content
  • Avoid non-standard browser fonts
  • Choose bling with caution = rounded corners, drop shadows, etc
  • Never Use Times New Roman
  • Floats - no not the ice cream kind (Hard to Control)
Floats: Horizontal, vertical, left, right

O resto foi fazendo o codigo CSS na pagina junto com ela.

Reator (ORM Railo Framework)

1. Motivação
.diminuir o tempo de desenvolvimento e manutenção de operações de persistência em banco
.ganhar idependência do banco de dados
.diminuir erros causados pela repetição (sem pensar)

Design patterns ajudam mas não resolvem (DAO com tabelas)
.muito código e arquivos e muita repetição (para cada entidade)...

Database abstraction generators (xmls com o mapeamento)
O que hibernate faz com os arquivos de configuração + camada de acesso aos dados (DAO)

2.Reactor (Inline Dynamic Database Abstraction API)
http://trac.reactorframework.com
.gera objetos só quando necessários
.nao gera controllers
.usa xmls nao convenções
.aceita querys do tipo OO e convencionais

examplo de uso (igual ao orm do cf9???):
//chamada de metodo para criacao de objeto


Realmente fácil de criar métodos de acesso as classes (objetos, coleções, coleções com where = campo escolhido)
Utilizam o padrão Gateway.

Relacionamentos (hasOne e hasMany)
Objetos ficam com "bags" de outros objetos (como no hibernate)

O arquivo de configuração do framework eh semelhante ao xml do hibernate

3. Trabalhos futuros
.Integração com o Amazon Simple DB (investigar o que é)
.Suporte ao hibernate (quando a Ralio decidir)
.Soft delete / ignore columns, IBO (??)
.Criação de tabelas por definições (caminho inverso)
.framework de validação (emails e essas coisas)
.getByFilter (chamada de método passando os valores dos campos para filtrar)
.Injeção de dependência (http://en.wikipedia.org/wiki/Dependency_Injection) para melhor integração com o ColdSpring

4. Minha impressão
Só vale a pena usar se tiver que usar o CF8 e realmente estiver afim de usar ORM. Dá menos trabalho do que a gente viu, mas não sei se na hora que os problemas aparecerem vamos ter mais dor de cabeça....Com o CF9 (ORM) acho que esse framework fica meio obsoleto...

Parece um hibernate só pra coldfusion.

O tempo para desenvolvimento da camda de persistência é realmente rápido e com pouco código.

Pros:
.É interessante pois não precisamos de criar métodos para cada entidade (CRUD + coleções com wheres = campo escolhido)
.Open Source

Cons:
Usando a solução padrão de ORM do CF9 ganhamos:
.controle fino da aplicação, se preciso
.suporte maior a documentação para resolver problemas
.mesmo mapeamento para CF e Java caso seja preciso
.novos frameworks surgirao em cima desta feature, talvez o proprio mude
.Open Source

ColdFusion and jQuery

Raymond Camden
www.coldfusionjedi.com

Why jQuery?

Powerful
Wide support
Ajax Power
Compatible with firefox, IE, Safari
Avaible via Google CDN

So what does it do?
-find stuff
-change stuff
-load stuff
-and much more

$ is jQuery

Follows CSS rules
With a few extra

Parece um pouco css, mas as funcionalidades sao Ajax

Vc pode criar box que aparece quando o usuario clica em um link, vc pode mostrar textos escondidos quando o usuario passa o mouse, pode deixar textos maiores, muito parecido com o Google

E possivel fazer um filtro em uma lista, pode fazer tudo com formularios
Trabalha com resize de imagem

Ele chamou muitas funções no link usando onChange

Basicamente serve para: click, change, hover, toggle

Usar firebug para ajudar a achar erros.

Ajax Functions:
-load
-get
-post
-getJSON
-getScript

Parece muito legal e facil de aprender.
Procurar um livro de sintaxe de jQuery.

Algumas funcoes funcionam mesmo se o usuario desligou ajax e scripts no navegador dele.

Ele pode fazer um search com ajax super rapido. Estilo Google. Sem precisar carregar a pagina.

É possível usar o jQuery com o cfc.

Coisas que fazem o jQuery não funcionar
- Espaços em branco
- onRequest
- Debugging

Usar o ColdFire ou o FireBug para debugar, nao usar o debug do coldfusion para jQuery
Pesquisar por coldfire, usar no Administrador do ColdFusion Server

Books: Learning jQuery 1.3 (Editora dos livros do Moodle)
http://www.amazon.com/Learning-jQuery-1-3-Jonathan-Chaffer/dp/1847196705/ref=sr_1_1?ie=UTF8&s=books&qid=1250106093&sr=1-1
www.insideria.com

Design Patterns

Design Patterns para coldfusion

1. Motivação
Reutilizar soluções para problemas comuns.
Soluções extensivamente testadas.
Escalabilidade, manutenabilidade, reusabilidade
São padrões, não códigos.
Ajudam a comunicação entre desenvolvedores

SOA
A vantagem de utilizar esta arquitetura é reduzir o time-to-market e custos de desenvolvimento

Refactoring
é muito mais difícil do que escrever a aplicação correta desde o início

2. Padrões de arquitetura
MVC

Singleton
usado restritamente para instanciar um unico objeto para toda aplicacao
(applcation.cfc é um exemplo no coldfusion)

Service Object Pattern
Toda logica do negócio encapsulada em um servico
(loginService.cfc, EmailService.cfc)

Front Controller / Command
Contém os handlers para cada tipo de request

Business Delegate
Sepera camada de apresentacao com servicos

DAO / Gateway
operacoes CRUD,
Table data gateway (querys -> listas do coldfusion)

Value/Data transfer object
"beans" so para passagem de valor, nao refletem necessariamente as entidades nas tabelas

3. Frameworks
Coldbox é o maior
Mach II, Model-Glue, Coldspring


4. Exemplo de desenvolvimento

.processo
Criar um prototipo
Modelar o banco de dados com as informações necessárias para montar o site
Diagrama de classes

.design patterns
cfc com os servicos onde cada funcao tem uma factory para os objetos puxando de um gateway
o gateway eh responsavel por fazer a ponte entre os dados e a camada de visualizacao

Com uma camada dessas eh possivel trocar o coldfusion pelo flex molinho


.arquivos as
(investigar o que sao os arquivos .as pois parecem muito com funcoes tipo java/c++)
bindable /remote class / alias servem pra fazer a ligacao com o flex


O cara deu um exemplo do command (registro dos handlers para cada comando)
e usando data value transfer (bean só pra especificar a classe)
um proxy (padrao de projeto) para pegar os dados da view

sequencia de padroes que a view usa no projeto dele:
command -> proxy -> delegate

EMC - EA modela as classes e já gera código para as classes (o cara tá usando)

O coldfusion 9 é quase 10x mais rápido para criar objetos do que o 8.
Teremos menos problemas com factories.

Bela palestra pra quem nunca viu design patterns ou nao sabe como aplicar dentro do mundo coldfusion. Boas práticas de desenvolvimento que deveriam ser adotadas no projeto.

Application.cfc How it works

Define balances, settings, defined everything else going foward.

Composed of variables and methods.
Some methodos / variables are Special.

Se existir um application.cfm e um application.cfc, o application.cfc ganha.

O Application.cfc foi uma mudança feita no ColdFusion 9

Exemplo de configuração do Site no Application.cfc
cfset name =""
cfset sessionmanagement =" false
cfset clientstorage = "cookie"

cfset loginsorage = "cookie"

cfset sessiontimeout =""

cfset scriptprotect =" false>

É possível criar nomes de variaveis que apontam para uma pasta (ColdFusion 9).
Muito bom quando vc hospeda o seu site em algum provedor.
Ex:
cfset customtagpaths="c:\mapped1"

Novo metodo onApplicationStart
Exemplo:
cffunction name="onApplicationStart" returntype="boolean" output="false"
cfreturn
cfreturn

Session:
cffunction name="onSessionStart" returntype="void" output="false"

onRequestStart:
cffunction name="onRequestStart" returntype="boolean" output="false"
cfargument name="The Page"
cfargument

Cuidado ao usar onRequet e onRequestStar: eles nao estao funcionando direito, e quabram serviços de webservices. A Adobe prometeu tirar todos os bugs na versao final do ColdFusion 9, mas hoje, ela ainda pode causar problemas em outras partes do codigo.

OnError - Nao deixa o usuario visualizar o erro - Muito Bom
cffuntion name="onError" retutntype="void"
vc pode enviar um email para os desenvolvedores e depois vc usa joga o usuario para outra pagina
cfmail
cflocation

Mostrar outra pagina se o usuario digitar uma pagina que nao existe:
cffunction name="MissingTemplate..."

onSessionEnd - Executa algum comando quando o usuario encerrar a seçao
cffunction name="onSessionEnd" returntype="void"
cfargument name="sessionScope"
vc pode disparar um registro no log para avaliar alguma coisa no futuro, onde o usuario parou, em que pagina, o que ele estava fazendo, muito util para carrinho de compra.

Agora o application.cfc guarda datasource para todo o site, googlemapkey, mailservice e outras coisas a mais.

Day1 - Design for Developers

Visual Herarchy
Positioning
Size
Weight
peso de um objeto em uma pagina. quanto mais chama a atencao maior o peso.
Color
hot -> cold
cores quentes sao vistas mais facilmente. (vermelho eh a mais chamativa, mas em alguns casos pode nao ser)
fotos com cores tem muito mais valor porque possuem peso
preto com fundo branco é a cor mais facil de se visualizar em uma pagina, mas se a pagina possui um numero mto grande de cores (como fotos coloridas) o fundo preto realça muito mais a pagina. O contrario (branco no fundo preto) ja nao eh recomendado.
White Space
usar espacos brancos da uma clareza mto grande para o site e ajuda a focalizar elementos importantes.
Fonts
Sans-Serif geralmente eh a melhor fonte para paginas que contem muita informação ou se necessario escrever um texto muito pqno.
Brand
Um marca pode ser basicamente manter um padrao no website, nao necessariamente tem a ver com o logo.

The key to award winning RIA...
. Website sao como aplicacoes...faca-o bem e depois aprimoreo.
. Utilize metaforas visuais
. Use acoes padronizadas para reforcar sua arquitetura de informacoes
. profundidade visual - pq nao usar 3rd dimensao?

Award-winning sites:
TED, Adidas, Wired, Conservation International, NPR Music, White Void ( functional websites)
Spectra, Nike - head to head, Acrobat.com, CL Desktop (using rias, flash, flex)

"LEFT TO RIGHT....TOP TO BOTTON"

"KISS - keep it simple and stupid"

.use CSS where appropriate
.white spaces use
.font usage
.graphical elements
.color used
.use standards for usability and accessability

Livros:
BulletProof WebDesign, CSS Mastery, Desining with Web Standards, Eric Meyer on CSS, A whole new Mind - Daniel Pink, Interface Driven Architecture - Helms, Valberg, Intent Driven Design - Peter Bell

Online:
www.webbyawards.com
www.alistapart.com
The right of right brained thinking
...

Practical Refactoring

  • Build some sort of a test, before you code
  • Stay focused
  • Use version control
  • Refactores code is Simple Code
  • Two kinds of applications, Perfect Ones and Finished Ones
O palestrante ficou mostrando exemplos de codigos em ColdFusion, mostrando os erros e como poderia ser corrigido para melhor o entendimento do codigo.

Inserir comentarios, um comentario por problema atacado. Inserir os Tags em minusculo.
Usar camelCase para as variáveis ou expressões. Ex: onApplicationEnd, isDebugMode
Começa com minúsculo e ao iniciar palavras insere maiusculo.

Dar uma olhada no ColdBox, ajuda na manutenção do codigo.

www.nodans.com

Book: Refactoring To Patterns

www.datacurl.com

Head First Design Patterns - Good Book

Refactoring na prática

1- Como fazer?
.pequenos passos
.escrever testes antes de modificar para garantir que não haverá introdução de erros no código
.foco
.apoioado por um cvs

2. Exemplos para melhorar comunicação do código
.usar identação
.usar comentários para cada problema atacado, apenas o necessario para entendimento
.alinhar ifs tentando separar os problemas atacados

3. Boas práticas
.extrair métodos do meio do código para facilitar manutenção
.funções devem ser concisas
.passar 15 minutos escrevendo código claro economiza horas de entendimento posterior para outro desenvolvedor
.comentário de validação de entradas devem conter a especificação do campo
.escrever uma função para validar toda a entrada (diferente de todas as entradas) para não espalhar a validação pelo código

(dar uma olhada em: http://www.coldboxframework.com/)

ppt em http://www.nodans.com

Day1 - Dynamic Load Testing with Paessler Webserver Stress Tool

Alguns conceitos: Click delay - apos a pagina estar completamente aberta, corresponde ao tempo do usuario de ler toda a pagina e clicar em um link

Click time - tempo que o browser leva para dar load em todos textos, forms, images, etc da pagina.

Tipos de teste:

Performance: testar certas areas de um website, colocar elementos ou remover de forma a otimizar seu processamento.

Load: auemntar o trafico em certas partes do site de forma a verificar quanto a aplicacao pode aguentar. (2 maneiras possiveis , testar dentro da rede, removendo assim qualquer tipo de delay
e como se fosse o usuario acessadno num momente de stress do website)

Stress: testar spikes aplicando um alto grau de stress no site.

Ferramenta para stress test: Webserver Stress Tool 7 (enterprise edition)
nao ha uma regra para fazer o teste. a unica forma eh aplicar um numero de usuarios/click delay de forma que atinja o numero de page views/hora esperado.

nao ha maneira de testar ajax pq vc nao esta atingindo o servidor e sim o browser. (client-side processing)

Para criar uma sequencia eh necessario que os pre-requisitos sejam colocados no processo, ou seja, paginas que precisam de login para acesso rpecisam ser posteriomente incluidas na sequencia com seu post-form respectivo para que a execuçao se complete.

Uma maneira de criar listas de parametros para os post forms é utilizar os caracteres @@ nos campos de login senha, por exemplo, e utilizar o data merging para setar uma lista com todos as variaveis que o software ira utilizar no teste.

Uma maneira interessante de gerar loads customizaveis é criar scripts (similar ao vbscript - porem limitado), mas nao existe software para cria-los. todos os scripts devem ser feitos manualmente.

pegar os scripts no site do cfunited para referencia.

ajay@teratech.com
301-424-3903

Ben Forta - Adobe KeyNote

Primeira palestra da CFUnited 2009. Ben Forta e os outros palestrantes apresentaram as novas features do ColdFusion 2009 e ColdFusion Builder.

A comunidade do ColdFusion vem crescendo com o tempo.

Nova comunidade: http://4cff.org/default/index.cfm.

Blog de padronização: http://www.opencfml.org.

Integração do Cold Fusion com outros produtos do RIA.
Adobe AIR,faz a integração do ColdFusion para ser usado offline no desktop.
ColdFusion + AIR = Take your Apps Anywhere

Eles mostraram como tranformar uma interface desenhada no Ilustrator para codigo da interface do Flex automaticamente. Depois é so entrar no FlexBuilder, abrir a janela de propriedades e dizer o que é cada box (scroll bar, text box, etc) e já está pronta a interface.

The Next Big Thing of ColdFusion

Cloud Computing (ColdFusion On the Cloud)
- Reduce upfront costs
- Scale up down as needed
- Simplify server managment
- ColdFusion 9 allows 10 concurrent instances

Amazonm EC2 (Amazon Eletric Cloud Computiing)
Adobe will provide prebuild IMG for Amazon.

Twitter
@ColdFusion
@BenForta

quarta-feira, 5 de agosto de 2009

Hello World!!!

Teste do Blog da DevTeam WineTag