多个apple id终造成混乱

苹果将数据中心迁往云上贵州之前,我一直使用国内的apple id,因此不少软件是在这个id下购买的。

随着长城越来越高,越来越强,我只能换了一个美国区id。
但是带来一个明显问题,手机或mac上的app到底是那个id购买的,我自己也经常搞错。

上周拿到了一台新的m1芯片mac电脑。第一步自然是去app store下载曾经购买的软件,好吧,就是这个things3,我点击购买后,并没有出现熟悉的“这是你曾经购买的项目,现在可以免费下载的说法”,相当于同样的软件,我在国内购买过 ,现在在美国app store上化40美金又买了一套。

在下面页面上申请了,等待结果吧。

解决方案销售结束了

前两天看了一片文章,《解决方案的末日》。

我们刚刚启动解决方案的能力建设,没想到Harvard Business review就给解决方案判了死刑,而且还是在10年前。。。

文章的核心思路是,要关注变化,而不是采购:

Instead, they emphasize two nontraditional criteria.

  • First, they put a premium on customer agility:
Can a customer act quickly and decisively when presented with a 
compelling case, or is it hamstrung by structures and relationships 
that stifle change?
  • Second, they pursue customers that have an emerging need or are in a state of organizational flux, whether because of external pressures, such as regulatory reform, or because of internal pressures, such as a recent acquisition, a leadership turnover, or widespread dissatisfaction with current practices.
Since they’re already reexamining the status quo, these customers are 
looking for insights and are naturally more receptive to the disruptive 
ideas that star performers bring to the table. Stars, in other words, 
place more emphasis on a customer’s potential to change than on its 
potential to buy.

解决方案面向行业用户提供基于特定场景的技术方案,同时带动产品快速迭代。因此在华为,是把解决方案所在部门,命名为“MKT和解决方案部”,强调它的市场属性。
带动产品快速迭代,更多是美好愿望,否则2021年的华为也不会一口气成立5个行业军团,来完成多产粮食的目标。

华为的核心能力是通信、计算,煤矿有哪些业务需要通信和计算呢?传感器数据回传、视频监控吧(也是泛化的数据回传,上墙或AI识别之后上墙)。

应用AI技术,为什么一定要解决方案?需要先回答一个问题,为什么要考虑AI技术。摒弃那些庸俗的原因,比如领导要业绩,赶时髦等等,核心还是AI解决了以往一些技术没法解决的核心问题,比如感知能力提升,特别是非结构化数据到结构化数据,比如海量数据下的快速决策。

但是这些能力的门槛已经被开源平台降低了很多,是技术不是产品,我们需要为这个发动机装底盘,然后在底盘上安装轮子,车厢去拉货,挖斗去装土,吊臂去吊装。。。

所以我们要考虑我们应该如何给算法装上翅膀?也就是如何清洗、应用这些数据???

如何整理这些结构化的数据!!!!!

HBR的文章链接

Flask@002

“By default Flask looks for templates in a templates subdirectory 
located inside the main application directory. For the next version of 
hello.py, you need to create the templates subdirectory and store the 
templates defined in the previous examples in it as index.html and 
user.html, respectively.”

Excerpt From
Flask Web Development
Miguel Grinberg
This material may be protected by copyright.

按照狼书的说明,使用templates的好处是,把业务逻辑和代码的呈现逻辑进行了隔离,这样的好处是非常清晰,不会让程序员的思路混乱,当使用git checkout 3a后,检查目录结构如下:

(venv) MDMacPro/Users/madapapa/Study/madapapa.com/flaskr/flaskproject/
flaskygit:(e020af8) [12:20]ls
LICENSE     __pycache__ templates
README.md   hello.py

debug mode

“(venv) $ export FLASK_APP=hello.py
(venv) $ export FLASK_DEBUG=1
(venv) $ flask run”

Excerpt From
Flask Web Development
Miguel Grinberg
This material may be protected by copyright.

通过export FLASK_DEBUG=1开启debug模式,有两个好处

  • reloader模式可以在修改源代码的同时,自动重启服务器,代码的修改结果在运行环境下自动生效,对调试非常友好
  • debugger模式,可以让你的浏览器显示错误信息,不过在生产环境下绝对不能打开这个模式。

template和placeholder

template是包含了响应内容的文件,使用placeholder作为一个变量服务动态部分,这个动态部分包含在请求的文本里。使用实际值来代替变量,并且返回最终响应字符串的过程,就是渲染(rendering),flask使用一个非常强大的模版引擎:Jinja2。

Jinja是日语神庙的意思。

render_template函数

render_template函数使用Jinja2引擎,第一个参数是文件名“index.html”,第二个参数是一个key-values的键值对,其中na是user.html中的参数名称,name1是需要带入的真实参数值。

from flask import Flask, render_template
app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/user/<name1>')
def user(name1):
    return render_template('user.html', na=name1)

user.html文件的内容

<h1>Hello, {{ na }}!</h1>

{{na}}这种结构,可以带入各种参数格式,比如字典、列表、方法等等。

“<p>A value from a dictionary: {{ mydict['key'] }}.</p>
“<p>A value from a list: {{ mylist[3] }}.</p>”
“<p>A value from a list with variable index:{{ mylist[myvar] }}.</p>”
“<p>A value from an object's method: {{ myobj.somemethod() }}.</p>”

开始sumo

在苹果电脑上安装sumo,非常简单,下面是官网介绍
sumo官网mac安装介绍
however,防止国内网络时不时发疯,简略描述如下:

首先确保brew状态最佳。

brew update
brew upgrade

使用如下命令,安装sumo的稳定版本。

brew tap dlr-ts/sumo
brew install sumo

使用source 激活bashrc

