まだそんなことやってんの?

技術系備忘録ブログがメイン

JSON形式の文字列を見やすくする

以下はjson形式のdataを出力する

import json
print(json.dumps(data, indent=2,ensure_ascii=False))

pythonで環境変数の取得

.bash_profile

export GOOGLE_API_KEY=*****

ソースコードから

os.environ.get('GOOGLE_API_KEY')

MySQL操作メモ(基本)

MySQLの起動

mysql -u root

パスワードの設定

set password for root@localhost=password('設定したいパスワード');

終了

exit;

データベースの作成

create database データベース名;

データベースの確認

show databeses;

データベースの削除

drop database データベース名;

データベースを使用したい時

use データベース名;

テーブルの作成

create table shop_data (
  name varchar(100),
  address varchar(200),
  url varchar(200)
);

テーブルの確認

show tables;

テーブルの構造確認

desc テーブル名;

レコードの挿入

insert into shop_data (name,address,url) values ('sukiya','toukyouto','http://alsdsjfksdjf');

データの確認

select * from shop_data;

データの抽出

select name from shop_data;

レコードの削除

delete from shop_data where name = 'sukiya';

python requestsを使ってheaderをカスタムしてrequest

import requests

def create_get_request(url):
    session = requests.Session()
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3)' 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
        'Accept': '*/*'}
    responce = session.get(url, headers=headers)

    return responce

JSON形式の文字列でvalueを取り出す(C++)

string res = {
"results": "banana"
}

上記のようなJSON形式の文字列でbananaをとりだす

簡単な文字列の扱い

res.erase(0, res.find(":"));
res.erase(0, res.find("¥"") + 1);
res.erase(res.find("¥""), res.length();

これでbananaを取り出す

BOOSTでOpenCVのMat型をPOSTする

BOOSTでMat型の画像をHTMLのbodyに乗せてPOSTする。 base64エンコードするためにto_base64を使う点だけにC++RESTSDKを使った。 今回はVisualStudioで開発する必要があったたため、NuGetで Boostと C++RESTSDKを ダウンロードした。C++RESTSDKはNuGetでCasablancaで検索。

#include <iostream>
#include <istream>
#include <ostream>
#include <string>
#include <boost/asio.hpp>
#include <opencv2/opencv.hpp>
#include <Windows.h>
#include <sstream>
#include <fstream>
#include <iostream>
#include <vector>
#include <cpprest/http_client.h>
#include<cpprest/filestream.h>
#include <locale> 
#include <codecvt> 
#include <cstdio>

#pragma comment (lib, "opencv_world310d.lib")

using boost::asio::ip::tcp;
using namespace cv;
using namespace std;
using namespace web;
using namespace web::http;
using namespace web::http::client;
using namespace utility::conversions;

int main(int argc, char* argv[])
{
    Mat input = imread("banana_3.jpg");
    vector<uchar> buff;
    static int64 startTick, endTick, diffTick;
    startTick = getTickCount();
    
    imencode(".jpg", input, buff);
    wstring ws = to_base64(buff);
    wstring_convert<codecvt_utf8<wchar_t>, wchar_t> cv;
    string s = cv.to_bytes(ws);
    size_t sizeInBytes = s.size();

    try
    {
        boost::asio::io_service io_service;

        tcp::resolver resolver(io_service);
        tcp::resolver::query query("133.34.174.126", "5000");
        tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);

        tcp::socket socket(io_service);
        boost::asio::connect(socket, endpoint_iterator);

        boost::asio::streambuf request;
        std::ostream request_stream(&request);
        request_stream << "POST " << "http://133.34.174.126:5000/upload" << " HTTP/1.1\r\n";
        request_stream << "Host: " << "133.34.174.126" << "\r\n";
        request_stream << "Accept: */*\r\n";
        request_stream << "Connection: close\r\n";
        request_stream << "Content-Type: application/octet-stream\r\n";
        request_stream << "Content-Length: " << sizeInBytes << "\r\n";
        request_stream << "\r\n";
        request_stream << s << "\r\n";

        // Send the request.
        boost::asio::write(socket, request);

        // Read the response status line. The response streambuf will automatically
        // grow to accommodate the entire line. The growth may be limited by passing
        // a maximum size to the streambuf constructor.
        boost::asio::streambuf response;
        boost::asio::read_until(socket, response, "\r\n");

        // Check that response is OK.
        std::istream response_stream(&response);
        std::string http_version;
        response_stream >> http_version;
        unsigned int status_code;
        response_stream >> status_code;
        std::string status_message;
        std::getline(response_stream, status_message);
        if (!response_stream || http_version.substr(0, 5) != "HTTP/")
        {
            std::cout << "Invalid response\n";
            return 1;
        }
        if (status_code != 200)
        {
            std::cout << "Response returned with status code " << status_code << "\n";
            return 1;
        }

        // Read the response headers, which are terminated by a blank line.
        boost::asio::read_until(socket, response, "\r\n\r\n");

        // Process the response headers.
        std::string header;
        while (std::getline(response_stream, header) && header != "\r")
            std::cout << header << "\n";
        std::cout << "\n";

        // Write whatever content we already have to output.
        if (response.size() > 0)
            std::cout << &response;

        // Read until EOF, writing data to output as we go.
        boost::system::error_code error;
        while (boost::asio::read(socket, response,
            boost::asio::transfer_at_least(1), error))
            std::cout << &response;
        if (error != boost::asio::error::eof)
            throw boost::system::system_error(error);
    }
    catch (std::exception& e)
    {
        std::cout << "Exception: " << e.what() << "\n";
    }
    endTick = getTickCount();
    diffTick = endTick - startTick;
    double msec = 1000.0 * (diffTick / getTickFrequency());
    cout << msec << endl;
    system("PAUSE");
    return 0;
}

anaconda仮想環境activate方法

conda info -e

で仮想環境一覧を得る

tensor                   /Users/.pyenv/versions/anaconda3-4.1.1/envs/tensor
root                  *  /Users/.pyenv/versions/anaconda3-4.1.1

このtensorをactivateするには

source /Users/.pyenv/versions/anaconda3-4.1.1/envs/tensor/bin/activate tensor