Showing posts with label ПО. Show all posts
Showing posts with label ПО. Show all posts

03 August, 2024

Как просто объяснять сложное

Каждый из нас в течение дня сталкивается с тем, что его неправильно или не до конца поняли. Самое печальное, что в большинстве случаев виновники этому мы сами. Там говорили с набитым ртом, там вместо того, чтобы показать на карте, начали рассказывать схему проезда. Эйнштейн говорил: «Просто объяснить сложное сложно. Сложно объяснить сложное просто». Прикладывая немного усилий в объяснениях, мы можем улучшить результат коммуникаций в десятки раз.

14 April, 2018

@@@ааааа!!

- Давай я тебе этот файл в вайбер скину.
- У меня нет вайбера, кидай на почту. У тебя моя есть.
- Как нет вайбера? Какая почта? Это вчерашний день! Ставь вайбер.
- (ставит вайбер)

Электронная почта вчерашний день. Мессенджеры ее заменят, говорят.

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

26 April, 2016

FUTURE: 34 Remarkable and Surprising Things (En/Ru)

I’ve been reading and thinking about the future a lot recently, and decided to spend a week “nerding out” at Singularity University, to satisfy my curiosity. It was a great event, featuring experts from across the entire spectrum of technology and innovation. In this post I’ll share the ideas I’ve been developing for some time?—?based on my own research as well as time at spent at SU?—?on how we should think about the future and the myriad opportunities it presents.

I am extremely optimistic about our future being a world where powerful technologies solve some of our biggest challenges across a range of industries from medicine to transportation to energy and many others. This will result in a significantly better standard of living for all as well as many remarkable inventions, in the same way that we live significantly better and different lives than our great great grandparents did. The rate of change is starting to achieve breakneck speed with breakthrough inventions, new businesses, and technologies announced every week and it’s only going to accelerate. However, it will also bring it’s own share of ethical, cultural and societal challenges that while are non-trivial, I’m confident we will ultimately solve.

Much of this innovation is built on a foundation of expanding capabilities including increasing processing power, more connectivity, increasingly inexpensive memory and a proliferation of sensors. As our world becomes increasingly digitized it will also become increasingly democratized. Buckle up and get ready for our incredible future.

31 July, 2015

Молитва Системного Администратора

Отче наш, иже еси на АйБиЭм ПиСи, код наш насущный дай нам! 
Помилуй нас от пэйпер джэма и фатал эрора! 
Дай нам MD-ков неубываемых и паролей на них. 
Искупи нам десницей Своей комплектующих для 
Апгрейда ненасытного, ибо душит нас Жаба великая 
и страдаем мы от недостатка ресурсов системных. 

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

Избавь нас от Юзера глупого, ибо продвинут он стал и имя ему БУХ. 
Выправи программы наши кривые, ибо клинит башни 
нам от конфигураторов и отладчиков Открой нам 
знание, ибо истинно говоришь Ты нам, где тру и фолс. 
Откомментируй код наш многомегабайтный, ибо 
погрязли мы в MD-шниках своих 

Укроти ламеров, имя Твое всуе поминающих, ибо не ведают, что творят. 
Упаси нас от Галактик и Бэстов. Да приидет царствие одинэса. 
Не заставь нас нырять в мануалы бездонные и хэлпы 
путанные, ибо ересь в них, а дай нам уразуметь 
ридмя крошечные, ибо в них слово Господне. 
Инкапсулируй объекты наши, ибо полиморфны они и 
наследуют Царствие Твое. 

Выведи нас из цикла бесконечного, ибо на переход 
Твой безусловный уповаем. 
Укажи нам путь верный, ибо блуждаем мы средь 
интерфейсов и парадигм и несть им числа. 
Не пронеси мимо чашу сию неупиваемую, ибо пива 
жаждем мы и коннекта алкаем. 
Молим Тебя и ниц перед Тобой падаем со серверами нашими. 
Отныне и присно, энд лайфтайм, бэкап!

