分类 默认分类 下的文章

疫情严重。村里不让随便进出,需要办出入证。

年初五的时候就已经让办了,那时候只要登记下就能办。

当时太懒,再加上疫情泛滥,出去怕感染,于是自己在家呆着没去办。

今天周六,下周一要上班了,才拖着现在去办。

骑车到村口,村口在消毒,机器声音太吵。

我大声咨询,一位工作人员说:“现在不给办!先找物业管片。 ”

骑着车子回到小区。

小区大姐说:“ 去村委会问吧 ,我们没有管片电话!”

我又骑车到村委会,村里没多少人

看到我来了,一个保安中断了跟其他人的聊天,探着头问:“ 干嘛的”

我:“ 办出入证。 ”

保安:“ 不给办 ”

我:“ 我回来快一个月了 ”

保安:“ 那你去里面的办公楼问问 ”

我进了一个楼里,一胖子很不耐烦,问:“ 办什么的 ”

我:“ 办出入证,我回来快一个月了 ”

胖子:“ 找你们管片 ”

我:“ 我们物业不知道管片电话,让来村委会问 ”

胖子:“ 那让你们物业过来 ”

我拨了物业电话:“ 村委会让问你们,要你们过来 ”

物业:“ 管片下午来物业,你下午过物业看看吧 ”

我只好回家。

回来看门口贴的村委会的工作人员电话。

我拨了号码。

“我是xx小区的,办出入证,我不知道我们管片是谁”

“问你们小区物业吧!他们肯定知道”

“他们不知道”

“那你找物业经理”

。。

最后皮球又提到物业。

我又去物业。

物业大妈终于松口了,给旁边的保安嘀咕:

“你给那管片联系下吧,让她过来吧”

我心里一万个草泥马飞起。。。

站在物业门口,在西北风里站了半个小时

一大姐过来了,进物业办公室,一堆抱怨、安排工作。

安排完了,终于喊我过去:

“只能给你自己办,你媳妇不行”

“为啥”

“她没签保证书呢”

“可是当时没让她签啊”

“当时是当时,现在是现在”

“我这还手机短信呢,我俩的信息都给您发了,你那时候也没让她签”

看我拿出了短信,她意识到时自己工作失误,拿出一张新保证书

“你给她签下吧,按当时日期算”

签完,物业大哥带着我去村口办出入证。

村口的办事员仔细看了保证书,大声嚷嚷道:“不给办,不给办”

“为啥”我和物业大哥都傻眼了,旁边一个工作人员也凑过来问。

“签的日期是2.8,现在是2.15,还没到14天”

我:“可是我回来日期是1.28啊!”

办事员继续嚷嚷:“那我可不管,我只认签署日期!”

这次我已经淡定很多了,不多言语。一是不能公开顶撞办事人员,指不定马上被拉走拘留呢,二是我习惯了这种踢皮球、瞎扯淡的风格了。

回到物业,我拍了签署保证书的照片,就当给公司发邮件用的证明。

前后将近三个小时,最后什么都没办成!还是要等到下周才能去办出入证。

本来自己是响应政策,“自我隔离”不出门,结果这么多天的“自我隔离”不算数了,还不如早点去办个出入证划算!政策真是一天一个样,凡事要趁早!

10℃以上

下身:七分裤。
上身:长袖衣衫,或者穿短袖衣衫配上手臂护套。
配件:一件轻便的棒球帽风格帽子。

1-10℃

下身:七分裤或者四分之三长的紧身裤。可选长紧身裤或者普通裤。
上身:套上两层长袖衣衫,或者穿一层,外加一件防风上衣。
配件:一个无檐小便帽,薄手套。

零下1-6℃

下身:拉过绒的紧身衣或裤子,盖住任何裸露在外面的肌肤。
上身:穿两层长袖,或者穿一个长袖外加薄层和薄夹克。再或者,除按上述的厚一些的版本。
配件:无檐小便帽,厚手套。太阳镜保护寒冷阵风中的眼睛(在阴天的时候考虑一下清晰的镜片)

零下18-零下6℃

下身:防水材料的,拉过绒的绝缘抗风紧身衣或裤子,长袜子。
上身:塞到裤子里的长袖,或一个中间层来保暖你的脖子,外加一个绝缘体夹克。
配件:一条围巾围住你的脖子,甚至围住你的脸颊和嘴。一个暖和的无檐小便帽可以盖住你的耳朵,一个大小合适的厚手套和太阳镜。

