作者:matrix
发布时间:2019-08-11
分类:零零星星
默认matlab安装会根据系统语言环境来设置文件编码,想设置为utf-8编码反而是件麻烦事。
网上大多都说直接修改lcdata就可以,但是我找了一大圈都没看到里面出现的关键字内容,也试了很多方法都没用。
2017之后版本的lcdata.xml都只是空白的注释文件,其实就需要把lcdata_utf8改为lcdata或者把里面的内容放到lcdata.xml就可以了。
环境: MATLAB_R2018a for Mac
修改lcdata.xml
Mac lcdata.xml路径:/Applications/MATLAB_R2018a.app/bin/lcdata.xml
windows的话找到安装目录的bin文件夹
<?xml version="1.0" encoding="UTF-8" ?>
<!-- MathWorks Locale Database -->
<!-- File Name: lcdata.xml -->
<!-- Copyright 2007-2016 The MathWorks, Inc. -->
<lcdata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="lcdata.xsd" >
<!-- Note: -->
<!-- This locale database is used to customize the MathWorks locale database. -->
<!-- Codeset entry example -->
<!-- <codeset> -->
<!-- <encoding name="StandardEncodingName" jvm_encoding="JavaEncodingName"> -->
<!-- <encoding_alias name="AliasName"/> -->
<!-- </encoding> -->
<!-- </codeset> -->
<!-- Locale entries example -->
<!-- <locale name="StandardLocaleName" encoding="EncodingName" xpg_name="XpgLocaleName"> -->
<!-- <alias name="AliasName"/> -->
<!-- "region_alias" is only for Mac -->
<!-- <region_alias name="RegionAliasName"/> -->
<!-- </locale> -->
<locale name="zh_CN" encoding="UTF-8" xpg_name="zh_CN.UTF-8"> </locale>
</locale>
在locale标签里面添加<locale name="zh_CN" encoding="UTF-8" xpg_name="zh_CN.UTF-8"> </locale>
之后再重启matlab就好了。
参考:
https://blog.csdn.net/qq_34241498/article/details/90168924
作者:matrix
发布时间:2019-07-15
分类:零零星星
本来只是想获取字符串的MD5hash值,结果发现麻烦。首先去mathworks找到的DataHash,GetMD5这些函数要么无法使用,要么就是计算出来的md5值是错误的,反正达不到效果。
刚开始以为mathworks的代码必须登录账户才能下载,现在才发现,点击Overview旁边的Functions
选项卡就能看到源代码。 😂
当初就算是找到了一些函数也是不能使用,最后还是使用python库来解决。好在matlab对python的调用非常简单。直接使用py
库就好了,唯一的问题就是有些python的语法和matlab不同,比如切片[:::]
操作这些。
安装python3环境
2019-08-19测试发现macos中3.7版本可以,但是在centOS中就调用失败。所以就centOS中测试安装3.5的版本了。
后面发现应该是编译时的enable-shared参数问题。
2020-02-18centos中测试可以直接用conda来安装python3.5使用,3.6,3.7测试调用失败!
开始手动编译安装
cd ~
yum install zlib-devel bzip2-devel openssl-devel ncurese-devel
wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz
tar xf Python-3.5.0.tgz
cd Python-3.5.0
./configure --enable-shared #matlab要求必须设置enable-shared参数
make && make install
参考:
https://ww2.mathworks.cn/help/matlab/matlab_external/undefined-variable-py-or-function-py-command.html#buialof-67
https://ww2.mathworks.cn/help/matlab/getting-started-with-python.html?lang=en
切换默认的python解释器
matlab输入
pyversion`可以查看python解释器路径,如果需要修改:
pyversion /usr/local/bin/python3 %切换到python3.7指定路径
直接调用python内置函数
计算字符串md5函数
使用python的hashlib库进行操作
function[re]=md5(str)
%{
依赖python进行md5 hash
%}
m2 = py.hashlib.md5();
m2.update(py.str(str).encode('utf-8'));
re = char(m2.hexdigest());
说明:
此函数依赖python环境,确保系统中有安装。
兼容Linux,Mac,Windows
最后char函数是将py.str
类型转换为matlab的str
知道了这个操作,以后很多操作就会非常简单。
比如
获取当前时间戳:
str2num(char(py.int(py.time.time())))
直接用py
库来调用即可,最后再使用matlab函数str2num,char处理成number类型。
调用自定义.py脚本函数
上面的方法倒是可以解决一部分难题,但是遇到方括号[]、百分号%操作符这些直接在.m
文件中就不会执行了。毕竟matlab是以它的语法来解析,这样只得起调.py
文件来操作。
新建test.py
文件位于当前工作目录
def func():
return '123'[::-1]
载入python脚本:
%脚本所在路径,空字符串表示当前目录
path = '' %当前目录
%path = 'a/' %当前的子目录a
if count(py.sys.path,path) == 0
insert(py.sys.path,int32(0),path);
end
%清除脚本缓存,执行重载操作
clear classes;
mod = py.importlib.import_module('test');%载入的脚本模块
%mod = py.importlib.import_module('a.test');%载入的子目录下的脚本模块
py.importlib.reload(mod);
调用py.test.func
即可得到切片结果321
,注意为py.str
类型。
子目录形同:py.子目录.文件名.函数名
当修改py文件之后再调用会发现还是之前的结果,matlab缓存了之前的python脚本,所以这里需要clear classes...
这类操作。
参考:
MATLAB 调用 Python
https://www.cnblogs.com/zknublx/p/6212590.html
https://blog.csdn.net/jnulzl/article/details/51170859
https://zhuanlan.zhihu.com/p/42598340
https://blog.csdn.net/x5675602/article/details/52134981
http://www.1cae.com/a/MatLab/52/python-matlab-8943.htm
作者:matrix
发布时间:2019-06-27
分类:零零星星
matlab网络请求操作完成之后需要对返回数据读取,操作时候出现的问题就是无法循环struct数据。
因为接口一般以json数据格式返回,matlab会把Object结构处理为struct数据而无法循环读取。很多字段的时候我可不希望看到手写矩阵声明。
取struct长度的size
和length
都无法正常返回其元素个数,听说它不是向量。
办法
用fieldnames
函数获取struct的字段field数据(返回为cell元胞数组)
之后用structName.(expression)
这种操作获取动态的struct数组数据。比如struct.a
等同于动态操作的struct.('a')
现在才知道文档上有,我TM竟然随便点括号猜出来的~
%声明方式1
%s = struct('a',11,'b',222)
%声明方式2
s=struct
s.a = 11
s.b = 222
% https://ww2.mathworks.cn/help/matlab/ref/struct.html
fileds = fieldnames(s);
for i=1:length(fileds)
k = fileds(i);
key = k{1};
value = s.(key);
disp(key)
disp(value)
disp('---')
end
% s.('a') %动态结构体引用
升级操作:自动生成对应变量
按照Struct字段自动生成对应的变量名和值
s = struct('a',11,'b',222)
fileds = fieldnames(s);
for i=1:length(fileds)
k = fileds(i);
key = k{1};
value = s.(key);
eval(['variable_',num2str(key) ' = ' num2str(value)])
end
说明:
使用eval函数
动态创建variable_%s
的变量。
本来在mathworks上看到有人发布过Structure fields to variables方法来自动处理struct,但是没有正版授权码 所以无法下载使用。
参考:
https://ww2.mathworks.cn/help/matlab/learn_matlab/types-of-arrays.html
https://ww2.mathworks.cn/help/matlab/ref/struct.html
https://www.ilovematlab.cn/thread-317868-1-1.html
https://ww2.mathworks.cn/matlabcentral/fileexchange/26216-structure-fields-to-variables
PEACE~
作者:matrix
发布时间:2019-06-22
分类:零零星星
matlab这个学术界的编程语言我是几个月前听说,有些基本操作是真的麻烦,当然在其他方面matlab是相当🐂🍺
使用Matlab进行GET/POST请求调用接口,提交参数。
之前苦于没有将get请求的query参数进行变量提取,好在www.mathworks.com找到有文档说明
GET请求操作函数封装
get网络请求封装成函数get_request
%GET网络请求
function [result]=get_request(uri,query)
import matlab.net.* %导入Matlab网络请求库
import matlab.net.http.*
uri = URI(uri);%请求地址;
uri.Query = matlab.net.QueryParameter(query);%get 附加请求参数
r = RequestMessage;
r.Method = 'GET';%使用GET请求类型
response = send(r,uri);%发送请求
status = response.StatusCode%获取服务器响应的状态码
if (status==200) %一般成功响应的状态码为200 表示ok 即成功
content = response.Body.Data; %获取服务器响应的内容
result = content;
else
disp('请求失败')
end
说明:
参数1 uri: 请求url, 如:http://hhtjim.com
参数2 query: get请求参数 传入struct类型数据
还有就是接口返回json数据(response响应头有指定type json),matlab会自动解析json数据,最后用response.Body.Data
调用就好,不方便查看的那就debug。
如果要手动处理json字符串的话使用jsonencode
, jsondecode
进行编解操作。
调用举例:
请求:http://hhtjim.com?arg=123
get_request('http://hhtjim.com',struct('arg', '123'))
或者
query.arg = '123'
get_request('http://hhtjim.com',query)
上面两种方式的调用都可以完成操作。matlab内部会自己封装拼接为http://hhtjim.com?arg=123
进行请求。
如果想要更简单的ge请求可以使用webread进行操作。
POST请求
这里测试的POST的请求更为复杂,会添加自定义请求头,post body表单内容,cookie的涉及。所以没有封装成统一调用的函数,需要的自行修改咯~
import matlab.net.* %倒入Matlab网络请求库
import matlab.net.http.*
uri = URI('http://localhost:8080/testOrder/double_param/');%请求地址
%添加请求参数
qStruct.K=1;
qStruct.d2=2;
qStruct.d1=3;
qStruct.L=4;
qStruct.order_switch=1;%1开 0关
qStruct.order_size=2;
qStruct.diff_earnings=1.00009;
r = RequestMessage;
r.Method = 'POST'%使用POST请求类型
csrf = 'YYC0e8GICcEroZGDuL8THJ4ZQdwQpDqNtkBsfnaBP0XpH3rqYVNXADJGpWdo53o0'%Djabgo框架表单中防止跨站请求的参数,其实这是服务器生成的伪随机字符
qStruct.csrfmiddlewaretoken=csrf;
r.Body = matlab.net.QueryParameter(qStruct)%放入请求参数
%添加请求头
r = addFields(r,'Content-Type','application/x-www-form-urlencoded');
r = addFields(r,'Cookie',sprintf('csrftoken=%s',csrf));
response = send(r,uri);%发送请求
status = response.StatusCode%获取服务器响应的状态码
if (status==200) %一般成功响应的状态码为200 表示ok 即成功
content = response.Body.Data %获取服务器响应的内容
disp('请求成功:')
disp(content)
else
disp('请求失败')
end
%参考:
%https://ww2.mathworks.cn/help/matlab/http-interface.html
%https://ww2.mathworks.cn/help/matlab/ref/matlab.net.http.requestmessage.send.html#bu199af-6
%https://www.mathworks.com/help/matlab/ref/matlab.net.http.message.addfields.html
%https://ww2.mathworks.cn/help/matlab/ref/matlab.net.queryparameter-class.html
最后我真想说术业有专攻
,用matlab进行网络请求是的自讨苦吃。
参考:
https://ww2.mathworks.cn/help/matlab/ref/matlab.net.uri-class.html#bvflp65-2
https://ww2.mathworks.cn/help/matlab/http-interface.html
https://ww2.mathworks.cn/help/matlab/ref/matlab.net.http.requestmessage.send.html#bu199af-6
https://www.mathworks.com/help/matlab/ref/matlab.net.http.message.addfields.html
https://ww2.mathworks.cn/help/matlab/ref/matlab.net.queryparameter-class.html
作者:matrix
发布时间:2019-05-31
分类:零零星星
对于胶片感兴趣想尝试主要源于腹肌蓝波湾的XT20
,虽然XT20之前没有摄影的经历 不过还是能感受到一丁点的胶片模拟复古静谧的感觉。
相机用的VILIA Soviet
,两个月前ebay海淘的前苏联造物。这个相机需要全部手动操作,估焦、测光这些我都对比手上的xt20进行拍摄,最终效果还算不错,个别照片有点糊和低曝。总体来说很满意啦,毕竟第一次用这玩意拍。不错 不错 以后还得缴学费。
胶卷是淘宝买的iso200柯达彩色135,选的最便宜的一个18块一卷的。起初会担心过安检的X光会让胶片曝光,实际上测试完全没问题,或许iso高的胶卷会有影响。
把胶卷冲洗为电子档的照相馆还真不好找,在成都听朋友说环球中心大概25可以弄。在昆明问了好多家照相馆都不可以,最后找到的是云南师大西南联大校区正门口的大红门照相馆
可以冲洗,30块钱搞定等了2周。
总体效果非常满意,浓重的复古感。毕竟手动估焦还不是很熟悉,曝光也是。 🙈
第一卷胶片
作者:matrix
发布时间:2019-05-26
分类:零零星星
SQLite Manager是以前@小飞推荐的sqlite管理的插件,当初觉得这个好精简,竟然可以以火狐插件的形式对数据库进行管理,堪称高级货!去年发现因为firefox版本更新不能使用了,现在捡起来是因为临时想对sqlite文件进行查看编辑操作,想起了这个非常轻量级的插件,完全能胜任我的需求,并且我还不想用其他不熟悉的DB管理软件。看到插件被下架、版本不支持,那这次偏要下载使用旧版本的火狐浏览器来解决这个问题。
https://addons.mozilla.org/zh-CN/firefox/addon/sqlite-manager/
这个插件已经被mozilla下架了,lazierthanthou作者有github项目地址。
GitHub:https://github.com/lazierthanthou/sqlite-manager
插件下载
不过可以通过其他方式找到:
下载页面:https://addons.thunderbird.net/en-us/seamonkey/addon/sqlite-manager/
>> cache download SQLite Manager 0.8.3.1
firefox版本问题
youtube上有人说可以用ESR版本来解决插件不能使用的问题,然而进过测试无法使用。最新版本的ESR是基于火狐60.7,对于SQLite Manager插件已经无能为力。
有说firefox57以上版本已经把sqlite引擎去除,所以如果硬是要用那就必须降到支持的版本,理论上小于57应该是可以的。
Firefox 历史版本:
https://ftp.mozilla.org/pub/firefox/releases/
我这里测试使用52.9.0esr
版本,完美运行。
PEACE~
作者:matrix
发布时间:2019-05-16
分类:Python 零零星星
Django默认模板中如果想要调用变量的属性值只能点.
字符,也就是value.arg
,等同于value["arg"]
的调用,不能使用方括号的语法操作,这样的就会导致无法取value[arg]
这种变量属性值。
解决办法
1.更换模版引擎。
2.使用自定义template filters模版过滤器
使用模版过滤器setup
1.创建templatetags目录
在项目的模块目录下创建templatetags文件夹(和路由配置urls.py同级)
目录下需要创建__init__.py
空白文件
2.创建过滤器py文件
自定义过滤器:dict_value
val.py
from django import template
register = template.Library()
@register.filter(name='dict_value')
def dict_value(value, arg):
"""
模版变量过滤器 用于调用变量属性的值
如:$value[$arg]
:param value:
:param arg:
:return:
"""
return value[arg]
3.模版中使用
模版中需要load
操作:
{% load val %} #载入过滤器文件val.py
{{ params_data|dict_value:item|dict_value:'title' }}#使用过滤器
如上调用形式等同于:
params_data[item]['title']
参考:
https://www.v2ex.com/t/66772
https://docs.djangoproject.com/en/dev/howto/custom-template-tags/
https://blog.csdn.net/lagelangzhi/article/details/54620061
PEACE~
作者:matrix
发布时间:2019-03-22
分类:零零星星
有时候使用终端clone操作或者其他install访问外网的时候会造成超级延迟,以至于无法使用,网络需要符合国情,毕竟有个大号防火墙。使用Proxifier
可以间接实现全局的外网访问。
windows端可以使用SSTap
测试环境:macOS + ss + Proxifier
方案1.使用Proxifier
Proxifier下载:http://www.proxifier.com/download/
注册软件:
用户名称随意:Anything
注册码:P427L-9Y552-5433E-8DSR3-58Z68
程序添加完成之后,下方的Action
选择刚刚添加的Proxies,点击ok
之后控制台界面就能看到程序访问外网的情况
终端测试:
$ curl https://ip.cn
方案2.设置全局export变量
$ `vi ~/.bash_profile` #编辑环境变量配置
#添加如下内容
# proxy list
alias proxy='export all_proxy=socks5://127.0.0.1:1086' #需要开启ss
alias unproxy='unset all_proxy'
应用
$ source ~/.bash_profile
之后命令行中使用proxy
和unproxy
来手动开启和关闭代理
参考:
https://www.v2ex.com/t/269997
终端使用 Shadowsocks 的代理方案:Proxifier
https://www.ljjjustin.xyz/2018/03/21/macos-system-proxies/
Tutorial – Mac tips & Tricks from NMac.to
http://yangzq007.com/2017/03/29/%E7%BB%88%E7%AB%AF%E7%BF%BB%E5%A2%99/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
... - 23