03 June, 2015

Если вы пролили жидкость на ноутбук

Нечаянно пролитая жидкость часто становится причиной поломки любимого устройства. Что делать, если вы вдруг пролили на ваш ноутбук или компьютер воду, газировку, чай или кофе? Пролитая жидкость опасна сразу несколькими осложнениями: от быстрого короткого замыкания, если не обесточить и не выключить компьютер, до вялотекущей, длительной коррозии внутренностей ноутбука. Мы попробовали все известные методы решения проблемы и предлагаем пошаговую инструкцию для спасения вашего устройства.

06 April, 2015

Вы неправильно пишете животных

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

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

17 May, 2014

Как понять, что пора уволиться и двигаться дальше

Edmond Lau, бывший инженер Quora и автор книги о профессиональном росте, поделился собственным опытом и советами о том, как не засиживаться на одном месте, а стремительно и эффективно развиваться в профессиональной сфере. Судя по послужному списку Edmond Lau, у него есть чему поучиться. На его счету работа в таких компаниях как Microsoft и Google, где он сумел взять все самое ценное для своей карьеры и продвинуться вперед. Сейчас он ведет свой блог The Effective Engineer и работает над книгой The Effective Engineer’s Handbook, где изложит основные рецепты того, как ускорить свой карьерный рост, тратить меньше времени на трудоемкие задачи, и как использовать свою энергию и навыки намного эффективней. В своем блоге на Quora он рассказал о том, как можно легко определить, что пора менять работу, чтобы развиваться и двигаться дальше. И мы решили рассказать о его советах.

09 December, 2013

Программист ли я ?

Именно таким вопросом я задался сегодня утром, придя на работу. Вроде бы все признаки программиста есть: код пишу уже не первый год, за плечами не один проект (как провальные так и успешные), разбираюсь в структурах данных, алгоритмах и их оценке, знаю, как работают сети и сам компьютер вплоть до железного уровня, знаю и использовал скрам, канбан и иже с ними. Честно ходил на конференции послушать, а так же честно выступить. С огоньком в глазах читал лекции студентам и рассказывал каково это быть программистом. Многие из них пошли на работу программистами, самых толковых я забирал себе в команду. Читал тренинги по паттернам, JavaScript и .NET, проводил хакатон, участвовал в хакатоне, и радовался как ребенок от этих самых хакатонов.

15 November, 2013

Programmer Evolution

 High School/Jr.High 

10 PRINT "HELLO WORLD"
20 END


 First year in College
program Hello(input, output)
begin
writeln("Hello World")
end.


 Senior year in College
(defun hello
(print
(cons "Hello (list "World))))


 New professional
#include <stdio.h>
void main(void)
{
  char *message[] = {"Hello ", "World"};
  int i;

  for(i = 0; i < 2; ++i)
  printf("%s", message[i]);
  printf("\n");
}



 Seasoned professional
#include <iostream.h>
#include <string.h>

class string
{
private:
int size;
char *ptr;

public:
string() : size(0), ptr(new char("\0")) {}

string(const string &s) : size(s.size)
{
ptr = new char[size + 1];
strcpy(ptr, s.ptr);
}

~string()
{
delete [] ptr;
}

friend ostream &operator <<(ostream &, const string &);
string &operator=(const char *);
};

ostream &operator<<(ostream &stream, const string &s)
{
return(stream << s.ptr);
}

string &string::operator=(const char *chrs)
{
if (this != &chrs)
{
delete [] ptr;
size = strlen(chrs);
ptr = new char[size + 1];
strcpy(ptr, chrs);
}
return(*this);
}

int main()
{
string str;

str = "Hello World";
cout << str << endl;

return(0);
}




 Master Programmer
[
uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820)
]
library LHello
{
// bring in the master library
importlib("actimp.tlb");
importlib("actexp.tlb");

// bring in my interfaces
#include "pshlo.idl"

[
uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820)
]
cotype THello
{
interface IHello;
interface IPersistFile;
};
};

