Default Green Orange
Разработка сайтов и не только.
Have troubles with windows – reboot. Have troubles with linux – be root.
RSS
  • Home Page Home
  • SeoStatus
  • Карта сайта
  • Сайт-визитка
  • Контакты

Posts Tagged ‘Development’

Scalar type hints in PHP

Development, PHP Комментариев нет

В trunk появилась новая долгожданная фича: Scalar type hints

Выглядит это приблизительно так:

< ?php
function doSomething( int $foo){
echo "{$foo}\n";
}
?>

Если в такую функцию передать не целое – получим Catchable fatal error


августа 8, 2010  
Tags: Development, PHP



Несколько слов о Mercurial

Development, Python Комментариев нет

Меркуриал в последнее время стал моей основной системой контроля версий, и естественно у меня появился некоторый опыт, которым по моему мнению пора бы и поделиться.

Начнем с небольшого сравнения со старым добрым Subversion.

Долго пытаясь вспомнить недостатки децентрализованных система контроля версий нашел только один: возможность фальсификации авторства коммита — для проектов в которых я участвую такая фальсификация не несет никому никакого вреда, а потому я не считаю это большим недостатком.

Чуть позже при написании статьи вспомнил еще один, уже достаточно серьёзный недостаток — невозможность забрать часть репозитория. В любой современной децентрализованной системе контроля версий репозиторий является единой сущностью, а потому стянуть на машину разработчика только часть репозитория, как в Subversion и CVS не выйдет. Однако проблема с разделением репозитория решается именно его РАЗДЕЛЕНИЕМ.

Теперь попытаюсь вспомнить преимущества.

Локальный игнор-файл — файл содержащий паттерны для исключения файлов/каталогов из-под контроля версий может контроллироваться системой, а может быть так же исключен из-под контроля. Последний вариант дает разработчикам огромные возможности для хранения внутри рабочей копии дополнительных файлов, таких, как например инструменты разработчика, sql-дампы, да все, что только можно придумать. Простейший пример: Одни разработчики используют Eclipse, другие Netbeans, третьи Komodo, а каждая из этих сред создает в корне проекта файлы с мета-информацией о проекте. Включать эти файлы и папки в контроль версий смысла нет, а добавлять все возможные варианты в игнор, грозит его разрастанием.

Автоматический бэкап. Это преимущество неоспоримо, ведь каждый из разработчиков имеет на своей машине самодостаточный репозиторий, который можно в любой момент сделать главным (ну если вдруг сервер упал… с пятого этажа).

Получается, что главным преимуществом распределенных систем контроля версий является именно их распределенность. Преимущества этой распределенности распознаются разработчиками далеко не сразу, а только тогда, когда приходит некоторый опыт использования DVCS, потому я сейчас попробую обяснить удобства этой самой распределенности на примерах.

Для начала немного теории! Помните централизованные системы контроля версий? Там есть единый репозиторий в который мы коммитим и с которого обновляем нашу рабочую копию. В распределенных системах репозиторий находится прямо внутри рабочей копии. В Меркуриал репозиторий хранится в каталоге .hg прямо в корне проекта (рабочей копии). Все фиксации изменений и обновления происходят локально. Казалось бы все как и в централизованной системе, однако при надо же как-то делиться изменениями с другими разработчиками? Вот тут и начинается та самая распределенность. Чтобы опубликовать (протолкнуть в терминологии Mercurial) наши изменения в общий репозиторий (вспоминаем? система распределенная – репозиториев много) мы должны их сначала зафиксировать локально (commit), и только потом отправить в обший репозиторий (push). Для того, чтобы получить чужие изменения в свой локальный репозиторий (втягивать в терминологии Mercurial) мы должны выполнить комманду pull (тянуть). Когда чужие изменения уже находятся в нашем репозитории мы можем иметь 2 ветки изменений – 1) ветка наших изменений с несколькими коммитами 2) ветка чужих изменений тоже с несколькими коммитами. Ветки в итоге сходятся к одному родительскому узлу (changeset или «набор изменений» в терминолонии Меркуриал)

…… продолжение следует…


июня 3, 2010  
Tags: Development, Mecurial



Функциональная программа

Development 5 комментариев

В математике функция отображает объекты из одного множества (множества определения функции) в другое (множество значений функции). Математические функции (их называют чистыми) “механически”, однозначно вычисляют результат по заданным аргументам. Чистые функции не должны хранить в себе какие-либо данные между двумя вызовами. Их можно представлять себе черными ящиками, о которых известно только то, что они делают, но совсем не важно, как.

