Вводная лекция в язык C#, для тех кто знает программирование и в особенности C++. В статье будет уделено внимание наиболее важным отличиям языков, будут обсуждаться вопросы производительности и эффективного кода.
Другие интересные статьи по C# ищите тут: http://itw66.ru/blog/c_sharp/
Написание компактного и эффективного кода в C#: http://itw66.ru/blog/c_sharp/520.html
Guava - open-source библиотека, разработанная в основном инженерами компании Google, в которой есть множество полезных утилит для написания эффективного и красивого кода. В Guava решено множество типичных задач, которые часто возникают при работе с примитивами, строками, коллекциями, параллельными вычислениями, кэшированием данных и многим другим. В докладе поговорим о возможностях, которые предоставляет Guava, рассмотрим примеры использования утилит библиотеки.
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
Web-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
Вводная лекция в язык C#, для тех кто знает программирование и в особенности C++. В статье будет уделено внимание наиболее важным отличиям языков, будут обсуждаться вопросы производительности и эффективного кода.
Другие интересные статьи по C# ищите тут: http://itw66.ru/blog/c_sharp/
Написание компактного и эффективного кода в C#: http://itw66.ru/blog/c_sharp/520.html
Guava - open-source библиотека, разработанная в основном инженерами компании Google, в которой есть множество полезных утилит для написания эффективного и красивого кода. В Guava решено множество типичных задач, которые часто возникают при работе с примитивами, строками, коллекциями, параллельными вычислениями, кэшированием данных и многим другим. В докладе поговорим о возможностях, которые предоставляет Guava, рассмотрим примеры использования утилит библиотеки.
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
Web-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
Питон предоставляет глубокие возможности по интроспекции вплоть до байткода и AST. Это, наряду c возможностью кастомизации поведения объектов, предоставляет неочевидные пути написания кода, который пишет код или иначе влияет на исполнение. Я приведу несколько примеров как можно всё это применить весело и с пользой.
Доклад читался на PiterPy 2
Лекция 5. Встроенные коллекции и модуль collections.Roman Brovko
И снова встроенные коллекции: кортеж, список, множество, словарь - обход в глубину, обзор методов, примеры. Почти всё про модуль collections: именованные кортежи, счётчики, defaultdict, OrderedDict.
Лекция 12. Быстрее, Python, ещё быстрее.Roman Brovko
Измерение времени работы кода на Python с помощью модулей timeit, cProfile и line_profiler. Немного о NumPy. JIT и AOT компиляция кода на Python на примере Numba и Cython.
Лекция 8. Итераторы, генераторы и модуль itertools.Roman Brovko
Два протокола итераторов: __next__ + __iter__ и __getitem__. Итераторы и цикл for, а также операторы in и not in. Генераторы, оператор-выражение yield. Генераторы как: итераторы, сопрограммы, менеджеры контекста. Модуль itertools.
При написании программы, разработчик примерно представляет себе, как должна работать его программа. Но не всегда его ожидания соответствуют действительности — приложения тормозят, потребляют много ресурсов и вообще ведут себя не так, как задумывалось, особенно под большой нагрузкой. В своём докладе я покажу, как заглянуть "под капот" ваших приложений на Python (и Django в частности): какие способы профилирования бывают и когда их можно использовать, расскажу об отладке приложений и различных инструментах, которые помогают разработчику при разработке.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Roman Brovko
Синтаксис объявления функций. Упаковка и распаковка аргументов. Ключевые аргументы и аргументы по умолчанию. Распаковка и оператор присваивания. Области видимости, правило LEGB, операторы global и nonlocal. Функциональное программирование, анонимные функции. Функции map, filter и zip. Генераторы списков, множеств и словарей. Немного о PEP 8.
Darwish nationalism endured in a period when Somali society was widely dispersed and lacked the necessary organisations to form a single political unit, and at a time when colonial powers such as Britain, Italy, and France were expanding their hegemony over the country. As the clan was and still is the most important political unit in the traditional system, Somalis rejected the replacement of their traditional system with that of a state system as offered to them by Sayid Maxamed. Somalis preferred to live in clanism rather than a system that they did not know. I will discuss in this paper the conflict of the Darwish state and Somali clans.
Udalberriak 156 - Noviembre 2012 - Día Internacional contra la violencia haci...encartaciones
Revista municipal de Balmaseda. Temas principales: Beldur Barik (25 de noviembre) en el Día Internacional contra la violencia hacia las Mujeres, Aprobación del PAES, que pretende reducir en un 20% las emisiones de CO2 para el 2020; el nuevo Pintxo-pote de la asociación de hosteleros de Balmaseda Ostabal y la nueva subasta de locales del Ayuntamiento.
Introduction to rest-full development with Java. Focussing on jax-rs (and kauriproject.org)
Slides presented at devoxx-2010.
See http://devoxx.com/display/Devoxx2K10/RESTful+development+with+Java for abstract.
Питон предоставляет глубокие возможности по интроспекции вплоть до байткода и AST. Это, наряду c возможностью кастомизации поведения объектов, предоставляет неочевидные пути написания кода, который пишет код или иначе влияет на исполнение. Я приведу несколько примеров как можно всё это применить весело и с пользой.
Доклад читался на PiterPy 2
Лекция 5. Встроенные коллекции и модуль collections.Roman Brovko
И снова встроенные коллекции: кортеж, список, множество, словарь - обход в глубину, обзор методов, примеры. Почти всё про модуль collections: именованные кортежи, счётчики, defaultdict, OrderedDict.
Лекция 12. Быстрее, Python, ещё быстрее.Roman Brovko
Измерение времени работы кода на Python с помощью модулей timeit, cProfile и line_profiler. Немного о NumPy. JIT и AOT компиляция кода на Python на примере Numba и Cython.
Лекция 8. Итераторы, генераторы и модуль itertools.Roman Brovko
Два протокола итераторов: __next__ + __iter__ и __getitem__. Итераторы и цикл for, а также операторы in и not in. Генераторы, оператор-выражение yield. Генераторы как: итераторы, сопрограммы, менеджеры контекста. Модуль itertools.
При написании программы, разработчик примерно представляет себе, как должна работать его программа. Но не всегда его ожидания соответствуют действительности — приложения тормозят, потребляют много ресурсов и вообще ведут себя не так, как задумывалось, особенно под большой нагрузкой. В своём докладе я покажу, как заглянуть "под капот" ваших приложений на Python (и Django в частности): какие способы профилирования бывают и когда их можно использовать, расскажу об отладке приложений и различных инструментах, которые помогают разработчику при разработке.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Roman Brovko
Синтаксис объявления функций. Упаковка и распаковка аргументов. Ключевые аргументы и аргументы по умолчанию. Распаковка и оператор присваивания. Области видимости, правило LEGB, операторы global и nonlocal. Функциональное программирование, анонимные функции. Функции map, filter и zip. Генераторы списков, множеств и словарей. Немного о PEP 8.
Darwish nationalism endured in a period when Somali society was widely dispersed and lacked the necessary organisations to form a single political unit, and at a time when colonial powers such as Britain, Italy, and France were expanding their hegemony over the country. As the clan was and still is the most important political unit in the traditional system, Somalis rejected the replacement of their traditional system with that of a state system as offered to them by Sayid Maxamed. Somalis preferred to live in clanism rather than a system that they did not know. I will discuss in this paper the conflict of the Darwish state and Somali clans.
Udalberriak 156 - Noviembre 2012 - Día Internacional contra la violencia haci...encartaciones
Revista municipal de Balmaseda. Temas principales: Beldur Barik (25 de noviembre) en el Día Internacional contra la violencia hacia las Mujeres, Aprobación del PAES, que pretende reducir en un 20% las emisiones de CO2 para el 2020; el nuevo Pintxo-pote de la asociación de hosteleros de Balmaseda Ostabal y la nueva subasta de locales del Ayuntamiento.
Introduction to rest-full development with Java. Focussing on jax-rs (and kauriproject.org)
Slides presented at devoxx-2010.
See http://devoxx.com/display/Devoxx2K10/RESTful+development+with+Java for abstract.
Краткое введение в Scala для разработчиков на других языках. Рассмотрены несколько простых программ, написанных с использованием красивых возможностей Scala.
Slides for my PyCon and DevDay talk about the idea of Underscore spread onto other languages.
Video (in russian) is available here http://www.youtube.com/watch?v=lGAC6ftYUS0#t=12100
Александр Щепановский «Почему каждому языку нужен свой _»DevDay
Такие библиотеки как funcy и underscore часто связывают с функциональным программированием, но настоящий их фокус - это практичность. Задача их - упростить манипулирование данными, коллекциями, функциями и даже потоком управления, а также абстрагировать часто встречащиеся полезные поведения. В своём докладе я приведу жизненные примеры использования всего этого, а также расскажу об идеях заложенных в и продвигаемых funcy.
31 мая – 1 июня в Киеве состоялась конференция HOTCODE 2013.
Сергей Тепляков, эксперт Luxoft Training по .Net, С++ и архитектуре приложений, выступил с докладом «C# Deep Dive».
Тезисы доклада:
«Когда-то в далеком 2002-м году язык C# был прост, как 2 копейки. Но у любого «живого» языка есть одна особенность, приятная и неприятная одновременно — в язык начинают добавляться новые возможности, чтобы наши с вами типовые задачи решались проще и эффективнее. Но с каждой новой возможностью появляются и свои тонкости, незнание которых может лишить столь нужных в нашей жизни конечностей, причем иногда самым изощренным образом. А поскольку язык C# развивается очень динамично, то за время жизни на его просторах появилось много маленьких грабелек, которые мы с вами и научимся обходить ;)».
2. If I were to pick a language to use today other
than Java, it would be Scala
James Gosling
I can honestly say if someone had shown me the
Programming in Scala book by by Martin
Odersky, Lex Spoon & Bill Venners back in 2003
I’d probably have never created Groovy
James Strachan
3. возникновение
• Разработан в 20012004 годах (представлен в 2004 г.) в
Лаборатории методов программирования EPFL
(Федеральная политехническая школа Лозанны,
Швейцария) под руководством Мартина Одерски (Martin
Odersky)
• Большое влияние оказали исследовательские работы в
области разработки (компонентного) ПО, ЯП
• Попытка разработки языка, который бы хорошо
масштабировался (SCAlable LAnguage)
• Унификация объектноориентированного и
функционального подходов и предоставление их в языке
со статической типизацией. Расширенные механизмы
абстракции, композиции и декомпозиции
• Хорошая интеграция с существующими платформами и
библиотеками — изначальная ориентация на совместную
работу с Java и .NET
4. «академический» язык
• LinkedIn – фреймфорк “Norbert” для построения
асинхронных, кластерных, высоконагруженных
приложений. Представление социального графа
• EDF – крупнейшая во Франции энергетическая компания
• Twitter – главная очередь сообщений (message queue)
• Novell – сервис “Vibe Cloud”, предоставляющий
корпоративную закрытую и защищенную платформу для
совместной работы
• The Guardian – API для “Open Platform”, предоставление
доступа к медийному архиву агенства
• Xerox – различное ПО, включая и клиентское
• FourSquare – полностью все предоставляемые сервисы
• Sony – система управления хранением данных
• Siemes (+ SAP) – корпоративная система сообщений
• …
5. основные концепции
• Бесшовная интеграция с Javaкодом (C#/.NET)
• Единообразная объектная модель – любое значение
является объектом, любая операция – вызов метода
• Функциональный язык – функции являются полноправными
значениями. Каждая функция возвращает значение
• Механизмы абстракций как для типов, так и для значений
• Использование «примесей» (mixin, trait) для композиции
классов
• Сравнение с образцом (pattern matching)
• Естественная обработка документов XML
• Выведение типов
• Неизменяемые (immutable types) типы
• Ленивые (lazy) вычисления
6. hello world!
Вариант I:
object Application {
def main(args: Array[String]): Unit = {
for (arg < args) {
if (arg.startsWith(""))
println(arg)
}
}
}
7. hello world!
Вариант I:
object Application {
def main(args: Array[String]): Unit = {
for (arg < args) {
if (arg.startsWith(""))
println(arg)
}
}
}
Вариант II:
def main(args: Array[String]): Unit = {
for (arg < args; if arg.startsWith(""))
println(arg)
}
8. hello world!
Вариант I:
object Application {
def main(args: Array[String]): Unit = {
for (arg < args) {
if (arg.startsWith(""))
println(arg)
}
}
}
Вариант II:
def main(args: Array[String]): Unit = {
for (arg < args; if arg.startsWith(""))
println(arg)
}
Вариант III:
def main(args: Array[String]): Unit = {
args.withFilter(_.startsWith("")).map(println)
}
9. значения и переменные
val a: Int = 5
val b = {
println("Init b")
10
}
var c = 15
lazy val d = {
println("Init d")
a + c
}
println("a:%d b:%d c:%d".format(a, b, c))
c = 20
println("c:%d d:%d".format(c, d))
println("d:" + d)
>>> Init b
a:5 b:10 c:15
Init d
c:20 d:25
d:25
10. классы и объекты
class Parent(value: String) {
val classValue = value
}
class A1 {
val a: Int = 0
private var b = 0
def getB = b
}
object A1 extends Parent("Object A1: ") {
def setA(obj: A1) { obj.b = 5 }
}
object Application extends Application {
val obj = new A1
A1.setA(obj)
println(A1.classValue + obj.getB)
}
>>> Object A1: 5
11. трейты (traits)
trait Role {
def getRole: Int
def isAdmin = if (getRole == 0) true else false
}
trait Info {
def getInfo: String
def setInfo(info: String)
}
class User(role: Int) extends Role with Info {
val userRole = role
var userInfo: String = ""
def getRole = userRole
def getInfo = userInfo
def setInfo(info: String) {
userInfo = info
}
}
13. карринг
def filter(xs: List[Int], p: Int => Boolean): List[Int] =
if (xs.isEmpty) Nil
else if (p(xs.head)) xs.head :: filter(xs.tail, p)
else filter(xs.tail, p)
def modN(n: Int)(x: Int) = ((x % n) == 0)
val list = (1 to 10).toList
println(filter(list, modN(2)))
println(filter(list, modN(3)))
>>> List(2, 4, 6, 8, 10)
List(3, 6, 9)
14. xml
val xml =
<depot>
<item name="item 1">
<part name="part 1"/>
<part name="part 2"/>
<item>inner item</item>
</item>
<item name="item 2"></item>
<label type="title">Depot title</label>
</depot>
xml "item"
xml "item"
xml "@type"
15. xml
val ptype = "box"
val title = "Examples"
val item = <item type={ ptype }>{ title }</item>
val items =
<items>
{for (index < (0 to 3).toList)
yield <item>{ index }</item>}
</items>
println(item)
println(items)
>>> <item type="box">Examples</item>
<items>
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
</items>
16. сравнение с образцом
def matcher(x: Any) = {
x match {
case 1 => println("Integer value 1")
case y: Int => println("Integer value: " + y)
case <e>{ tagValue }</e> =>
println("XML Tag value: " + tagValue)
case _ => println("Something else: " + x)
}
}
matcher(1)
matcher(10)
matcher(<e>Lorem ipsum</e>)
matcher("simple string")
>>> Integer value 1
Integer value: 10
XML Tag value: Lorem ipsum
Something else: simple string
17. магический implicit
implicit def double2int(x: Double) = {
println("converting double to int ...")
if (x < 10) 0 else x.toInt
}
val i: Int = 3.5
println(i)
>>> converting double to int ...
0
implicit val a: Int = 10
implicit val b: Double = 1.5
def foo(implicit a: Int, b: Double) = {
println("%d, %f".format(a, b))
}
foo
>>> 10, 1.500000
18. The first rule of Lift is:
It's easier than you think.
I think the most important feature we have in
Lift is the community around it
(committers and noncommitters). I have joined
the mailing list just a few months
ago and I am impressed with how willing
everyone is to help each other.
19. общая информация
• Разработка начата в 2007 году, сейчас достигнута
версия 2.2. Главный разработчик — Девид Поллак (David
Pollak). Рабочее название было “Scala on Sails”
• Разрабатывается с целью объединить лучшие идеи и
концепции из существующих webфреймворков (Java
фреймворки, RoR)
• Концентрация на бизнеслогике приложения
• Простая и эффективная система безопасности
• Использование преимуществ Scala как базового языка
(контроль типов, встроенная обработка XML,
функциональные элементы)
• ViewFirst предпочтительнее MVCмодели
• Изначальная поддержка AJAX и Comet
• Используется в таких компаниях, как Nowell, SAP,
Innovation Games, Foursquare, Untyped и другими
24. mapper orm
Создание записи:
val n = News.create
n.title("Lorem ipsum")
…
n.save
Удаление записи:
n.delete_!
Все записи:
val n = News.findAll
Записи по условию:
val n = News.findAll(By(News.publish, true),
OrderBy(News.date, Descending),
StartAt(0), MaxRows(10))
Записи по SQLзапросу:
val n = News.findAllByInsecureSql("select * from news " +
"where publish = 1 order by(date_c)",
IHaveValidatedThisSQL("dba", "20110101"))
25. menu
Boot.scala:
import net.liftweb.http.LiftRules
import net.liftweb.sitemap.Loc
import net.liftweb.sitemap.Loc.Hidden
import net.liftweb.sitemap.Loc.strLstToLink
import net.liftweb.sitemap.Menu
import net.liftweb.sitemap.SiteMap
...
def boot {
...
val myLoc = Loc("HomePage", "index" :: Nil, "Home Page",
Hidden)
val myMenu = Menu(myLoc)
val allMenus = myMenu :: User.sitemap
val mySiteMap = SiteMap(allMenus: _*)
LiftRules.setSiteMap(mySiteMap)
...