[
exe,
uuid(2573F890-CFEE-101A-9A9F-00AA00342820)
]
module CHelloLib
{

// some code related header files
importheader(<windows.h>);
importheader(<ole2.h>);
importheader(<except.hxx>);
importheader("pshlo.h");
importheader("shlo.hxx");
importheader("mycls.hxx");

// needed typelibs
importlib("actimp.tlb");
importlib("actexp.tlb");
importlib("thlo.tlb");

[
uuid(2573F891-CFEE-101A-9A9F-00AA00342820),
aggregatable
]
coclass CHello
{
cotype THello;
};
};


#include "ipfix.hxx"

extern HANDLE hEvent;

class CHello : public CHelloBase
{
public:
IPFIX(CLSID_CHello);

CHello(IUnknown *pUnk);
~CHello();

HRESULT __stdcall PrintSz(LPWSTR pwszString);

private:
static int cObjRef;
};


#include <windows.h>
#include <ole2.h>
#include <stdio.h>
#include <stdlib.h>
#include "thlo.h"
#include "pshlo.h"
#include "shlo.hxx"
#include "mycls.hxx"

int CHello::cObjRef = 0;

CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk)
{
cObjRef++;
return;
}

HRESULT __stdcall CHello::PrintSz(LPWSTR pwszString)
{
printf("%ws\n", pwszString);
return(ResultFromScode(S_OK));
}


CHello::~CHello(void)
{

// when the object count goes to zero, stop the server
cObjRef--;
if( cObjRef == 0 )
PulseEvent(hEvent);

return;
}

#include <windows.h>
#include <ole2.h>
#include "pshlo.h"
#include "shlo.hxx"
#include "mycls.hxx"

HANDLE hEvent;

int _cdecl main(
int argc,
char * argv[]
) {
ULONG ulRef;
DWORD dwRegistration;
CHelloCF *pCF = new CHelloCF();

hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

// Initialize the OLE libraries
CoInitializeEx(NULL, COINIT_MULTITHREADED);

CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER,
REGCLS_MULTIPLEUSE, &dwRegistration);

// wait on an event to stop
WaitForSingleObject(hEvent, INFINITE);

// revoke and release the class object
CoRevokeClassObject(dwRegistration);
ulRef = pCF->Release();

// Tell OLE we are going away.
CoUninitialize();

return(0); }

extern CLSID CLSID_CHello;
extern UUID LIBID_CHelloLib;

