2015年8月13日——关于设计模式

3周之前老板让做一个天气预报模块,目标样式:

经过一番自以为是的编程,最终完成了任务。

今天突然让我做另一个项目,里面需要用到天气预报、时钟(拆开)。同时同事手里也有一个项目,也需要用到两个模块拆开的情况。

目标样式:

突然发现之前写的模块存在很多不足,耦合度较高。常用接口未开放出来。经过一天的修改,将模块拆了开来。给同事”审批“也通过了。

目标样式:

因为最终考虑到客户的修改,所以部分参数的修改是在XML中进行的。(这部分参数是初始化时设定的数值)

经过这件事,才明白设计模式的重要性,虽然说重剑无锋,大巧不工,但是一些神妙的招式还是必须要学的。公司有实体书,是在是爽歪歪了。。。

代码以及使用范例献上:

天气预报头文件:

#ifndef GET_WEATHER_INFO
#define GET_WEATHER_INFO

#include "ofxTextUtilsUL2.h"
#include "ofxTrueTypeFontUL2.h"
#include "ofxJSON.h"
#include "TextReader.h"

/*
* 获取天气信息,两种方式,一种是json,一种是xml
* XML调整城市信息的方式与JSON不一样
*/

#define IMG_INFO_FILE    "weather/WeatherStateSwap.json"

typedef struct WeatherStruct
{
    // 基础信息
    wstring cityName;        // 中文城市名
    string cityName_En;        // 英文城市名

    wstring time;            // 当前时间

    // 天气
    int stateIndex;            // 天气状态序号
    string state1;            // 天气状况详情
    string state2;            // 天气状况
    wstring stateDetail;    // 详细天气信息

    // 温度
    wstring maxTemp,        // 最高气温
        minTemp,            // 最低气温
        curTemp;            // 当前气温

    // 风
    wstring windState;        // 风况
    wstring windDir;        // 风向
    wstring windPower;        // 风力

    // 图片
    ofImage img[2];

}WeatherStruct, *pWeatherStruct;

// 函数指针,默认方式是json
bool GetWeatherInfoXML(string url, WeatherStruct& ws);
bool GetWeatherInfoJSon(string url, WeatherStruct& ws);

class GetWeatherInfo
{
public:
    GetWeatherInfo();
    ~GetWeatherInfo();

    void setup(string filePath);
    void update();
    void draw();

    // 查看是否有天气信息
    bool GetWeatherInfoState(){ return mHasInfo; }

    // 设置天气图标颜色
    void SetWeatherImgColor(ofColor cl){ mColorWeatherImg = cl; }
    // 设置天气信息的颜色
    void SetWeatherInfoColor(ofColor cl){ mColorWeatherInfo = cl; }
    // 设置温度信息的颜色
    void SetTempColor(ofColor cl){ mColorTemp = cl; }

    // 设置整个绘制区域
    void SetErea(ofRectangle rt){ rtWholeErea = rt; }
    // 设置获取天气的间隔
    void SetParseGap(int gap){ mParseGap = gap; curTime = gap + 1; }
    // 查看偶去天气的间隔
    int GetParGap(){ return mParseGap; }

    // 获取天气信息数据,对外开放,可以随意使用
    WeatherStruct& GetWeatherData(){ return mWeatherData; }

private:
    // 获取天气信息
    bool(*GetInfo)(string url, WeatherStruct& ws);

    // 获取设置信息
    bool GetSettingInfo(string filePath);

private:
    // 数据
    WeatherStruct mWeatherData;    // 天气信息
    ofColor mColorWeatherImg, mColorWeatherInfo, mColorTemp;

    // 接口地址
    string mUrl;

    // 区域
    ofRectangle rtWholeErea, rtWeatherImg;
    ofPoint posWeatherInfo, posTemp;

    // 字体
    ofxTrueTypeFontUL2 fontWeatherInfo, fontTemp;

    // 城市名称
    string mCityName;

    bool mHasInfo;                // 有效信息的标志位,如果没有或者信息错误,该值为 false
    int mParseGap;                // 解析间隔
    int curTime;
};