零下18℃以下

伙计,那你不是在开玩笑?还是去跑步机上练习吧!

一、起因

一到年底,各大网站又开始组织评选各种最佳XX,比如新浪组织的2015十大跑团投票。昨日在跑步群里,组织的领袖人物号召大家去投票,于是好多人都投了,后来又过了一会,领袖又出来无奈的说,大家每人投1000票吧,瞬间集体崩溃,原来投票还可以这么玩!

于是仔细研究了下这个网站投票,抓包发现,其所为的投票就是一个普通的HTTP GET 请求,没有缓存,没有认证,没有限制,我真无语了,这还是新浪网站做的网页呢,这尼玛是实习生做的吧?最基本的验证、防刷票都没有。
而前面几名小跑团竟然都跟我XX大跑团差距几十万的投票量了,这些明显都是在刷票!而且是软件自动刷的!太气愤了。

二、行动

于是决定做个投票器,刷!刷!刷!帮助XX大跑团刷!帮助XX大跑团刷!帮助XX大跑团刷!

首先下载libcurl,编译生成静态库。

其次在网上找了个基于libcurl的HttpClient源码,如下

define HTTP_CURL_H

include

class CHttpClient
{
public:

CHttpClient(void);
~CHttpClient(void);

public:

int Post(const std::string & strUrl, const std::string & strPost, std::string & strResponse);
int Get(const std::string & strUrl, std::string & strResponse);
int Posts(const std::string & strUrl, const std::string & strPost, std::string & strResponse, const char * pCaPath = NULL);
int Gets(const std::string & strUrl, std::string & strResponse, const char * pCaPath = NULL);

public:

void SetDebug(bool bDebug);

private:

bool m_bDebug;

};

endif

include

include "stdafx.h"

include "HttpClient.h"

include "curl/curl.h"

include "curl/easy.h"

CHttpClient::CHttpClient(void) : m_bDebug(false)
{

}

CHttpClient::~CHttpClient(void)
{

}

static int OnDebug(CURL , curl_infotype itype, char pData, size_t size, void *)
{

if (itype == CURLINFO_TEXT)
{
    //printf("[TEXT]{b75a474a571334bb08f4db31fa80d7688c6401b1dcf97fb55e06ed241b59472c}s\n", pData);
}
else if (itype == CURLINFO_HEADER_IN)
{
    printf("[HEADER_IN]{b75a474a571334bb08f4db31fa80d7688c6401b1dcf97fb55e06ed241b59472c}s\n", pData);
}
else if (itype == CURLINFO_HEADER_OUT)
{
    printf("[HEADER_OUT]{b75a474a571334bb08f4db31fa80d7688c6401b1dcf97fb55e06ed241b59472c}s\n", pData);
}
else if (itype == CURLINFO_DATA_IN)
{
    printf("[DATA_IN]{b75a474a571334bb08f4db31fa80d7688c6401b1dcf97fb55e06ed241b59472c}s\n", pData);
}
else if (itype == CURLINFO_DATA_OUT)
{
    printf("[DATA_OUT]{b75a474a571334bb08f4db31fa80d7688c6401b1dcf97fb55e06ed241b59472c}s\n", pData);
}
return 0;

}

static size_t OnWriteData(void buffer, size_t size, size_t nmemb, void lpVoid)
{

std::string* str = dynamic_cast<std::string*>((std::string *)lpVoid);
if (NULL == str || NULL == buffer)
{
    return -1;
}

char* pData = (char*)buffer;
str->append(pData, size * nmemb);
return nmemb;

}

int CHttpClient::Post(const std::string & strUrl, const std::string & strPost, std::string & strResponse)
{

CURLcode res;
CURL* curl = curl_easy_init();
if (NULL == curl)
{
    return CURLE_FAILED_INIT;
}
if (m_bDebug)
{
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
    curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
}
curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strPost.c_str());
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
return res;

}

int CHttpClient::Get(const std::string & strUrl, std::string & strResponse)
{

CURLcode res;
CURL* curl = curl_easy_init();
if (NULL == curl)
{
    return CURLE_FAILED_INIT;
}
if (m_bDebug)
{
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
    curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
}
curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
/**
* 当多个线程都使用超时处理的时候,同时主线程中有sleep或是wait等操作。
* 如果不设置这个选项,libcurl将会发信号打断这个wait从而导致程序退出。
*/
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
return res;

}

