天猫的垃圾体验–只有抱歉

为了播放家里的老电视, 去买了天猫魔盒(传说中天猫自己的店)。
悲剧就此开始。
在售前特意询问确定可以ems包邮:

天猫客服在售前确认可以ems
天猫客服在售前确认可以ems
天猫客服在售前确认可以ems
天猫客服在售前确认可以ems
出事了, 请注意他们的自动回复, 还是说会转ems的
出事了, 请注意他们的自动回复, 说会转ems的

 

顺丰帮我寄到20公里外, 叫我自提, 说好的ems呢?

 

fuck-tmall-4

fuck-tmall-5

fuck-tmall-6

fuck-tmall-7

fuck-tmall-8

fuck-tmall-9

 

简单的说:人家就是不转, 就两个字“抱歉”。

理由, 快递来不及, 那么我顺丰, ems两边的送货人员(农村, 都固定的人员了)都沟通过。

顺丰说根本没有提及转运这回事,   ems说可以送到, 而且我甚至说年后到也是我自己的责任。

还是两个字“抱歉”。

 

我只能呵呵。

 

作为天猫自己的官方店, 所得到的用户体验是最差的。

京东, 亚马逊,苏宁这些不用说, 淘宝,天猫, 甚至国美相对都比它好了不知多少倍。

 

 

 

结果: 浪费了两个多小时的时间: 整个春节只能在手机上面看电视了。以后除了买假货绝不上淘宝天猫, 至于开公司的, 阿里巴巴我也用过, 纯粹是浪费钱(现在把号码公布在阿里巴巴只会召吸垃圾电话, 而关掉后, 整个世界都清静了), 百度的效果不知道好多少倍。

 

比较情绪化, 写的很乱。     超出30天没有全额退款就要求银行贷款利息直接向杭州工商局投诉了, 当然杭州工商局据收都被淘宝收卖(mai)的, 从深圳迪蒙公司PK淘宝 这个事件可见这种经济黑势力的威力。   刚写了天猫投诉的, 不在乎天猫能够有任何善意的回馈, 只想接着从天猫的feedback中观察马云猴子带领下的骗子的丑恶的嘴脸。

深夜夜, kfc, 满满的全是人。 西装革履的传销客, 俯桌而眠的美女。 只是为何传销者是衣装革履, 夜不归的美女确却是衣着简朴。 这世界有太多的不懂。 窗外寥寥的车子拖着红色的尾灯, 俞行俞远, 也拖走了时光。 沐浴在温暖的灯光里, 回邮件, 敲键盘, 开始想念那张床。

Symfony2 创建项目与模板设置

环境准备与概览

习惯于在windows使用netbean编辑器并使用virtualbox虚拟centos系统, 预将nginx+php-fpm+mysql,  当然apache也是不错的选择,   使用http://symfony在windows与centos上作为开发域名。

1.下载与环境设置

1. 如何于centos上面建立开发环境不再详述, 当然也可以在windows上面建立开发环境。

2. 关于使用 symfony代替127.0.0.1 在liunx系统中修改/etc/hosts文件, win7系统中修改 C:\Windows\System32\drivers\etc\host 文件(需要用管理员权限打开)

加入类似于IP 别名1 别名2的内容即可, 如:

# /etc/hosts 127.0.0.1 symblog dev symfony

3.手动下载symfony2, 也可以参照这个页面用Composer 进行安装。http://symfony.com/doc/current/book/installation.html

唯一需要注意的是: app/cache 和app/logs目录需要设置成777权限。windows的开发环境应该不存在这个问题。

4. 修改apache 或者nginx配置文件symfony域名指向下载的symfony文件的web目录。

此时应该可以通过 http://symfony/app_dev.php 访问到symfony的默认页面, 有几个demo可以参照学习。

app_dev.php 默认加载了一个开发工具条在下面, 显示了当前页面的一些信息, 极大地方便了程序的调试, 只有当环境变量为dev时才会显示。

5. 使用composer安装时, 会提示输出mysql等相关信息, 需要修改这些信息, 或者是直接下载的文件, 可以进入页面的“Configure” 进行相关设置。

Bundles(也许可以称之为包, 束, 程序集,或者项目, 还是用英文吧)是symfony的基础东东, 一个个分享出来可重复利用的代码封装, 甚至于symfony本身是作为一个bundles运行的。  包括控制器、模块、模板, 甚至于图像与js, css样式表等资源。   很杂乱的东西, 区别不同的bundles使用了php5.3以后的命名空间, 大部分cpenal, da虚拟主机好像只有php5.2版本吧, 无法运行symfony2了。