#endif

天气预报Cpp文件:

#include "GetWeatherInfo.h"

//--------------------------------------------------------
GetWeatherInfo::GetWeatherInfo()
{
    curTime = mParseGap + 1;
    mHasInfo = false;
    // 默认是xml方式加载
    GetInfo = GetWeatherInfoXML;
}

//--------------------------------------------------------
GetWeatherInfo::~GetWeatherInfo()
{
}

//--------------------------------------------------------
void GetWeatherInfo::setup(string filePath)
{
    // 获取设置信息
    GetSettingInfo(filePath);

}

//--------------------------------------------------------
void GetWeatherInfo::draw()
{
    ofSetColor(mColorWeatherImg);
    mWeatherData.img[0].setAnchorPercent(0.5, 0.5);
    mWeatherData.img[0].draw(rtWeatherImg.x + rtWholeErea.x,
 rtWeatherImg.y + rtWholeErea.y, rtWeatherImg.width, rtWeatherImg.height);

    ofSetColor( mColorWeatherInfo);
    fontWeatherInfo.drawString(mWeatherData.stateDetail,
        posWeatherInfo.x + rtWholeErea.x, posWeatherInfo.y +rtWholeErea.y);

    ofSetColor(mColorTemp);
    fontTemp.drawString(mWeatherData.curTemp + L"°C",
        posTemp.x + rtWholeErea.x, posTemp.y + rtWholeErea.y);

}

//--------------------------------------------------------
void GetWeatherInfo::update()
{
    if (curTime >= mParseGap)
        curTime = 0;
    else
    {
        curTime += ofGetLastFrameTime();
        return;
    }

    if (!GetInfo(mUrl, mWeatherData))
    {
        mHasInfo = false;
        return;
    }

    mHasInfo = true;
    float t = (float)mWeatherData.img[0].height / (float)mWeatherData.img[0].width;

    rtWeatherImg.height = rtWeatherImg.width * t;
}

//--------------------------------------------------------
bool GetWeatherInfo::GetSettingInfo(string filePath)
{
    // 从设置文件中加载设置信息
    ofXml xml;
    xml.load(filePath);
    xml.exists("mainErea");

    // 城市名字
    xml.setTo("mainErea[0]");
    rtWholeErea.x = ofToFloat(xml.getAttribute("x"));
    rtWholeErea.y = ofToFloat(xml.getAttribute("y"));
    rtWholeErea.width = ofToFloat(xml.getAttribute("width"));
    rtWholeErea.height = ofToFloat(xml.getAttribute("height"));

    // 天气图标
    xml.setTo("weatherImg");
    rtWeatherImg.x = ofToFloat(xml.getAttribute("x"))*rtWholeErea.width;
    rtWeatherImg.y = ofToFloat(xml.getAttribute("y"))*rtWholeErea.height;
    rtWeatherImg.width = ofToFloat(xml.getAttribute("width"))*rtWholeErea.width;

    // 天气信息字体
    xml.setToParent();
    xml.setTo("weatherInfo");
    posWeatherInfo.x = ofToFloat(xml.getAttribute("x"))*rtWholeErea.width;
    posWeatherInfo.y = ofToFloat(xml.getAttribute("y"))*rtWholeErea.height;

    fontWeatherInfo.loadFont( xml.getAttribute("fontStyle"),
        ofToInt( xml.getAttribute("fontSize") ) );

    // 温度字体
    xml.setToParent();
    xml.setTo("tempInfo");
    posTemp.x = ofToFloat(xml.getAttribute("x"))*rtWholeErea.width;
    posTemp.y = ofToFloat(xml.getAttribute("y"))*rtWholeErea.height;

    fontTemp.loadFont(xml.getAttribute("fontStyle"),
        ofToInt(xml.getAttribute("fontSize")));

    xml.setToParent();
    // 城市名字
    xml.setToParent();
    xml.exists("city");

    xml.setTo("city[0]");
    mCityName = xml.getAttribute("cityName");

    // 排除掉china字符串,防止解析出错
    if (mCityName == "china")
    {
        ofLogError("can`t determine which city") << endl;
        return false;
    }

    xml.setToParent();
    xml.exists("loadWay");

    // 加载方式
    xml.setTo("loadWay[0]");

    // 链接地址
    if (xml.getAttribute("wayName") == "xml")
    {
        mUrl = xml.getAttribute("urlInfo") + mCityName + ".xml";
    }
    else if (xml.getAttribute("wayName") == "json")
    {
        mUrl = xml.getAttribute("urlInfo") + mCityName + ".xml";
    }
    else
        return false;

    // 加载信息的时间间隔
    SetParseGap( ofToInt( xml.getAttribute("parseGap") ) );

    return true;
}