CLSID CLSID_CHello = { /* 2573F891-CFEE-101A-9A9F-00AA00342820 */
0x2573F891,
0xCFEE,
0x101A,
{ 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
};

UUID LIBID_CHelloLib = { /* 2573F890-CFEE-101A-9A9F-00AA00342820 */
0x2573F890,
0xCFEE,
0x101A,
{ 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
};

#include <windows.h>
#include <ole2.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "pshlo.h"
#include "shlo.hxx"
#include "clsid.h"

int _cdecl main(
int argc,
char * argv[]
) {
HRESULT hRslt;
IHello *pHello;
ULONG ulCnt;
IMoniker * pmk;
WCHAR wcsT[_MAX_PATH];
WCHAR wcsPath[2 * _MAX_PATH];

// get object path
wcsPath[0] = "\0";
wcsT[0] = "\0";
if( argc > 1) {
mbstowcs(wcsPath, argv[1], strlen(argv[1]) + 1);
wcsupr(wcsPath);
}
else {
fprintf(stderr, "Object path must be specified\n");
return(1);
}

// get print string
if(argc > 2)
mbstowcs(wcsT, argv[2], strlen(argv[2]) + 1);
else
wcscpy(wcsT, L"Hello World");

printf("Linking to object %ws\n", wcsPath);
printf("Text String %ws\n", wcsT);

// Initialize the OLE libraries
hRslt = CoInitializeEx(NULL, COINIT_MULTITHREADED);

if(SUCCEEDED(hRslt)) {


hRslt = CreateFileMoniker(wcsPath, &pmk);
if(SUCCEEDED(hRslt))
hRslt = BindMoniker(pmk, 0, IID_IHello, (void **)&pHello);

if(SUCCEEDED(hRslt)) {

// print a string out
pHello->PrintSz(wcsT);

Sleep(2000);
ulCnt = pHello->Release();
}
else
printf("Failure to connect, status: %lx", hRslt);

// Tell OLE we are going away.
CoUninitialize();
}

return(0);
}


 Apprentice Hacker
#!/usr/local/bin/perl
$msg="Hello, world.\n";
if ($#ARGV >= 0) {
while(defined($arg=shift(@ARGV))) {
$outfilename = $arg;
open(FILE, ">" . $outfilename) || die "Can"t write $arg: $!\n";
print (FILE $msg);
close(FILE) || die "Can"t close $arg: $!\n";
}
} else {
print ($msg);
}
1;


 Experienced Hacker
#include <stdio.h>
#define S "Hello, World\n"
main(){exit(printf(S) == strlen(S) ? 0 : 1);}


 Seasoned Hacker
% cc -o a.out ~/src/misc/hw/hw.c
% a.out


 Guru Hacker
% cat
Hello, world.
^D


 New Manager

10 PRINT "HELLO WORLD"
20 END



 Middle Manager
mail -s "Hello, world." bob@b12
Bob, could you please write me a program that prints "Hello,
world."?
I need it by tomorrow.
^D


 Senior Manager
% zmail jim
I need a "Hello, world." program by this afternoon.


 Chief Executive
% letter
letter: Command not found.
% mail
To: ^X ^F ^C
% help mail
help: Command not found.
% damn!
!: Event unrecognized
% logout


P.S.

Недавно понадобилось мне залезть в Visual C++ 5.0 help. И то, что я там увидел переплюнуло даже Master Programmer.

Приводить здесь текст той програмки не буду - место жалко, но по крайней мере теперь ясно, почему Windows такого размера и так работает.

13 November, 2013

Правильный Backup

1. Вы бэкапите данные со своей рабочей машины?
2. А с производственных серверов?
3. Вы храните бэкапы на том же диске, или переносите их на другую машину?
4. Переносите ли вы серверные бэкапы в другой дата-центр?

Это стандартный набор вопросов для проверки квалификации системного администратора.

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

13 June, 2013

Камуфляж против видеонаблюдения


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

23 January, 2013

Истинная правда о "независимости" Википедии


История - про Википедию, проект интернет-энциклопедии в которую все станут писать обо всем, когда-то начатый человеком с именем Джимми Уэйлс (до того специализировавшимся больше на торговле интернет-порнографией; о национальности героя, которому доверен проект, гадать тоже не надо). 

Проект стал флагманом, гордостью так называемого "Веба 2.0", т.е. нового подхода к созданию сайтов - когда читатели со всего мира создают содержание, главное богатство и достоинство сайта, для того, чтобы затем им распоряжались как своим business asset ради извлечения денег хозяева машин-серверов. ЖЖ - другой известный пример данного подхода.

Как известно сегодня, когда эйфория первых впечатлений рассеялась, википедия - организация с жестокой цензурой. Статьи о физике-математике-технике еще можно читать, но во всем, где дело касается истории или политики проводится жесткая чистка, причем кто-то править статьи может, а кто-то (обычная публика со стороны) - нет, автоматически следящая программа-робот тут же даст откат, а попытка настоять на изменениях вызовет запрет доступа.

18 December, 2012

Будь мужиком, пиши правильный код, б***ть

Как вы знаете производительности хорошего программиста и плохого отличается в 28 раз. Чтобы стать хорошим программистом нужно как минимум следовать указанным ниже пунктам.


1. Читай книги, б***ть

Сколько книг по программированию вы прочитали за последний год? Одну? Три? Пять? Это слишком мало. Чтобы стать хорошим программистом надо много читать профессиональной литературы. По книге в месяц будет нормально, нельзя останавливаться, нельзя говорить себе “я уже все знаю, хватить читать”.

08 August, 2012

Apple iOS против Google Android - им всем наплевать на тебя

Святая тема для холиваров. Грааль гламурных кис, которые с пеной у рта доказывают свое преимущество над прыщавыми засаленными задротами с последними моделями Samsung или HTC. Вопли ярости гиков, собирающих GCC для Android. Как можно сдержаться и не вбросить по этому поводу? Я, наверное, буду писать очевидные вещи, но, судя по глупым комментариям в интернетах, многим эти прописные истины неясны. Первое и основное заблуждение: Apple делает технику для людей, Google Android - для гиков. ... В реальности и Apple, и Google наплевать на тебя с высокой колокольни, мой милый друг. В основе каждой из этих компаний лежит своя модель продаж, которая абсолютно никак не привязана к куску стекла, железа и пластмассы, который ты так крепко сжимаешь в своих потных ладошках. Вот так новость! Ты купил новый iPhone 4S или четырехядерный, пятибатарейный, десятиэкранный андроидофон, а в глазах компании производителя ты все еще обычный нищеброд. А вот все почему.

12 June, 2012

Клавиатурные сокращения, работающие в любом браузере



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

26 April, 2012

Отмазка для сайтов с пиратским контентом


С точки зрения реализации на уровне аппаратуры, любой файл можно считать бинарным.

То есть все файлы, в конечном счете, состоят из последовательности нулей и единиц (состояний бита).

В этом мире всегда есть место случайностям.

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

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

27 March, 2012

Полюбить программиста, а не баяиста


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

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

21 March, 2012

Бертран Мейер. Объектно-ориентированное конструирование ПО

Более навороченной книги по ООП в природе нет и в ближайшее время, скорее всего, не будет; эта книга заслуженно считается классической книгой по объектной технологии и не зря является первой в списке рекомендуемых книг по этой теме (причем она первая не только в моем списке).

Основная сложность при изучении объектно-ориентированного программирования (или любой другой парадигмы программирования) заключается в том, что весьма сложно подобрать формальные критерии, которые бы сказали: «ок, теперь я знаю ООП и стану писать более клевые (читай модульные, реюзабельные и легкие в сопровождении) программы». Например, при изучении языков программирования мы относительно быстро замечаем, опа, level-up, я, кажись, перешел на новый уровень понимания идиом и конструкций языка программирования и могу использовать его более интересным образом, да еще и другим рассказывать, где они не правы.

Когда же речь касается изучения ООП, то здесь проявляется проблема, которую Мейер называет mOOzak effect или buzzword effect. Сводится она к следующему: человек знакомится с некоторым понятием или термином и начинает интенсивно использовать его в повседневной (рабочей) жизни, не придавая значения тому, что сам он его до конца не понимает. Если прислушаться к обсуждениям в коллективе (или на форумах), то можно заметить употребление множества «страшных слов», типа инвариант, инкапсуляция, полиморфизм, ковариантность, контрактное программирование и многие другие, при этом очень часто они могут употребляться без полного понимания того, что же они означают.

20 March, 2012

НЕЙРО'социум - ИНТЕЛ'нет

НЕЙРОСОЦИУМ (neurosociality, neuromilieu) - симбиоз мозга и социума; общество, которое непосредственно управляется мозговыми процессами и в свою очередь их контролирует. Этоцеребрально открытое общество (ЦОО), в котором мозговые процессы технически освоены, выведены наружу и прямо участвуют в информационных потоках и производственных процессах. Развитие современных информационных технологий ведет в перспективе к сращению всех линий коммуникации: церебральных (между клетками мозга) и социо-культурных (между ячейками общества). Со временем мозговые сигналы будут прямо передаваться по электронным сетям.

01 March, 2012

Средства тестирования веб-сайтов

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

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