/sumo/project/jiading[15:30]source ~/.bashrc
/sumo/project/jiading[15:30]echo $SUMO_HOME 
/usr/local/opt/sumo/share/sumo

如果使用sumo-gui没有自动弹出gui界面,重新使用source激活bashrc即可。

修改zshrc

vi /etc/zshrc

注意⚠️:上面对bashrc和zshrc的操作,并没有起到实际作用,也许是我操作有问题。
如果要让sumo-gui顺利运行,直接使用CMD-SPACE,调用xquartz即可。

MDMacPro/[13:29]sumo-gui 
FXApp::openDisplay: unable to open display :0.0

出现上面告警的原因是没有启动x11进程,也就是xquartz,X11也叫做X Windows系统,它是在unix或类unix系统上(如mac os)建立图形用户界面的标准工具包和协议。
x11使用客户端与服务端,只不过这里的概念和平常我们以操作者为中心使用的概念不同,它是以应用程序为中心的。也就是说,当我们要把真正服务器端(如阿里云)的ubantu应用程序,在本地进行图形化呈现时,那么本地就是“服务端”,而云上的应用程序使用的是“客户端”。

百度百科X11介绍

知乎XQuartz介绍

举例说明,是一种关照,也是深深的蔑视

举例说明,是一种关照。我们遇到一种新的情况,比如新技术、新商业模式,总会希望讲述者以更通俗易懂的方式向我们介绍,其中最常用的方法是举例说明,或者打个比方。

我越来越发现,举例说明看起来是对听众的关照,其实也是一种深深的蔑视,是对大家理解能力的深深的不信任,预设了面前的人群,不具备理解即将展开的话题的讨论资格与能力,因为你没有贝叶斯知识,所以只能向你举例说明不完备问题。

更有意思的是,讲述者有时候也仅仅把自己对真实的理解,停留在举例说明的层次,这时候与其说是一种蔑视,更多不过是有意无意的自我欺骗罢了。

年有所长,学有所得

年纪大了,学习进度非常慢,但学习感悟非常多。

每天在playground上做题,再晚都会争取完成。但是一个简单的loop或者if else,都会耗时许久。

前几周刚刚学会了right hand rules,就是解maze问题时常用的一种方法,伪代码如下:

if isBlockRight {
   moveForward()
   } else {
   turnRight()
   moveForward()
   }

就是这么简单的一个逻辑,如果碰上那种断头路,要么是原地兜圈子,要么就是不断要跳下悬崖。每次遇到需要使用right hand rules的场景,都会暗下决心,要想出种一劳永逸的方法,每次都失败。因为平面问题解决了,还有上山下海,其实能够解决现实问题就好。

等问题出现,我再告诉大家。

开始flask001

flask虚拟环境

根据flask官网介绍,使用虚拟环境来管理项目的依赖,包括开发与生产环境。

因为随着Python项目增多,很有可能要与不同的python库、甚至不同版本的python打交道。一个项目的新版本库文件与另外一个项目可能不兼容。

虚拟环境独立于python库,一个虚拟环境匹配一个项目。为一个项目安装的包不会影响其他项目包或系统包。

Python绑定venv模块来创造虚拟环境。

创建虚拟环境

macOS/Linux

$ mkdir flaskproject
$ cd flaskproject
$ python3 -m venv venv

激活虚拟环境

macOS/Linux

$  . venv/bin/activate

这里需要注意,这个“.”和venv之间要有空格,参见stackoverflow的解释:

. venv/bin/activate

or

source venv/bin/activate

使用虚拟环境,并设置为开发环境

在venv环境下,如果直接启动flask服务:

flask run

会有如下红色警告信息,因为flask默认开发者是生产环境下工作,而开发环境不稳定,所以会提示如下告警。
Screen Shot 2021-12-20 at 12.00.48 AM

因此需要进行设置

(venv) MDMacPro/Users/XXXXXXXXXXXX/flaskr/flaskproject/bmi[23:58]export FLASK_ENV=development

参考flask设置环境变量

使用git checkout 2a

使用git checkout 2a 把对应project的source code复制到visual studio里面

由于已经通过git启动了相关程序,因此会展示如下内容。

使用git reset –hard

如果对git上的源代码进行了修改,可以使用git reset –hard放弃所有修改

(venv) MDMacPro/Users/madapapa/Study/madapapa.com/flaskr/flaskproject/flaskygit:(32acca2) ✗ [12:07]git reset --hard
HEAD is now at 32acca2 Chapter 2: Dynamic routes (2b)
(venv) MDMacPro/Users/madapapa/Study/madapapa.com/flaskr/flaskproject/flaskygit:(32acca2) [12:09]git checkout 3a
Previous HEAD position was 32acca2 Chapter 2: Dynamic routes (2b)
HEAD is now at e020af8 Chapter 3: Templates (3a)

通过requests库使用基本http命令 第一课

在python里,进行http相关的请求,则requests库是事实标准,这个库将复杂的http请求命令,封装在简单、优美的api里。

简单的request如get、post,当然也可以在此基础上增加鉴权功能,或者通过配置请求来防止应用的速度变慢。

安装与引用requests库

使用pip在python里安装requests库,如果是python3,则是pip3

$ pip install requests

使用requests也很简单,如下

import requests

GET请求

最普通常见的HTTP请求是GET。通过get,你可以获得指定的资源。

requsets.get()

Status Codes

Screen Shot 2021-12-05 at 3.04.38 PM
当status_code返回200时,说明你的请求成功,而且服务器返回了你所请求的数据。


因此可以直接利用response的布尔属性来做一些简单判断,不过这种情况就不一定是返回200了,因为只要返回代码在200~400之间,都认为响应成功,但是不一定返回了消息内容(比如204就是这样)

Screen Shot 2021-12-05 at 1.39.28 PM

对比content,text,json等的类型。