2009-02-15

Отладка PHP скриптов

Оказывается отлаживать приложения на PHP возможно если вы используете Eclipse c PDT, для этого необходимо скачать Studio Web Debugger - эта штука ставится как расширение PHP и позволяет эклипсу останавливаться на ваших точках остановки, проходить приложение по шагам, смотреть значения переменных и еще много чего. Радует то, что как Eclipse, так и Debugger доступны для различных платформ, и совершенно бесплатны, вот уж где коммунизм наступил...

 

Оставить комментарий

 
  2009-02-05

А вроде солидный банк...

Вчера звонят из Экономбанка которому мы несколько месяцев назад сделали сайт, дают ссылку и спрашивают WHF?

сайт Экономбанка сайт банка Синергия

Не знаю, по моему не сильно похоже... По моему, совершенно разные сайты - сайт Синергии похож на сайт Экномбанка как наша девятка похожа на DeLorean DMC-12 (машина из "Назад в Будущее")...

 

Коментариев: 4

 
  2009-02-04

Редактор для Python

Попробовав несколько разных радакторов пришел к выводу что для меня лучше чем Eclipse с плагином PyDev ничего не придумано.

 

Коментариев: 2

 
  2009-02-04

Простой вебсервер на Питоне

Возникла необходимость сделать простой вебcервер, но чтобы он был максимально легкий и быстрый. После некоторых размышлений решил реализовать его на Питоне, первоначально в качестве кандидатов рассматривались PHP, Java, Perl, но в конечном итоге решил остановиться на Python.

Приведенный пример работает на Python 2.5, хотя первоначально был сделан на Python 3. Питон выбрал потому что во первых хотелось посмотреть что это за зверь такой, что его так любят разработчики Google a во вторых понравилось что можно с легкостью создавать многонитивые приложения.

Синтаксис языка оказался довольно забавный, так как в нем нет операторных скобок так что тем кто любит сравнивать фигурные скобки Си с паскалевским begin/end останутся без темы для споров - операторных скобок нет как класса.

Понравилась философия разработчиков Battaries Included - например разработчику для создания простого вебсервера не нужно вникать в тонкости протоколов - достаточно взять один из готовых классов. Однако по какой то странной причине разработчики Питона не любят реляционные базы данных, например нет в Питоне интерфейса к MySQL а сторонние разработкики делают расширения весьма неохотно, поэтому третью версию питона с MySQL никак не соединить - максимум что позволено версия 2.5 и когда будет поддержка для третьей - неизвестно.

#! /usr/local/bin/python

import BaseHTTPServer
import cgi
import string

class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def showPage(self,method,get_data,post_data):
        self.wfile.write("HTTP/1.1 200 OK\n");
        self.wfile.write("Content-Type: text/html\n")
        self.wfile.write("\n");        

        responce = """
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Simple HTTP Server</title>
<meta name="description" content="Simple HTTP Server" />
</head>
<body style="background:white;">				
Method $method<br />
Path: $path<br />
get data $get_data<br />
post data $post_data<br />

<form action="" method="post">
<input type="text" name="value1">
<input type="submit" name="value2">
</form>
</body>
</html>
        """
        s = string.Template(responce)
        responce = s.substitute(dict(
            get_data=get_data,
            post_data=post_data,
            path=self.path,
            method=method
            )) 
        self.wfile.write(responce);
                
    def do_GET(self):
        get_data = cgi.parse_qs(self.path[2:])
        self.showPage('GET',get_data,{})
        

    def do_POST(self):
        get_data = cgi.parse_qs(self.path[2:])
        cl, cl2 = cgi.parse_header(self.headers.get('content-length'))
        qs = self.rfile.read(int(cl))
        post_data = cgi.parse_qs(qs.decode())
        self.showPage('GET',get_data,post_data)


class ChatServer(BaseHTTPServer.HTTPServer):
    def __init__(self,address,handler):
        BaseHTTPServer.HTTPServer.__init__(self,address,handler)
        