string test;
//--------------------------------------------------------
bool GetWeatherInfoXML(string url, WeatherStruct& ws)
{
    // 解析XML数据
    ofHttpResponse response;
    response = ofLoadURL(url);

    ofXml mXML;
    // 从缓存中加载数据
    if (mXML.loadFromBuffer(response.data)){
        ofLogNotice("load xml succeed") << endl;
    }
    else{
        ofLogNotice("failed to load xml") << endl;
        return false;
    }

    // 取第一个城市的天气即可
    mXML.setTo("city[0]");
    // 分析数据
    ws.cityName = ofStringUTF8ToWide(mXML.getAttribute("cityname"));        // 城市名称
    ws.state1 = mXML.getAttribute("state1");                                // 天气状态1
    ws.state2 = mXML.getAttribute("state2");                                // 天气状态2
    ws.stateDetail = ofStringUTF8ToWide(mXML.getAttribute("stateDetailed"));// 天气详细信息
    ws.minTemp = ofStringUTF8ToWide(mXML.getAttribute("tem2"));                // 最低温度
    ws.maxTemp = ofStringUTF8ToWide(mXML.getAttribute("tem1"));                // 最高温度
    ws.curTemp = ofStringUTF8ToWide(mXML.getAttribute("temNow"));            // 当前温度
    ws.windState = ofStringUTF8ToWide(mXML.getAttribute("windState"));        // 风况
    ws.windDir = ofStringUTF8ToWide(mXML.getAttribute("windDir"));            // 风向
    ws.windPower = ofStringUTF8ToWide(mXML.getAttribute("windPower"));        // 风力

    // 加载图片---------------------------------------------------------------------
    // 从JSON文件中映射获得图片名称
    ofxJSONElement imgInfos;    // 图片名称集合
    imgInfos.open(IMG_INFO_FILE);

    ws.img[0].loadImage(imgInfos["WeatherStateSwap"]["imgDir"].asString() + "/"
        + imgInfos["WeatherStateSwap"][ws.state1].asString());
    ws.img[1].loadImage(imgInfos["WeatherStateSwap"]["imgDir"].asString() + "/"
        + imgInfos["WeatherStateSwap"][ws.state2].asString());

    // 加载图片---------------------------------------------------------------------

    return true;
}

//--------------------------------------------------------
bool GetWeatherInfoJSon(string url, WeatherStruct& ws)
{
    ofxJSONElement json;
    if (!json.open(url))
    {
        ofLogError("failed to open json url") << endl;
        return false;
    }

    ws.cityName = ofStringUTF8ToWide( json["weatherinfo"]["city"].asString() );
    ws.stateDetail = ofStringUTF8ToWide(json["weatherinfo"]["weather"].asString());

    return true;
}

时钟头文件:

#ifndef OFX_MY_CLOCK
#define OFX_MY_CLOCK

#include "ofmain.h"
#include <cmath>

/*
    在指定位置画一只表
*/
#define HOUR_PCT    0.5
#define MINUTE_PCT    0.7
#define SECOND_PCT    0.85

class ofxMyClock
{
public:
    ofxMyClock();
    ~ofxMyClock();

    void setup();
    void update();
    void draw();

    void SetRadius(double r);
    void SetCenter(ofPoint p){ mCenter = p; }
    void SetColor(ofColor cl){ mColor = cl; }

private:
    // 生成表盘图片
    void GenerateFaceImg();