int CHttpClient::Posts(const std::string & strUrl, const std::string & strPost, std::string & strResponse, const char * pCaPath)
{

CURLcode res;
CURL* curl = curl_easy_init();
if (curl == NULL)
{
    return -1;
}
if (m_bDebug)
{
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
    curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
}
curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, strPost.c_str());
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
if (NULL == pCaPath)
{
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
}
else
{
    //缺省情况就是PEM,所以无需设置,另外支持DER
    //curl_easy_setopt(curl,CURLOPT_SSLCERTTYPE,"PEM");
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true);
    curl_easy_setopt(curl, CURLOPT_CAINFO, pCaPath);
}
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
return res;

}

int CHttpClient::Gets(const std::string & strUrl, std::string & strResponse, const char * pCaPath)
{

CURLcode res;
CURL* curl = curl_easy_init();
if (NULL == curl)
{
    return CURLE_FAILED_INIT;
}
if (m_bDebug)
{
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
    curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, OnDebug);
}
curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OnWriteData);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&strResponse);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
if (NULL == pCaPath)
{
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
}
else
{
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, true);
    curl_easy_setopt(curl, CURLOPT_CAINFO, pCaPath);
}
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 3);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
return res;

}

///////////////////////////////////////////////////////////////////////////////////////////////

void CHttpClient::SetDebug(bool bDebug)
{

m_bDebug = bDebug;

}

include "stdafx.h"

include <windows.h>

include "HttpClient.h"

int _tmain(int argc, _TCHAR* argv[])
{

long long int s_count = 0;
while (true)
{
    Sleep(100);
    CHttpClient client;
    std::string url = "http://survey.sina.cn/aj/submit?poll_id=xxxx&q_xxx=xxx";

    std::string respon;
    client.Get(url, respon);
    size_t pos = respon.find("true");
    printf("You are vote to XXXTeam {b75a474a571334bb08f4db31fa80d7688c6401b1dcf97fb55e06ed241b59472c}lld times.result:{b75a474a571334bb08f4db31fa80d7688c6401b1dcf97fb55e06ed241b59472c}s\r\n", ++s_count, (pos == std::string::npos) ? "ERROR" : "OK");
    printf("respon:{b75a474a571334bb08f4db31fa80d7688c6401b1dcf97fb55e06ed241b59472c}s\r\n", respon.c_str());
    printf("\r\n");
}

return 0;

}
三、放大招

OK,再写个小test程序,一秒刷10次。后来测试发现,不管一秒请求多少次,貌似服务器每秒只接收一次,或者是同一个ip只接收一次。

好了,挂了一夜,票数直线上升,将近升了一半。

零、总则
市场只有横盘和单边两种形态,在横盘和单边时候都做波段,吃其中的某一个波段,最长持8*4H=32小时的波段。通过4H看趋势,下降、上升、横盘。理论上只有在趋势转换的时候,才会亏损。

一、入场
在创新高的价格第一次回撤时买入,在价格创新低第一次反弹的时候沽空。4H看趋势,确定趋势后,5M找反弹入场。

二、出场
入场后吃足一个波段(8*4H),创新低或者创新高了则退场,不贪多,不嫌少。

三、止损、止盈
止损在当前点与上一个波的最高点(最低点)中间,止盈是在新高点或者新低点。吃足波段。

四、胜算概率
止损和止盈的点数基本相同,只要提高入场准确率,肯定是会有盈利的。

一、总体架构:

1、网络路由:CDN

2、保护服务器及负载均衡:Nginx、HaProxy、LVS

3、业务独立:拆分各个应用服务器,并使用消息队列同步

4、小量数据加快访问:本地缓存

5、大量数据加快访问:memcached,redis及分布式部署

6、大量应用数据:文件服务器,数据库及分部署部署

二、CDN。

传统的未加缓存服务的访问过程:

三、HaProxy+keepalived

HAProxy反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入

keepalived可提供vrrp以及health-check功能,可以只用它提供双机浮动的vip(vrrp虚拟路由功能),这样可以简单实现一个双机热备高可用功能。

详细配置见 haproxy+keepalived实现高可用负载均衡

四、memcached和redis

五、Mysql分布式