2.创建一个Bundle

在下面的例子中将创建一个博客,  Symfony 提供了大量工具来快速地创建项目。 比如我们可以用它来快速创建一个博客的基础bundle.

php app/console generate:bundle --namespace=Blogger/BlogBundle --format=yml

运行后直接采用所有的默认设置即可。 可以方便地创建我们所需要的基本控制器, 模块与模板等。 包含了下面的行为:

注册Bundles

在symfony中所有使用的bundles都要求先被注册, 有些bundles只会使用于开发测试环境(dev or test), 如前文提及的开发工具条. 下面这断代码显示了bundles创建命令如何注册BloggerBlogBundle这个bundle.

// app/AppKernel.php
class AppKernel extends Kernel {

public function registerBundles() {
$bundles = array(
// ..
new Blogger\BlogBundle\BloggerBlogBundle(),
);
// .. return $bundles; } // ..
}
}

路由

作为一个框架, 路由功能被bundler创建器创建于app/config/routing.yml, symfony是用yml格式来保存配置信息。

# app/config/routing.yml
BloggerBlogBundle:
    resource: "@BloggerBlogBundle/Resources/config/routing.yml"
    prefix:   /

prefix前缀选项允许我们可以将其放置于如blog、news等子目录下。
文件
除了以上配置文件外, 其它大部分文件生成为src目录下, 如同大部分mvc框架。 在src下生成Blogger目录, 并有BlogBundle子目录存放着各种相关东东。不同的是类似于blogger的目录对应着php命名空间。

默认控制器

Bundle生成器在src下面生成了默认了控制器。 通过访问: http://symfony/app_dev.php/hello/world 可以看到简单的问候。 关于这个页面是如何生成:

路由

还是路由, 不同的是前面的路由是在整个程序里面注册使用, 这里的路由是控制具体页面使用, src/Blogger/BlogBundle/Resources/config/routing.yml 控制了BloggerBlogBundle, 包含以下程序片断:

# src/Blogger/BlogBundle/Resources/config/routing.yml
BloggerBlogBundle_homepage:
    pattern:  /hello/{name}
    defaults: { _controller: BloggerBlogBundle:Default:index }

参数: 进行url检测, 符合/hello/{name}结构的任意值将被赋予给{name},
方式: 没有对形式进行限制, 理论可以put, get, post, delete所有的操作都可以进行。
后续: 如果符合以上两条, 那么{name}将会传导至特定文件, 以上为src/Blogger/BlogBundle/Controller/DefaultController.php文件中的default控制器的index行为将被使用。

控制器

在默认生产的bundler中, 控制器行为相当简单, {name}参数被传入并被传出到模板文件:

<pre>// src/Blogger/BlogBundle/Controller/DefaultController.php

namespace Blogger\BlogBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DefaultController extends Controller
{
    public function indexAction($name)
    {
        return $this->render('BloggerBlogBundle:Default:index.html.twig', array('name' => $name));
    }
}

BloggerBlogBundle:Default:index.html.twig 会使用 BloggerBlogBundle views文件夹中 Default文件夹下面index.html.twig模板文件.

模板文件

打开上述模板文件, 非常简单的一句代码:

{# src/Blogger/BlogBundle/Resources/views/Default/index.html.twig #}
Hello {{ name }}!

以上就是symfony的整个mvc流程, 这么多文件的作用只是输出一个 “hello world”. 理论上不用bundler创建器, 只是手动创建上述文件也可以实现相同效果。花费的时间就多了去了。

回到正题, 我们是创建博客系统, 所以不需要 hello world,
1.移除控制器 src/Blogger/BlogBundle/Controller/DefaultController.php
2.移除模板 src/Blogger/BlogBundle/Resources/views/Default/
3.最后移除路由 src/Blogger/BlogBundle/Resources/config/routing.yml
整个世界清静了。

3. 让我们开始创建博客的主页

Twig的优点

在symfony中我们可以使用 Twig和php(这不是废话嘛)作为模板。使用Twig的以下优点:

1. 快: 是编绎过的php类, 可以占用更少的资源

2. 简洁:想想看要打<?php ?>, Twig输入的内容要少很多。

3. 可继承: 非常cool的一个功能

4. 安全: 转义功能默认开启, 甚至还可以为重要代码提供沙盒功能。

5. 可扩展: 需要额外的定制功能, 可以随时扩展

更多内容, 请移步:http://twig.sensiolabs.org/

可继承是一个非常好的优点, 我们将使用三级继承结构来定制这个模板, 这将允许我们在三个不同层级修改模板, 方便自由定制。

主模板–level 1

<!-- app/Resources/views/base.html.twig -->
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html"; charset=utf-8" />
<title>{% block title %}symfony{% endblock %} - blog</title>
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
{% block stylesheets %}
<link href='http://fonts.googleapis.com/css?family=Irish+Grover' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=La+Belle+Aurore' rel='stylesheet' type='text/css'>
<link href="{{ asset('css/screen.css') }}" type="text/css" rel="stylesheet" />
{% endblock %}
<link rel="shortcut icon" href="{{ asset('favicon.ico') }}" />
</head>
<body>

<section id="wrapper">
<header id="header">
<div>
{% block navigation %}
<nav>
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
{% endblock %}
</div>

<hgroup>
<h2>{% block blog_title %}<a href="#">symfony</a>{% endblock %}</h2>
<h3>{% block blog_tagline %}<a href="#">creating a blog in Symfony2</a>{% endblock %}</h3>
</hgroup>
</header>

<section>
{% block body %}{% endblock %}
</section>
<aside>
{% block sidebar %}{% endblock %}
</aside>

<div id="footer">
{% block footer %}
<a href="http://blog.dengruo.com/201309/1409">Symfony2 博客教程</a>
{% endblock %}
</div>
</section>

{% block javascripts %}{% endblock %}
</body>
</html>

上面代码在引入了一个js文件, 在ie9版本前的浏览器中实现html, 以及两个css文件导入google fronts.
这构成了网页的主要内容结构, 相当于drupal的html.tpl.php+page.tpl.php.
让我们看一下头部文件

<title>{% block title %}blog{% endblock %} - symfony</title>

{% 标签中即不是html, 也不是php, 他是3个Twig标签中的一个, 用于执行某些动作。 这里可以找到完整的Twig控制动作用于这个标签。 回到当前代码, 是用于查找title的block并输出他, 如果没有则输出默认的symblo这个词。
Twig的可续承特性可以用于修改title, 我们可以在其它模板文件中重写它:

{% extends '::base.html.twig' %}

{% block title %}The blog title goes here{% endblock %}

上面代码首先继承了第一次定义这个block的文件, 然后修改它。 网站标题部分会输出 ‘The blog title goes here – symfony’。
一般而言, 我们引用模板文件时会采用bundle:controller:template, 但是以上代码并没有bundle 和controller, 不包含这两个字段会直接引用app/Resources/views/ 文件夹下面的文件。

在css样式表中, 我们可以发现另一个Twig标签{{, 这是一个输出(说些什么)标签。

<link href="{{ asset('css/screen.css') }}" type="text/css" rel="stylesheet" />

这个标签用于输出变量或者表达式, 上面例子输出了asset函数的返回值, 这个函数提供可移植的方式来返回css,js, 图片的地址。

这个标签可以以特定格式输出我们想要内容, 比如时间:

{{ blog.created|date("d-m-Y") }}

全部过滤列表在 Twig 文档可以查到。

最后一个标签并没有在上述代码中出现, 它是{#, 只是一个注释标签

{# 注释内容可以输出在这里 #}

接下来我们将创建css样式表web/css/screen.css , 加入以下内容.

<pre>html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{border:0;font-size:100%;font:inherit;vertical-align:baseline;margin:0;padding:0}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:none}table{border-collapse:collapse;border-spacing:0}

body { line-height: 1;font-family: Arial, Helvetica, sans-serif;font-size: 12px; width: 100%; height: 100%; color: #000; font-size: 14px; }
.clear { clear: both; }

#wrapper { margin: 10px auto; width: 1000px; }
#wrapper a { text-decoration: none; color: #F48A00; }
#wrapper span.highlight { color: #F48A00; }

#header { border-bottom: 1px solid #ccc; margin-bottom: 20px; }
#header .top { border-bottom: 1px solid #ccc; margin-bottom: 10px; }
#header ul.navigation { list-style: none; text-align: right; }
#header .navigation li { display: inline }
#header .navigation li a { display: inline-block; padding: 10px 15px; border-left: 1px solid #ccc; }
#header h2 { font-family: 'Irish Grover', cursive; font-size: 92px; text-align: center; line-height: 110px; }
#header h2 a { color: #000; }
#header h3 { text-align: center; font-family: 'La Belle Aurore', cursive; font-size: 24px; margin-bottom: 20px; font-weight: normal; }

.main-col { width: 700px; display: inline-block; float: left; border-right: 1px solid #ccc; padding: 20px; margin-bottom: 20px; }
.sidebar { width: 239px; padding: 10px; display: inline-block; }

.main-col a { color: #F48A00; }
.main-col h1,
.main-col h2
    { line-height: 1.2em; font-size: 32px; margin-bottom: 10px; font-weight: normal; color: #F48A00; }
.main-col p { line-height: 1.5em; margin-bottom: 20px; }

#footer { border-top: 1px solid #ccc; clear: both; text-align: center; padding: 10px; color: #aaa; }

Bundler模板–level 2

现在我们为blog bundler 创建模板, 创建src/Blogger/BlogBundle/Resources/views/layout.html.twig 并加入:

{# src/Blogger/BlogBundle/Resources/views/layout.html.twig #}
{% extends '::base.html.twig' %}

{% block sidebar %}
    Sidebar content
{% endblock %}

非常简单的代码,1. 继承了一级模板, 并且为博客内容特别定制了侧边栏, 很显然我们并不想博客的布局与其它页面一样。 类似drupal7中page–content-type.tpl.php模板, 定制了某一特殊类型内容的布局。

具体页面布局–level 3

这个阶段已经涉及到创建具体页面, 所以需要先创建控制器src/Blogger/BlogBundle/Controller/PageController.php

<pre>// src/Blogger/BlogBundle/Controller/PageController.php

namespace Blogger\BlogBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class PageController extends Controller
{
    public function indexAction()
    {
        return $this->render('BloggerBlogBundle:Page:index.html.twig');
    }
}

然后创建相应的Twig文件: src/Blogger/BlogBundle/Resources/views/Page/index.html.twig

{# src/Blogger/BlogBundle/Resources/views/Page/index.html.twig #}
{% extends 'BloggerBlogBundle::layout.html.twig' %}

{% block body %}
Blog homepage
{% endblock %}

创建路由将首页引导到我们刚创建的页面:src/Blogger/BlogBundle/Resources/config/routing.yml

# src/Blogger/BlogBundle/Resources/config/routing.yml
BloggerBlogBundle_homepage:
    pattern:  /
    defaults: { _controller: BloggerBlogBundle:Page:index }
    requirements:
        _method:  GET

再次访问 http://symfony/app_dev.php可以看见简单的首页。

4.再创建一个about页面

路由:在src/Blogger/BlogBundle/Resources/config/routing.yml中加入

# src/Blogger/BlogBundle/Resources/config/routing.yml
BloggerBlogBundle_about:
pattern:  /about
defaults: { _controller: BloggerBlogBundle:Page:about }
requirements:
_method:  GET

 

当以get方式访问about页时执行位于BloggerBlogBundle命名空间的page控制器about动作。

控制器: 在src/Blogger/BlogBundle/Controller/PageController.php 于page控制器中加入about动作

// src/Blogger/BlogBundle/Controller/PageController.php
// ..
public function aboutAction()
{
    return $this->render('BloggerBlogBundle:Page:about.html.twig');
}
// ..

模板: 创建src/Blogger/BlogBundle/Resources/views/Page/about.html.twig 并加入相关页面文件

{# src/Blogger/BlogBundle/Resources/views/Page/about.html.twig #}
{% extends 'BloggerBlogBundle::layout.html.twig' %}

{% block body %}
about page
{% endblock %}

简单的三个流程增加了关于页面:http://symfony/app_dev.php/about
 

参考:http://tutorial.symblog.co.uk/docs/configuration-and-templating.html

centos6备份到rackspace cloudfiles

将centos上面的网站文件和数据库备份到cloudfiles好像并没有现成的解决方案, 自动更生了。

1. 备份网站和文件。

#!/bin/bash
#
#copy 自 猫言猫语
#updade 删除了邮件及FTP,只保留备份到本地目录
#update Mysql强制utf-8字符串
#
#你要修改的地方从这里开始
MYSQL_USER=********                             #mysql用户名
MYSQL_PASS=********                     #mysql密码
WEB_DATA=********                     #要备份的网站数据
#你要修改的地方从这里结束

#定义数据库的名字和旧数据库的名字
DataBakName=Data_$(date +"%Y%m%d").tar.gz
WebBakName=Web_$(date +%Y%m%d).tar.gz
OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz
OldWeb=Web_$(date -d -5day +"%Y%m%d").tar.gz
#删除临时目前所有的数据
rm -rf /home/backuptemp/*
cd /home/backuptemp
#导出数据库,一个数据库一个压缩文件
mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs > mysqldata
sed -i 's/information_schema //g' mysqldata
sed -i 's/performance_schema //g' mysqldata
sed -i 's/mysql //g' mysqldata
for db in `cat mysqldata`; do
(mysqldump -u$MYSQL_USER -p$MYSQL_PASS --default-character-set=utf8 --databases ${db}> ${db}.sql)
done

#压缩数据库文件为一个文件
tar zcf /home/backuptemp/$DataBakName /home/backuptemp/*.sql
rm -rf /home/backuptemp/*.sql mysqldata
tar zcf /home/backuptemp/$WebBakName $WEB_DATA

#同步目录操作
#直接尝试用在cloudfile的同步目录上面读写太慢
#删除同步目录3天前的数据
rm -rf /home/backup/Data_$(date -d -3day +"%Y%m%d").tar.gz /home/backup/Web_$(date -d -3day +"%Y%m%d").tar.gz
cp -rf /home/backuptemp/* /home/backup

除了注释里面的部分修改外, 其它用了一个文件夹用于本地目录backuptemp进行压缩等临时操作,压缩后再复制同步目录backup 另外用一个新的目录加入corntab实现每日备份到 /home/backup目录。

cloudfuser可以实现cloudfiles像当前目录一样在磁盘进行操作, 接下来这个实现本地vps到rackspace cloudfiles。

https://github.com/vfloz/cloudfuse

编绎, 安装, 这个cloudfuse分支可以实现单独操作某个容器,而不是整个cloudfiles.

containter=***

实现某个特定cloud files containter的操作, 但是在centos 6.2以上的curl 7.19.0会有bug, 依照[url]https://github.com/redbo/cloudfuse/issues/38[/url] 评论可以修复。

加入自启动

crontab -e 加前步骤1的sh文件

/etc/fstab
cloudfuse /home/backup fuse username=NAME,api_key=APIKEY,container=CONTAINERNAME,authurl=https://auth.api.rackspacecloud.com/v1.0,allow_other,nonempty 0 0

投机的成本计算与套牢

在实际生产过程中。

如原料A在时间段1的成本为170,  此时加工后成品的的价格为折算到原料为180. 为每个的原料A可以得到利润10.

如厂家看到现货, 而大量屯积原料原料A, 而未做期货进行均衡(好像投机行为也不会用期货进行平, 只有正常生产才会)。

那么当某一天市场预期发生转变, 原料A的预期从200 变成为100, 即相对目前价格170看空市场。

厂家留存于手中大量现货, 其成本保持在170, 而现货市场交易价格已经变成了160. 此时制成成品后而言, 其刚好无利润无货。

此时厂家应该做如何选择?

1. 直接看空市场, 甩完现货, 并在期货市场反手做空?

2. 将手中原料存货以制成成品形工卖出, 以求不亏损。

3. 担心平价不易出货, 以部分亏损形式出货, 以保存大部分资金。

4. 在整个市场价格从170到160再到100的过程为一个漫长的过程, 那么在此过程之中, 即使预期原料和成品的价格在走低, 是否也需要少量进取原料? 实时生产后销售以获取阶段性回报?

5.死守, 等待价格回升,赚取超额利润(但是时间是最大的成本)。

大学时证券老师说:套牢是中国股市特有的名词。 我们是否可以换个思维来进行思考。

在仓库管理过程中, 有先进先出, 先进后出, 以及动态平衡方法(好像有平均进出之类的, 忘记了叫什么了, 可能是随机进出吧)。  我们一直将此原料的成本视为170(因为实际上进货成本即是这个), 但是出货成本呢, 当市场交易价格降至160时, 如果按照出货价格来说其实是160, 这东西实际只值这个价格。  那10块钱算什么呢? 亏损, 投资损益?  但是如果以160视为成本的话, 那么在整个过程并不会存在着亏损的心理。 从而很健康地采用积极地动作。 现金流的意义在于流动, 损益本身倒在其次。

N年没写东西了, 写出来的竟然连自己都看不懂。  各位看官别看别想了, 只是留存着以后想到时使用的。

 

好久没运用的泪腺

生意失败, 遭人鄙视, 我都无视, 我很顽强。

但是我还是哭了, 因为母亲非要整理家中我的柜子,

残暴地践踏我的隐私, 却为了顾及亲情而不愿粗口相对。

丢弃很多在她看来没有用途的东西, 却承载了我点滴的过去。

每一张纸片, 物件被丢弃在地上, 是一段段故事被砸碎在心中。

我,一无所有,唯一可拥有的只有关于过去回忆。幸或不幸, 终究无力改变。