Начинаем осваивать CFBuilder
Рэй Кэмден опубликовал на DZone простую и наглядную табличку основных навыков работы в CFBuilder. Посмотреть её можно по этой ссылке.
Презентация CF Wheels
Match-II и ColdSpring: статья для нубов
Олли Джонс написал отличную статью для новичков Match-II и ColdSpring. Там всё разжёванно, что у вас не останется никаких вопросов.
CF Curriculum
На сайте Adobe появился отличный специальный обучающий раздел для новичков coldfusion-программирования.
Тут вы найдете множество материалов, рассказывающих и о работе с БД, компонентами, массивами и структурами и etc. Рекомендую.
CF & Apache Derby
Как вы знаете, CF умеет работать с БД от Apache – Derby. Посмотрите видео о том как это делается:
Борьба с SQL-инъекциями
CF не более уязвим от такого рода инъекций, чем иной другой язык, поэтому я покажу основы того, как защититься от SQL-инъекций1 при разработке cf-приложений.
Как вообще эти инъекции работают? Хм, ну это просто. Какой-нибудь негодяй может модифицировать GET- или POST-запрос таким образом, что выполнятся либо дополнительные SQL-инструкции, либо вовсе не те, которые должны были. Соответственно, негодник получит доступ к данным, которые предназначены не для его глаз – как правило это приватная информация пользователя или сразу группы оных.
Чтобы проверить ваше приложение еще на уровне разработки, подвержено оно SQL-инъекциям или нет, вы можете воспользоваться чудным и бесплатным к тому же air-инструментом – SQLFury.
А теперь, чтобы понять от чего нам защищаться, давайте поглядим на обычный cf-запрос:
<cfquery name="q" datasource="d"> select * from posts where postsid=#url.id# </cfquery>
Как видно, тут мы пытаемся сделать выборку сообщения, с числовым идентификатором переданным через URL. А что будет, если передать не число, а текст? Правильно – ошибка.
Но, можно модифицировать запрос:
http://localhost/?id=75%union%select%BASE_SCHEMA_VER%as%id,name%as%strmodelname,%name%as%strModelDescription%from%sysobjects
То есть передать такой sql-запрос:
union select BASE_SCHEMA_VER as id,name as strmodelname, name as strModelDescription from sysobjects
И это уже будет не хорошо.
Ресайзим изображение при помощи CF и .Net
Нашёл тут отличный пример того, как отличается выполнение одних и тех же задач в Coldfusion и .Net – а именно, ресайз изображений с 1024х700 до 250 пикселей по ширине.
Вот CF-код:
<cfimage
action = "resize"
height = ""
width = "250"
source = "#sourceFile#"
destination = "#resizedFile#"
overwrite = "yes">
А вот .Net-код:
static void ResizeImageByWidth(string orgName, string resizeName, int resizeWidth) { String src = orgName; String dest = resizeName; int thumbWidth = resizeWidth; //Get the source image to a System.Drawing.Image object System.Drawing.Image image = System.Drawing.Image.FromFile(src); //Create a System.Drawing.Bitmap with the desired width and height of the thumbnail. int srcWidth = image.Width; int srcHeight = image.Height; Decimal sizeRatio = ((Decimal)srcHeight / srcWidth); int thumbHeight = Decimal.ToInt32(sizeRatio * thumbWidth); Bitmap bmp = new Bitmap(thumbWidth, thumbHeight); //Create a System.Drawing.Graphics object from the Bitmap which we will use to draw the high quality scaled image System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp); //Set the System.Drawing.Graphics object property SmoothingMode to HighQuality gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //Set the System.Drawing.Graphics object property CompositingQuality to HighQuality gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; //Set the System.Drawing.Graphics object property InterpolationMode to High gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; //Draw the original image into the target Graphics object scaling to the desired width and height System.Drawing.Rectangle rectDestination = new System.Drawing.Rectangle(0, 0, thumbWidth, thumbHeight); gr.DrawImage(image, rectDestination, 0, 0, srcWidth, srcHeight, GraphicsUnit.Pixel); //Save to destination file bmp.Save(dest); //dispose / release resources bmp.Dispose(); image.Dispose(); }
Как говорится разницу легко заметить.
Секреты CF8
Предлагаю вашему вниманию запись выступления Чарли Айрехарта на Adobe MAX, посвящённую секретам Coldfusion:
А кому лень смотреть видео, тот может скачать .pdf с презентацией.
Курс молодого бойца. Часть №2
В coldfusion имеется особенность, впрочем ею обладают наверное все языки программирования – резервные слова. Их не так много, но важно чтобы вы не использовали такие слова в качестве переменных.
Вот их список. В формах:
- _integer
- _float
- _range
- _date
- _time
- _eurodate
Курс молодого бойца. Часть №1
Итак, ColdFusion, а в дальнейшем я буду иногда сокращать это название до cf, родился как язык программирования достаточно давно – более 13 лет и на данный момент имеет восьмую версию.
После покупки компании macromedia, сейчас его развитием занимается Adobe.
Язык прост, но очень функционален. Лёгок в освоении и за пару дней вы сможете написать своё собственного работающее маленькое приложение. А может и не маленькое. Всё зависит от вашего желания.
Вот смотрите, вы сможете легко интегрировать в ваше приложения множество сервисов и компонентов, написанных на других языках программирования: Java, .Net, SOAP, CORBA, JMS, XMPP, AMF, COM и других.