def main():
    try:
        server = ChatServer(('localhost', 8080), RequestHandler)
        server.serve_forever()
    except KeyboardInterrupt:
        print('^C received, shutting down server')
        server.socket.close();

if __name__ == '__main__':
    main()

 

 

Коментариев: 14

 
  2009-02-01

Милый клип

Экслер раскопал изумительный клип

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

Читать далее...

 

Оставить комментарий

 
  2009-01-31

Дружественные URL

Тут на досуге подумал, почему бы благородному дону не сделать дружественные URL в блоге... Взял и сделал, возможно кое-что перестало работать, хотя старые адреса оставил на всякий случай.

 

Коментариев: 7

 
  2009-01-31

VPS хостинг

Phpclasses опубликовали список самых лучших VPS хостингов - цены радуют, возможности впечатляют. Взять что ли на месяц, попробовать...

 

Коментариев: 2

 
  2009-01-28

Шаман

Рассветное солнце еще только только наметило контуры будущего рассвета а Илия уже шел босиком по холодной утренней росе в особое место силы, место где обитали духи, охраняющие его племя. Старый шаман торопился, он знал, что духи бывают благосклонны лишь в определенные часы и если он хочет получить результат он должен поторопиться. Сегодня у него было очень важное дело — поручение вождя племени. Погода днем стояла жаркая и хотя с утра выпадала обильная роса этого было явно недостаточно для хорошего урожая - племени был нужен дождь и только он Илия мог попросить богов смилостивится над ними и послать с небес драгоценную влагу.

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

Говорят, что в прошлом, ремесло шамана было очень престижным, и ценилось гораздо выше всех остальных ремесел, хотя как оно могло цениться высоко если практически каждый мог общаться с духами? - думал Илия. Вот если в племени все будут охотники и практически не будет землепашцев, то очень скоро они переловят всех зверей в округе и племени нечего будет есть, зачем нужно такое количество шаманов Илия понять не мог. К тому же, занятие шамана требовало долгого обучения направленного на развитие ума - ведь если в формуле заклинания перепутать один единственный звук оно уже не сработает, поэтому ремесло шамана требовало не только запоминания огромного количества слов на чужом языке но и недюженной сосредоточенности при их произнесении.

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

- Welcome to Personal Internet Point...

self test started... external communications test – ок, local server connection – ок, keyboard test – failed, screen test – failed, voice interface – activated, order it expecting...

- калл телнет локалхост ейтин ентер — произнес шаман сокравенную фразу на древнем языке.

- telnet is running, order is expecting...

- гет спейс ейч ти ти пи колон слаш слашь локалхост слашь рейнконтрол слаш каллрайн дот пи эйч пи спейс ейч ти ти пи ван дот зиро — на лбу у шамана от напряжения и сосредоточенности выступили крупные капли пота — ентер

- 200 OK... невидимый голос продолжал произносить незнакомые слова на священном языке которые Илия уже не слушал, он смотрел на серое утреннее небо по которому уже тянулись редкие кучевые облака...

 

Оставить комментарий

 
  2009-01-27

Browser Detection

Обнаружил что фрагмент кода из mootools выдает какой то странный результат для версии движка, может я не знаю каких нюансов, но все же хочется чтобы версия хоть как то коррелировала с версией браузера, кроме того писать каждый раз Browser.Engine.presto довольно длинно, хотелось бы чтобы было просто Browser.presto.

Mootools в отличие от jQuery и prototype определяет тип движка браузера по определенным особенностям объектной модели а не по navigator.userAgent, это неплохо, вот только версию движка таким образом можно определить очень приблизительно, поэтому версию будет логично определять по navigator.userAgent а сам движок по функционалу объектной модели.

Немного похозяйничав в коде получилось вот что:

var Browser = {	
	platform: (navigator.platform.match(/mac|win|linux/i) || ['other'])[0].toLowerCase(),
	version: (navigator.userAgent.toLowerCase().match(/.+(?:rv|it|ra|ie|me)[\/: ]([\d.]+)/) || [-1,-1])[1]
};