    // 根据时间计算各个指针尾点
    void ComputeHourAngle();
    void ComputeMinuteAngle();
    void ComputeSecondAngle();

private:
    ofPoint mCenter;            // 中心
    ofColor mColor;

    ofPoint ereaFace;            // 表盘绘制区域

    ofRectangle mRtHour, mRtMinute, mRtSecond;        // 表针的绘制区域
    double mHourAngle, mMinuteAngle, mSecondAngle;    // 三个指针的旋转角度

    ofImage mClockImg;                                // 表盘的图片
    ofImage mNeedleImg;                                // 指针的图片

    int alphaGap;                                    // 透明块的宽度
    int mW, mH, mNumPixels;
    int mSize;
    unsigned char* mOriClockFaceData,                // 表盘图片原始数据
        *mCurClockFaceData;

    int mHour;            // 小时
    int mMinute;        // 分钟
    int mSecond;        // 秒

    double mCurTime;
};

#endif

时钟cpp文件:

#include "ofxMyClock.h"

//--------------------------------------------------------
ofxMyClock::ofxMyClock()
{
    // 加载表盘图片
    mClockImg.loadImage("clock/face.png");
    mClockImg.setAnchorPercent(0.5, 0.5);

    mNumPixels = mClockImg.bpp / 8;
    mW = mClockImg.width;
    mH = mClockImg.height;
    // 图片像素数据,用于实时修改图片数据
    mCurClockFaceData = mClockImg.getPixels();        // 用于生成即时数据

    mSize = mW * mH * mNumPixels;
    mOriClockFaceData = new unsigned char[mSize];    // 保存了原始数据
    memcpy( mOriClockFaceData, mCurClockFaceData, mSize);

    // 透明覆盖条宽度
    alphaGap = 30;

    // 加载表针图片
    mNeedleImg.loadImage("clock/needle.png");
    mNeedleImg.setAnchorPercent(0.5, 1);

    mCenter.x = ofGetWidth() / 2;
    mCenter.y = ofGetHeight() / 2;

    // 随窗口缩放
    if ( ofGetWidth()<ofGetHeight() )
        ereaFace.x = ereaFace.y = ofGetWidth() / 4;
    else
        ereaFace.x = ereaFace.y = ofGetHeight() / 4;

    SetRadius(ereaFace.x/2);

    mHour = mMinute = mSecond = 0;
    mCurTime = 0;

    mColor = ofColor(255,255,255,255);
}

//--------------------------------------------------------
ofxMyClock::~ofxMyClock()
{
    delete[] mOriClockFaceData;
}

//--------------------------------------------------------
void ofxMyClock::setup()
{
    ComputeSecondAngle();
    ComputeMinuteAngle();
    ComputeHourAngle();
    GenerateFaceImg();
}

//--------------------------------------------------------
void ofxMyClock::draw()
{
    ofSetColor(mColor);
    // 表盘
    mClockImg.setAnchorPercent(0.5, 0.5);
    mClockImg.draw(mCenter.x, mCenter.y, ereaFace.x, ereaFace.y);

    ofPushMatrix();
    ofTranslate(mCenter.x, mCenter.y);

    // 时针
    ofPushMatrix();
    ofRotateZ(mHourAngle);
    mNeedleImg.draw(mRtHour);
    ofPopMatrix();

    // 分针
    ofPushMatrix();
    ofRotateZ(mMinuteAngle);
    mNeedleImg.draw(mRtMinute);
    ofPopMatrix();

    // 秒针
    ofPushMatrix();
    ofRotateZ(mSecondAngle);
    mNeedleImg.draw(mRtSecond);
    ofPopMatrix();

    ofPopMatrix();

    ofSetColor(255, 255, 255, 255);
}

//--------------------------------------------------------
void ofxMyClock::update()
{
    if (mCurTime > 1)
    {
        ComputeSecondAngle();

        if (mCurTime > 60)
        {
            ComputeMinuteAngle();
            ComputeHourAngle();

            mCurTime = 0;
        }
        GenerateFaceImg();
    }
    mCurTime += ofGetLastFrameTime();
}