Read the rest of this entry »


июня 2, 2010  
Tags: Development



Модули?

Development, Work Комментариев нет

В соответствии с модульным подходом к программированию большая задача разбивается на несколько более мелких, каждую из которых (в идеале) решает отдельный модуль. В разных методологиях даются различные ограничения на размер модулей, однако при построении модульной структуры программы важнее составить такую композицию модулей, которая позволила бы свести к минимуму связи между ними. Набор классов и функций, имеющий множество связей между своими элементами, было бы логично расположить в одном модуле. Есть и еще одно полезное замечание: модули должно быть легче использовать, чем написать заново. Это значит, что модуль должен иметь удобный интерфейс: набор функций, классов и констант, который он предлагает своим пользователям.


июня 2, 2010  
Tags: Devel, Development



twit.py CLI-twitter-client

Development, Python 5 комментариев

Today I’m trying to use Python again and write small twitter-updater for command line interface

You must have a config file $HOME/.twitter.ini for use this script


[auth]
user = twit_user
password = ******

Usage:

./twit.py your message


#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, urllib, httplib2, os, ConfigParser

def tweet(msg):
  post = urllib.urlencode({ 'status' : msg })
  http = httplib2.Http()
  http.force_exception_to_status_code = False
  user,passwd = getConfig()
  http.add_credentials(user,passwd)
  resp, content = http.request('http://twitter.com/statuses/update.xml', 'POST', post)
  if resp and resp.status == 200:
    print "Ok!"
  else:
    print "Error: ",resp.status
    print content
    print "============================================="

def getConfig():
  filename = os.path.expanduser('~/.twitter.ini')
  config = ConfigParser.RawConfigParser()
  config.read(filename)
  try:
    return config.get('auth','user'), config.get('auth','password')
  except:
    print "Please check configuration file: ",filename
    print "Folowing file format required: "
    print "+---------------------------+"
    print "| [auth]                    |"
    print "| user=twitter_username     |"
    print "| password=*****            |"
    print "+---------------------------+"
    sys.exit(1)

sys.argv.reverse()
sys.argv.pop()
sys.argv.reverse()

message = " ".join(sys.argv)

tweet(message)


июня 2, 2010  
Tags: Development, Python, Twitter



Раньше
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • >
  • Метки

    AJAX Bash CD-DVD CSS darmowe ogłoszenia Debian Desktop Development dr Ewa Dąbrowska Firefox Fun Google Google Chrome html humor Internet Internet Explorer JavaScript jQuery Laptop Linux Microsoft Mozilla MySQL Office ogłoszenia ogłoszenia katowice OpenOffice OpenSource PHP Programming Python Security SEO Seostatus Servers Subversion Ubuntu wczasy odchudzające wczasy zdrowotne Windows Work XUL Yandex zdrowe odżywianie
  • Новости из ридера

  • Категории

    • Development (88)
      • JavaScript (16)
        • jQuery (6)
      • PHP (33)
      • Python (3)
      • Source Version Control (2)
    • Internet (83)
      • SEO (20)
    • Laptop (4)
    • Linux (54)
      • Desktop (24)
      • Servers (11)
    • Microsoft (13)
    • Mozilla (32)
      • XUL (11)
    • OpenSource (21)
    • Other (19)
    • Uncategorized (30)
    • W3C (1)
    • Work (22)
      • Управление проектом (2)
  • Архив

    • Февраль 2012 (3)
    • Январь 2012 (15)
    • Декабрь 2011 (3)
    • Июнь 2011 (1)
    • Октябрь 2010 (1)
    • Август 2010 (2)
    • Июнь 2010 (6)
    • Апрель 2010 (3)
    • Март 2010 (5)
    • Февраль 2010 (1)
    • Январь 2010 (1)
    • Декабрь 2009 (2)
    • Ноябрь 2009 (6)
    • Октябрь 2009 (1)
    • Сентябрь 2009 (9)
    • Август 2009 (4)
    • Июль 2009 (10)
    • Июнь 2009 (22)
    • Май 2009 (24)
    • Апрель 2009 (46)
    • Март 2009 (7)
    • Февраль 2009 (4)
    • Январь 2009 (3)
    • Декабрь 2008 (6)
    • Ноябрь 2008 (6)
    • Октябрь 2008 (19)
    • Сентябрь 2008 (7)
    • Август 2008 (8)
    • Июль 2008 (5)
.
Copyright © 2012 Разработка сайтов и не только. All Rights Reserved
XHTML CSS Войти