if (window.opera) Browser.presto = true;
else if (window.ActiveXObject) Browser.trident = true;
else if (!navigator.taintEnabled) Browser.webkit = true;
else if (document.getBoxObjectFor != null) Browser.gecko = true;

Ваш браузер:

Версия  
Платформа  
trident (IE)  
presto (Opera)  
webkit (Safary, Chrome)  
gecko (Firefox, Mozilla)  
 

Оставить комментарий

 
  2009-01-21

Как решить энергетические проблемы человечества?

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

Что имеем на сегодня: Потребность человечества в энергии: 8 трлн. Вт

Сама по себе цифра впечатляет, откуда сейчас берется такая энергия Основным источником получения энергии в мире дающим 97% её количества является ископаемое топливо, в том числе 38% составляет уголь, 19% - природный газ и 10%- нефть. 2% электроэнергии вырабатывается на ГЭС, а другие источники, такие как ядерный распад, древесина и прочие вырабатывают 1% энергии.

Что такое ископаемое топливо? Согласно современным представлением, это остатки живых организмов, которые под действием солнечной энергии сначала переработали весь метан из атмосферы древней земли в углекислый газ и кислород, а затем с использованием той же самой солнечной энергии переработали углекислый газ в кислород, забрав себе углерод как основу своих тел, которые за много лет превратились в уголь и нефть - т.е. сжигая ископаемое топливо мы потребляем солнечную энергию, которая тысячелетиями откладывалась земной биосферой.

Теперь возьмем гидроэлектростанции - что такое энергия падающей с высоты плотины воды? Все в школе учили про круговорот воды в природе - солнышко нагревает воду - испаряет ее, ветер, которые также возникает из-за конвекции при нагревании солнцем земной поверхности, переносит в влагу в другое место где она выпадает в виде дождя, собирается в ручейки, реки и крутит турбины гидроэлектростаций.

Ветряные электростанции - преобразуют энергию ветра в электрическую - а энергия ветра как я уже писал есть тоже солнечная энергия.

Есть еще атомные электростанции - эту энергию пожалуй нельзя назвать солнечной, хотя постойте, а на солнце разве энергия не атомная? Ну и что что она возникает не при распаде тяжелых ядер на легкие а наоборот, все равно это ядерная энергия - суть тоже самое что и солнечная, в конечном счете, согласно современным представлением Земля и Солнце образовались из одного и того же вещества.

Ладно хватит демагогии, задача:
Дано: мощность энергии падающей на квадратный метр поверхности земли на уровне моря: 1020 Вт/кв. метр
мощность Саяно-Шушенской гидроэлектростанции: 6400 МВт

Найти площадь солнечных батарей необходимую для вырабатывания такой же мощности как и на Саяно-Шушенсой ГЭС. КПД преобразования солнечной энергии с учетом смены дня и ночи принять за 30%

Решение: мощность вырабатываемая солнечной батареей: 1020*0.3 = 306 Вт./м кв. Площадь поверхности составит: 20915032 м кв. или 21 квадратный километр.

Да, размер впечатляет, теперь другая задача:

Дано: пустыня Гоби занимает приблизительно треть площади Монголии.
Площадь Монголии 165300 кв. км.
Найти какую часть пустыни Гоби нужно покрыть солнечными элементами чтобы полностью обеспечить человечество электроэнергией?

Решение:
Площадь солнечных элементов для выработки 8 000 000 000 000 Вт энергии = 26143790847 кв. метров или 26144 кв км.
Площадь пустыни Гоби приблизительно: 55100 кв. км.
Ответ: 0.47 площади пустыни Гоби полностью обеспечивает всю потребность человечества в электроэнергии.

Конечно это очень грубо и стоить такое будет довольно дорого, а экологи начнут меня упрекать за призыв к уничтожению уникальной экосистемы пустыни Гоби. В следующий раз попробую прикинуть стоимость такого проекта и сравнить эту стоимость со стоимостью международной термоядерной станции что строят в Европе, сравнить площадь пустыни Гоби с площадью затопленных территорий для гидроэлектростанций, продолжение следует.

 

Коментариев: 7