//--------------------------------------------------------
void ofxMyClock::SetRadius(double r)
{
    ereaFace.x = ereaFace.y = r * 2;

    float t = r * mNeedleImg.getWidth() / mNeedleImg.height;

    // 表针的绘制范围(未随着窗口缩放前)
    // 时针是半径的 0.5
    mRtHour.x = mRtHour.y = 0;
    mRtHour.width = t * 1.5;
    mRtHour.height = r*HOUR_PCT;

    // 分针是半径的0.7
    mRtMinute.x = mRtMinute.y = 0;
    mRtMinute.width = t;
    mRtMinute.height = r*MINUTE_PCT;

    // 秒针是半径的 0.85
    mRtSecond.x = mRtSecond.y = 0;
    mRtSecond.width = t*0.5;
    mRtSecond.height = r*SECOND_PCT;
}

//--------------------------------------------------------
void ofxMyClock::ComputeHourAngle()
{
    mHour = ofGetHours();
    mHourAngle = (mHour % 12) * 30 + mMinute / 2.0;
}

//--------------------------------------------------------
void ofxMyClock::ComputeMinuteAngle()
{
    mMinute = ofGetMinutes();
    mMinuteAngle = mMinute * 6.0;
}

//--------------------------------------------------------
void ofxMyClock::ComputeSecondAngle()
{
    mSecond = ofGetSeconds();
    mSecondAngle = mSecond * 6.0;
}

//--------------------------------------------------------
void ofxMyClock::GenerateFaceImg()
{
    // 先把图片还原成原图片
    memcpy(mCurClockFaceData, mOriClockFaceData, mSize);

    // 思路:让两个“矩形条”随着时针分针旋转,他们所经过的地方都覆盖为透明,实现举行条的位置是0度角时的位置
    // 最快速的办法是利用自定义混合公式 + FBO,使用贴图实现,速度最快

    double angleHour = mHourAngle*DEG_TO_RAD;
    double angleMinute = mMinuteAngle*DEG_TO_RAD;
    double angleSecond = mSecondAngle*DEG_TO_RAD;
    double sin1, cos1, sin2, cos2, sin3, cos3;

    // 时
    int x1, x2, y1, y2, x3, y3;
    double hW = mW / 2, hH = mH /2;

    for (double y = 0; y < hH/4;y+=0.5)
    {
        for (double x = hW - alphaGap; x < hW+ alphaGap; x+=0.3)
        {
            double angle = atan( (x - hW) / (y - hH) );

            sin1 = sin(angleHour + angle - PI/2),
                cos1 = cos(angleHour + angle - PI / 2);

            sin2 = sin(angleMinute + angle - PI / 2),
                cos2 = cos(angleMinute + angle - PI / 2);

            sin3 = sin(angleSecond + angle - PI / 2),
                cos3 = cos(angleSecond + angle - PI / 2);

            // 计算旋转后的坐标
            double dist = ofDist( hW, hH, x, y);
            y1 = (dist*sin1 +hW);
            x1 = (dist*cos1 +hH);

            y2 = (dist*sin2 + hW);
            x2 = (dist*cos2 + hH);

            y3 = (dist*sin3 + hW);
            x3 = (dist*cos3 + hH);

            if (x1 > mW - 1 || x1 < 0 || y1<0 || y1> mH - 1)
                continue;
            if (x2 > mW - 1 || x2 < 0 || y2<0 || y2> mH - 1)
                continue;
            if (x3 > mW - 1 || x3 < 0 || y3<0 || y3> mH - 1)
                continue;

            mCurClockFaceData[y1 * mW *4 + x1 * 4 + 3] = 0;
            mCurClockFaceData[y2 * mW * 4 + x2 * 4 + 3] = 0;
            mCurClockFaceData[y3 * mW * 4 + x3 * 4 + 3] = 0;
        }
    }

    mClockImg.update();
}

使用范例:

头文件

#pragma once

#include "ofMain.h"
#include "ofxMyClock.h"
#include "GetWeatherInfo.h"

