+153
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
function parse(input) {
var options = arguments.length > 1 ? arguments[1] : {},
peg$FAILED = {},
peg$startRuleFunctions = { grammar: peg$parsegrammar },
peg$startRuleFunction = peg$parsegrammar,
peg$c0 = peg$FAILED,
peg$c1 = null,
peg$c2 = [],
peg$c3 = function(initializer, rules) {
. . .
peg$c142 = { type: "other", description: "whitespace" },
peg$c143 = /^[ \t\x0B\f\xA0\uFEFF\u1680\u180E\u2000-\u200A\u202F\u205F\u3000]/,
peg$c144 = { type: "class", value: "[ \\t\\x0B\\f\\xA0\\uFEFF\\u1680\\u180E\\u2000-\\u200A\\u202F\\u205F\\u3000]", description: "[ \\t\\x0B\\f\\xA0\\uFEFF\\u1680\\u180E\\u2000-\\u200A\\u202F\\u205F\\u3000]" },
peg$currPos = 0,
peg$reportedPos = 0,
peg$cachedPos = 0,
peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },
peg$maxFailPos = 0,
peg$maxFailExpected = [],
peg$silentFails = 0,
peg$result;
. . . // + 3К строк бреда до конца функции
История моих мытарств и жалких метаний:
Меня попросило начальство радикально улучшить формат в котором приложение хранит данные. Думал я, думал, и решил, что YAML ка нельзя лучше подходит для задачи (нужно хранить описание слайдов презентации, т.е. много текста и довольно схематичная графика, все это желательно бы иметь возможность комфортно редактировать в текстовом виде, создавать заготовки и т.д.).
Шаг первый: поиск готового YAML парсера, врезультате обнаружились две штуки для АС3. Один - клон Ява парсера, в котором по класу на токен. Я не шучу. Проект заброшен 5 лет назад. Второй: заброшен 4 года назад, все в одном файле, парсится регулярками и магией, какие-то комментарии имеются, но они только свидетельствуют о несостоятельности писавшего коментарии.
Подумал: если нет нормального парсера, может есть генератор парсеров?
Шаг второй: поиск обнаружил одну попытку написать клон ANTLR, но очень ограниченную, и не работающую.
Думаю: ну бля, если все так херово, может с ж.скрипта портирую чего-нибудь простенькое, PEG как раз должен подойти.
И тут я нашел это.
wvxvw,
21 Августа 2014
+159
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
$(function () {
$('#Who').click(whoAre);
});
function whoAre() {
var who = document.getElementById('whoAreyou');
var value = who.style.display;
var aspnetRoles = document.getElementById('aspnetRoles');
if (value == "none") {
who.style.display = "block";
aspnetRoles[0].value = "Агент";
aspnetRoles[1].value = "Арендодатель";
aspnetRoles[0].text = "Агент";
aspnetRoles[1].text = "Арендодатель";
} else {
who.style.display = "none";
aspnetRoles[0].value = "Moderator";
aspnetRoles[1].value = "Moderator";
aspnetRoles[0].text = "Moderator";
aspnetRoles[1].text = "Moderator";
}
}
меняет элементы, option
Emir,
19 Августа 2014
+154
- 1
- 2
- 3
- 4
- 5
if (d_min < 0) {
// push out by normal * |d_min|
x = x - d_min * T[t_min];
y = y - d_min * T[t_min + 1];
y = z - d_min * T[t_min + 2];
Сука, блядь, пиздец, два часа убил.
makc3d,
18 Августа 2014
+155
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
const WCT_SYMBOLS = new Buffer('ABCDEFGO'); /*задаём строку для поиска
в ней символов*/
const WCT_LENGTH = 3;
const fs = require('fs');
/*функция для перевода целой части числа из 10-й в любую сс*/
function Cel(number, c, out, offset, length){
var pos = offset + length - 1;
number |= 0; /*берём целую часть от числа*/
do {
out[pos--] = WCT_SYMBOLS[number % c | 0]; /*повторяем пока число не будет равно нулю берём целую часть при
делении числа на основание и берём остаток + 1 от деления целой части на 16, записываем
результат посимвольно в строку out*/
number = number / c | 0;
} while (number != 0);
while(pos >= offset)
out[pos--] = WCT_SYMBOLS[0];
}
(function wctEditor() {
const argv = process.argv;
if(argv.length < 4) {
console.log('Not enough parameters!');
process.exit(1);
}
const input = argv[2], output = argv[3];
if(!fs.existsSync(input)) {
console.log('File not exist!');
process.exit(2);
}
const BUFFER_SIZE = 1024;
const f1 = fs.openSync(input, 'r');
const f2 = fs.openSync(output, 'w');
const I = new Buffer(BUFFER_SIZE);
const O = new Buffer(WCT_LENGTH * BUFFER_SIZE);
while(1) {
var readBytes = fs.readSync(f1, I, 0, I.length, null);
if(!readBytes) break;
for(var i=0; i<readBytes; ++i)
Cel(I[0], WCT_SYMBOLS.length, O, i * WCT_LENGTH, WCT_LENGTH);
fs.writeSync(f2, O, 0, readBytes * WCT_LENGTH, null);
}
fs.closeSync(f1);
fs.closeSync(f2);
})();
/* TODO -oUser -cConsole Main : Insert code here */
По следам http://programmersforum.ru/showthread.php?t=264223. Ну тормозит же!
Я долго боролся с собой, и всё же от авторского стиля остались только комментарии и имена f1, f2 и I...
WCT editor: теперь и под Node.
1024--,
16 Августа 2014
+154
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
//Показывать или убирать шапку
var shapka = $('.shapka');
$(window).scroll(function(){
if($(window).scrollTop() > 800){
shapka.fadeIn();
} else {
shapka.fadeOut();
}
});
//Scrolling up function
$(function(){
$.fn.scrollToTop = function(){$(this).hide().removeAttr("href");
if($(window).scrollTop()!="0"){
$(this).fadeIn("slow")
}
var scrollDiv=$(this);$(window).scroll(function(){
if($(window).scrollTop()=="0"){
$(scrollDiv).fadeOut("slow")
}
else{
$(scrollDiv).fadeIn("slow")
}
});
$(this).click(function(){$("html, body").animate({scrollTop:0},"slow")})}
});
$(function() {
$("#toTop").scrollToTop();
});
//Динамическое изменения title страницы
function dynamicTitle(d){
var t = new Array(
"Курс 'Основы программирования'",
"Внимание! Сегодня скидка!"
);
if(typeof d === 'number'){
document.title = t[d];
} else {
for(var i=0; i<t.length; i++){
if(t[i] === document.title){
continue;
} else {
document.title = t[i];
break;
}
}
}
}
dynamicTitle(0);
setInterval(dynamicTitle, 2000);
http://progbasics.ru
Советую почитать весь сайт и код, такого эпичного говнеца я еще не видел. Особенно в отзывах и программе курса.
gost,
16 Августа 2014
+152
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
app.service('CarService', function () {
this.dealer = "Bad";
this.numCylinder = 4;
});
app.factory('CarFactory', function () {
return function (numCylinder) {
this.dealer = "Bad";
this.numCylinder = numCylinder
};
});
app.provider('CarProvider', function () {
this.dealerName = 'Bad';
this.$get = function () {
return function (numCylinder) {
this.numCylinder = numCylinder;
this.dealer = this.dealerName;
}
};
this.setDealerName = function (str) {
this.dealerName = str;
}
});
http://habrahabr.ru/post/220631/
gost,
15 Августа 2014
+156
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
var day = new Date(values.date_b.substring(0, 10));
var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
var curDay = day.getDay();
for(var i = 0; i < days.length; i++) {
if (days[i] == days[ day.getDay() ]) {
curDay = i;
break;
}
}
curDay = (curDay == 0) ? 7 : curDay;
dr_Lev,
15 Августа 2014
+159
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
недавно на хабре была статья "Платформер на Three.js"
так вот автор уверяет, что
"Читателям с нешкольным образованием или ветеранам игростроя этот псевдокод известен под названием «метод Эйлера», а также известно что этот метод — просто отстой."
и приводит картинки из википедии, где им решают достаточно сложный дифур
а вот свой "школьный" дифур он решил вот так
if( в воздухе ) playerVelocity.y -= gravity * time;
playerPosition += playerVelocity * time;
"Как видим, запустив игру в firefox, мы получим одну динамику, а запустив её в chrome — совершенно иную. Поведение персонажа будет «плавать» в зависимости от интенсивности фоновых задач и расположения звёзд. Что же делать?"
ответ-учиться программировать
void update(float dt) {
pos += (velocity + force * dt * 0.5f) * dt;
velocity += force * dt;
}
оп-ля! все встало на свои места. теперь эйлер с не фиксированным шагом НЕ ПЛАВАЕТ!
FadeToBlack,
15 Августа 2014
+149
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
(function(G, U) {
"use strict";
var $ = G.jQuery,
string = "string",
number = "number",
bool = "boolean",
object = "object";
function hasStr(obj, prop) {
return obj.hasOwnProperty(prop) && typeof obj[prop] === string;
}
function hasNum(obj, prop) {
return obj.hasOwnProperty(prop) && typeof obj[prop] === number;
}
function hasArr(obj, prop) {
return obj.hasOwnProperty(prop) && $.isArray(obj[prop]);
}
function hasFn(obj, prop) {
return obj.hasOwnProperty(prop) && $.isFunction(obj[prop]);
}
function hasBool(obj, prop) {
return obj.hasOwnProperty(prop) && typeof obj[prop] === bool;
}
function copyProps(source, target, fields) {
var i,
count,
fieldType,
fieldTypes = {
str : hasStr,
bool: hasBool,
arr : hasArr,
fn : hasFn,
num : hasNum
};
if (arguments.length < 2){
return;
}
if (arguments.length === 2){
target = {};
}
if ($.isPlainObject(source) && $.isPlainObject(target) && $.isPlainObject(fields)) {
for (fieldType in fieldTypes) {
if (fieldTypes.hasOwnProperty(fieldType)) {
if (hasArr(fields, fieldType)) {
for (i = 0, count = fields[fieldType].length; i < count; i += 1) {
if (fieldTypes[fieldType](source, fields[fieldType][i])) {
target[fields[fieldType][i]] = source[fields[fieldType][i]];
}
}
}
}
}
}
return target;
}
G.copyProps = copyProps; //Export into global namespace
}(this, undefined));
Здравствуйте! Написал функцию, которая безопасно копирует свойства из одного объекта в другой, выполняя проверку типа каждого копируемого поля. Скажите, какие недостатки и насколько оправдано её применение по сравнению со стандартной функцией jQuery extend()? Работает только с простыми объектами, для вложенных объектов нужно ещё раз вызывать эту функцию.
dunmaksim,
14 Августа 2014
+159
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
var get_day = function(day_name_or_number, return_type) {
var day_name = '';
var day_number = '';
switch (day_name_or_number) {
case 0: //sunday
case 'sun':
case 'sunday':
day_name = 'sun';
day_number = 0;
break;
case 1: //monday
case 'mon':
case 'monday':
day_name = 'mon';
day_number = 1;
break;
case 2: //tuesday
case 'tue':
case 'tuesday':
day_name = 'tue';
day_number = 2;
break;
case 3: //wednesday
case 'wed':
case 'wednesday':
day_name = 'wed';
day_number = 3;
break;
case 4: //thursday
case 'thu':
case 'thursday':
day_name = 'thu';
day_number = 4;
break;
case 5: //friday
case 'fri':
case 'friday':
day_name = 'fri';
day_number = 5;
break;
case 6: //saturday
case 'sat':
case 'saturday':
day_name = 'sat';
day_number = 6;
break;
}
switch (return_type) {
case 'number':
return day_number;
break;
case 'name':
return day_name;
break;
default:
return day_name;
break;
}
};
Что и кому я сделал, что с таким работать приходиться?
monstrodev,
08 Августа 2014