class ofApp : public ofBaseApp{

public:

    void setup();
    void update();
    void draw();

    void keyPressed(int key);
    void keyReleased(int key);
    void mouseMoved(int x, int y);
    void mouseDragged(int x, int y, int button);
    void mousePressed(int x, int y, int button);
    void mouseReleased(int x, int y, int button);
    void mouseEntered(int x, int y);
    void mouseExited(int x, int y);
    void windowResized(int w, int h);
    void dragEvent(ofDragInfo dragInfo);
    void gotMessage(ofMessage msg);

    ofxMyClock clock;

    ofPoint clockCenter;

    GetWeatherInfo weatherCls;

};

Cpp文件:

#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup(){
    ofDisableAntiAliasing();
    ofSetFrameRate(60);
    ofSetWindowPosition(100, 100);

    weatherCls.setup("settings.xml");
    clock.setup();

    clock.SetColor(ofColor(255,255,255,255));
}
string ss;
//--------------------------------------------------------------
void ofApp::update(){

    ofSetWindowTitle( ofToString( ofGetFrameRate() ) );
    weatherCls.update();
    clock.update();
}

//--------------------------------------------------------------
void ofApp::draw(){

    ofBackgroundGradient(ofColor(200, 200, 200), ofColor(120, 120, 120),OF_GRADIENT_CIRCULAR);

    ofSetColor(255, 255, 255, 255);
    weatherCls.draw( );

    clock.draw();
}

//--------------------------------------------------------------
void ofApp::keyPressed(int key){

}

//--------------------------------------------------------------
void ofApp::keyReleased(int key){

}

//--------------------------------------------------------------
void ofApp::mouseMoved(int x, int y){
    clockCenter.x = x, clockCenter.y = y;
    clock.SetCenter(clockCenter);

    clock.SetRadius( ofDist(x,y, ofGetWidth()/2, ofGetHeight()/2)/2 );
}

//--------------------------------------------------------------
void ofApp::mouseDragged(int x, int y, int button){

}

//--------------------------------------------------------------
void ofApp::mousePressed(int x, int y, int button){

}

//--------------------------------------------------------------
void ofApp::mouseReleased(int x, int y, int button){

}

//--------------------------------------------------------------
void ofApp::mouseEntered(int x, int y){

}

//--------------------------------------------------------------
void ofApp::mouseExited(int x, int y){

}

//--------------------------------------------------------------
void ofApp::windowResized(int w, int h){
}

//--------------------------------------------------------------
void ofApp::gotMessage(ofMessage msg){

}

//--------------------------------------------------------------
void ofApp::dragEvent(ofDragInfo dragInfo){

}

继续修炼。

时间: 2024-08-03 21:58:37

2015年8月13日——关于设计模式的相关文章

李宁-2015年7月13日-个人文档

姓名 李宁 日期 2015年7月13日 主要工作及心得 由于我负责服务器端的编写工作,而各部分的客户端的操作都要与服务器端通信,所以在今天的调试中,我贯穿于各部分模块的调试和检测,主要负责在出现问题时查找问题所属是客户端还是服务器端,针对服务器端出现的问题进行查找和修改. 上午我们的工作重心在于服务器端连接数据库,由于连接数据库是我们的项目中的一个核心部分,如果无法连接数据库,所有工作将无法继续展开,在此项目之前,我们接触Java连接数据库只在网页程序中接触过,并没有接触过普通的Java项目连接

2015年7月13日 项目开发记录

日期 2015年7月13日 星期 星期一 位置 中蓝公寓蓝芳园D507 主要工作 1)         解决服务器端连接数据库的问题(寻找驱动.驱动放置的位置及相关问题) 2)         代码合并及调试 操作员代码部分调试 提供者代码部分调试 经理代码部分调试 遇到的问题 1)         服务器端无法连接上数据库 2)         调试过程中遇到各种问题,例如 3)         JAVA中的日期类和数据库中的日期类转化问题 4)         字符串和日期的转化 解决方法

2015年9月13日和15日【shell、sed&awk 的使用(一)】-JY1506402-19+liuhui880818

目录: 一.shell程序的运行原理 二.shell常用技巧 1.命令历史 2.命令别名 3.命令引用 4.文件名通配 5.常用快捷键 6.补全功能 7.输入输出重定向和管道 8.与用户交互命令 9.脚本的规范建立与执行 10.bash常用选项 11.命令状态结果 持续发现中... 三.常用知识点说明 1.变量 1)变量类型 2)本地变量 3)环境变量 4)特殊变量 2.条件测试 1)整数测试 2)字符串测试 3)文件测试 4)测试表达式 3.条件判断(选择执行) 4.脚本参数(位置参数变量)

linux运维实战练习-2015年9月13日课程作业(练习)安排

一.作业(练习)内容: 1.描述shell程序的运行原理(可附带必要的图形说明): 2.总结shell编程中所涉及到的所有知识点(如:变量.语法.命令状态等等等,要带图的哟): 3.总结课程所讲的所有循环语句.条件判断的使用方法及其相关示例:(if (jpg|png is not exist):echo "You say a XX") 4.写一个脚本:如果某路径不存在,则将其创建为目录:否则显示其存在,并显示内容类型:(不要怀疑,就是这么简单) 5.写一个脚本,完成如下功能:判断给定的

2015年2月13日服务器无法访问事故记录以及经验总结

 计划2015年每天写一篇文章 提问请移步 http://weibo.com/p/1001603810113986105909 如果您不想看完整过程的话,那么直接看经验总结,转发留存吧! 事故主要问题 手工修改过IP设置,因此使用图形界面修改将导致出错,后果就是路由表错误 机房相关经验 需要关注机房的允许维护的时间,特别是公众假期 需要准备好详尽的交通路线,例如这个机房出租车司机可能更熟悉原来的名称:松下电视机厂 需要关注机房的门禁管理,身份证是一定要带的,之前的机房还有需要提前自制工卡的情

每日总结-2015年1月13日

MVC写API接口遇到问题 [HttpPost] [POST("alterScriptParams")] public bool AlterScriptParamsByScriptName(string scriptName,string scriptParams) { var agencyDatasetScriptBusinessEntity = IocContainer.Resolve<IAgencyDatasetScriptBusinessEntities>(); r

2015年3月13日-日记

日子一天一天过~~我们会慢慢长大~~时间过得好快的说~总结今天做了什么呢.?今天把焊接机的画直线,画圆弧等操作的流程昨晚了~就剩调试了,不过电机这部分还是有点问题了~不知道为什么会多出几步来..真的有点蛋疼了.要是驱动板还没能够正常的话,那就难了..相信我们电子工程师一定可以滴!加油哈哈.然后晚上将大神辉的代码又看了一遍,有了点灵感,想想要把他的写代码的框架给移植过来,基本知道了该如何写了.剩下的就是思维方面的事情了.得向他学习学习~该如何写代码,如何构思.哈哈~感觉我就快学会了.加油吧!今天的

马哥linux+python&mdash;&mdash;2015年9月13日课程作业

一.作业(练习)内容: 1.描述shell程序的运行原理(可附带必要的图形说明): 什么是shell       shell是用户和Linux操作系统之间的接口.Linux中有多种shell,其中缺省使用的是Bash.Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口.它是命令语言.命令解释程序及程序设计语言的统称.shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用.用户在提示符下输入的命令都由shell先解释然后传

linux运维实战练习-2015年9月13日-9月15日课程作业(练习)安排

1.描述shell程序的运行原理(可附带必要的图形说明): 2.总结shell编程中所涉及到的所有知识点(如:变量.语法.命令状态等等等,要带图的哟): 3.总结课程所讲的所有循环语句.条件判断的使用方法及其相关示例:(if (jpg|png is not exist):echo "You say a XX") 4.总结文本处理工具sed及awk的用法:(必须附带示例) 5.写一个脚本:如果某路径不存在,则将其创建为目录:否则显示其存在,并显示内容类型:(不要怀疑,就是这么简单) 6.