Blog | Autzoko Lang

THIS IS MY KINGDOM COME

燈塔只是信標,
帶不走過客的錨。
歲月不再豐饒,
只有海水無情,
看著新大陸的孤島。

寒刀劈水掣天洪,殘花依舊綉春風。
乖看河東新鞍馬,幾時颯沓長安宮。

附黃巢《不第后賦菊》
待到秋來八九月,我花開后百花殺。
冲天香陣透長安,滿城盡帶黃金甲。

煤山樹下縊漢帝,山海門開迎遼皇。
新都依舊高宗夢,四鎮偏安棄江東。
北伐秋夢望中原,騰蛟斷鱗南天開。
北馬渡江諸王薨,三峽雁泣遍夔東。
閩海不睬粵王詔,滇池遙哭金陵師。
天子堂下驚風雨,忠黨拜權膝下臣。
九州披髮擧義幟,三朝壯士恨蒙塵。
廿載春秋會之事,天下豈止一武穆。h

春寒歲裏鴻都郎,憑誰望,海客鄉。乞聞風中烟花聲。牖鼓雲浪,孤看飛航,一日夜光藏。
山外山隔窗外窗,凍雪殘餘鬢頭霜。玉樓歌裏獨醉好。一曲彷徨,不奏迷惘,笑寫清平殤。

天山大漠越東海,蒼黃故土,清霾掩我故城。
不望天山萬仞,東方一點紅,半載西風吹不動,車馬喧囂,醉雲西沈。
猶見酒綠燈紅処,大千世界任我行。
惟問世間何方進,天海相隔步難停。
慾走萬里尋真切,怎理身後多少名。
進退不知馮唐夢,稼軒詞外難堪情。
西門外,游人慶,渡走灞橋心難盈。
撩落枝亂十二載,是非成敗幾回明。
蒼茫連天撲塵土,天河兩岸信難聆。
白日清夢誰人語,魚游池塘畫新屏。

鉴于我本人的兴趣集中于旅行和人文摄影记录,而专业所学是计算机科学与计算机工程,现在在找实习却发现自己没有特别大的动力。在机缘巧合之下和同学聊了聊创业三四事,也发现NYU对于创业也是相对友好,在家长的鼓励下萌生了创业的想法,想着趁年轻多试错也是好的,至少技术经验和其他的一些Soft Skills也会有所积累,对未来成长也是有益的。现在遂在考虑如何将自己对于摄影的爱好和我的专业技术结合,至少先做出一个像样的小产品出来。

兴趣与技术

搜罗之后,总结出以下三点感觉可以结合自己的兴趣和技术作为创业的根本:

预想实践

我个人还是计划以技术为根本,结合我的兴趣,即摄影和计算机。这两者Intersection我想就是计算机视觉相关了,最基础的图像处理(以前想再也不高CV结果还是绕不开CV这条路),所以我打算以这个作为出发点来探讨以下自己可以做出哪些东西。

图像处理与优化的网络应用

搭建一个用于图像处理的在线网络平台,提供旅行摄影相关的优化工具,自动修图,批量处理和智能管理等功能。

可以做的一些项目:

  • 智能修图平台:基于Deep Learning,开发在线工具,自动对风景、人文照片进行优化以及风格化处理(模仿摄影家风格给出特定滤镜等功能)。
  • 图片管理平台:类似于Google Photos的小型应用,结合标签和智能分类,方便用户存储和检索旅行照片。

所需的技能:

  • 前端:Vue.js, React, Angular, etc.
  • 后端:Spring Boot, Django, Node.js, etc.
  • 图像处理:Python (OpenCV, Pillow)或Web Assembly.
  • 云技术:AWS(S3), Docker, Kubernetes.

工具:

  • Tensorflow或PyTorch用于训练图像优化模型。
  • Flask或FastAPI构建API接口。
  • MongoDB存储图片元数据,MySQL或PostgreSQL管理用户数据。

增强现实(AR)和虚拟现实(VR)

将摄影作品和技术结合,开发能够在AR/VR中展示旅行风景和人文历史的应用。

  • AR摄影导览:利用手机摄像头,实时叠加旅行地的历史信息或拍摄建议。
  • 虚拟旅行体验:开发一个应用,用户可以通过VR设备欣赏你的摄影作品,体验真实的旅行场景。

所需的技能:

  • AR开发:Unity, Unreal Engine或Web AR (8thWall等)。
  • 图像渲染与三维建模:Blender, Three.js.
  • 计算机视觉:SLAM(即时定位与地图构建)技术。

工具:

  • Vuforia, ARKit (iOS), ARCore (Android).
  • OpenCV结合Unity实现实时图像增强。

摄影相关SaaS平台

开发一个摄影爱好者和专业摄影师使用的服务平台,提供从计划拍摄到后期处理的一站式服务。

  • 旅行摄影规划平台:用户上传旅行地,平台提供摄影最佳时间、角度、天气建议,并结合你的AI模型推荐拍摄参数。
  • 摄影师社交平台:类似Behance和Instagram的结合,摄影师可以展示作品、接活、交流。

所需的技能:

  • Full Stack Dev: Vue.js, Spring Boot, GraphQL.
  • OAuth2安全验证:整合用户认证和支付服务。
  • 微服务架构:Kafka, Eureka, Redis等。

工具:

  • Jenkins进行CI/CD。
  • Kubernetes管理云服务部署。
  • 支付集成:Stripe,Paypal API等。

摄影+区块链

利用区块链技术保护摄影作品版权或发行独特的数字艺术品(NFT)。

  • 摄影作品NFT市场:用户上传摄影作品,通过区块链技术铸造NFT,实现作品买卖和保护。
  • 版权保护工具:开发一个基于区块链的系统,追踪摄影作品的使用和交易记录。

所需的技能:

  • 智能合约开发:Solidity(以太坊)、Rust(Solana)。
  • 区块链应用开发:使用Web3.js或Ether.js。
  • 分布式存储:分布式存储:学习IPFS(InterPlanetary File System)。

工具:

  • Truffle或Hardhat测试和部署智能合约。
  • Infura或Alchemy接入区块链网络。

行动计划

  • 明确方向:选择最感兴趣的结合点。
  • 小项目开始: 实践上述一个小型项目,逐步积累经验。
  • 技能提升: 学习相关技术,注重软硬结合(嵌入式开发+后端开发)。
  • 扩展人脉: 参与摄影或技术相关的社区活动,寻找志同道合的人合作。
  • 定期复盘: 在工作和学习中不断调整目标,明确自己的发展方向。

创业思路

Where to begin?

从图像处理网络应用开发开始!

  • 技术可行性高: 现有技术(如OpenCV、TensorFlow)成熟,开发成本和学习成本相对较低。
  • 市场验证快: 图像优化和处理的需求明确,容易吸引摄影师和普通用户。
  • 易与其他方向结合: 成功后可以扩展为SaaS服务,甚至结合区块链保护摄影作品版权。

详细规划

第一阶段:图像处理应用开发

目标:快速构建MVP,验证需求(6-12个月)

  1. 核心功能:
  • 图像优化:自动亮度、对比度、去雾、锐化等基础功能。
  • 批量处理:支持用户一次性优化多张照片。
  • 分类和存储:根据时间、地点或内容自动分类照片,支持用户在线存储。
  1. 技术选型:
  • 前端: Vue.js/React(构建用户界面)。
  • 后端: Flask/FastAPI(快速开发轻量后端)。
  • 图像处理: 使用OpenCV、Pillow和简单深度学习模型。
  • 存储: MongoDB(元数据),AWS S3(照片存储)。
  • 部署: 使用Docker打包,托管在AWS/GCP。
  1. 测试推广:
  • 目标用户: 面向摄影师和旅行爱好者。
  • 测试渠道: 在摄影论坛(如Reddit r/photography)分享并测试应用,获取反馈。
  • 产品优化: 根据用户需求迭代功能。

第二阶段:扩展为SaaS平台

目标:建立商业模式,增加用户粘性(12-24个月)

  1. 功能扩展:
  • 高级功能扩展:
    • 大量云储存
    • 深度学习优化模型,提供高级图像处理功能(风格化滤镜,人像修复等)。
  • 协作功能:
    • 用户团队可以在线协作处理照片。
    • 多人共享相册或编辑同一组照片。
  1. 商业模式:
  • 免费+增值模式(Freemium):
    • 基础功能免费。
    • 收费功能包括批量处理,高级优化和大容量云储存。
  • API服务:
    • 提供开放API,允许摄影机构将你的优化技术集成到他们的系统。
  1. 推广与合作:
  • 在Instagram,YouTube等平台制作内容,展示前后对比效果。
  • 与摄影师、摄影机构和博主合作推广产品。

第三阶段:摄影与区块链结合

目标:构建区块链平台,保护版权与商业化摄影作品(24个月后)

  1. 核心功能:
  • NFT摄影作品:
    • 摄影师可以将作品铸造成NFT,记录所有权并实现交易。
  • 版权追踪系统:
    • 利用区块链记录作品使用记录,保护摄影师权益。
  1. 技术选型:
  • 区块链开发:
    • 使用以太坊(Solidity)或Solana(Rust)开发智能合约。
    • 集成IPFS(分布式存储)存储图片原件。
  • 平台开发:
    • 构建NFT交易平台,类似OpenSea但专注于摄影领域。
    • 提供用户友好的上传、铸造和交易功能。
  1. 商业模式:
  • 平台收费:
    • 每次NFT铸造或交易收取一定比例的手续费。
  • 会员模式:
    • 摄影师支付订阅费用,获得更多区块链功能(如高级版权保护)。
  1. 推广与应用:
  • 面向摄影师推广NFT市场,强调“摄影作品的唯一性和安全性”。
  • 寻找艺术展览、摄影比赛等合作机会。

创业准备

法律与身份问题

  • 合法创业身份:
    • 利用OPT期间尝试创业,或申请“创业签证”(Startup Visa)。
    • 寻求律师帮助,探索通过H1B或O-1签证继续创业的可能性。
  • 公司注册:
    • 推荐在特拉华州注册C-Corp(适合未来融资)。
    • 获得EIN(雇主识别号码),开设公司账户。

计划

  1. 网路与资源:
  • NYU Tandon Future Labs
  • 参加摄影和技术领域的展会(如CES、Adobe Max)。
  1. 市场调研:
  • 调查潜在竞争对手(如Lightroom、Skylum Luminar)。
  • 找到你的差异化优势(如实时处理、AI增强功能、轻量化)。
  1. 团队与合作
  • 初期团队:技术开发(我和技术合伙人),市场推广(熟悉摄影行业的营销人员)。
  • 合作伙伴:与摄影师、艺术家或摄影机构建立联系,扩大产品的影响力。

風殘蓬柳斜波碧,餘暉催月移星洛。
懷客凴西堤,西霞映相依。
湖光朱燈染,浮華隱河漢。
此夜棲君夢,醉與君相擁。

巷下新春卻回避,靜雪猶嘯北風欺。
京城死地無涯処,青首難吟摩詰詩。

秋風渡裏,長望雲烟點鄉愁。
亭雨空,落花怎得來相守,難回首。
待到思憶悄悄話朦朧,一片故園夢,晚風意正濃。
催我相思萬般,不憶北風,不憶秋冬。
何時踏足何時了,瀟瀟琴語,瀟瀟風雨。

You are given an integer n indicating there are n specialty retail stores. There are m product types varying amounts, which are given as a 0-indexed integer array quantities, where quantities[i] represents the number of products of the $i^{th}$ product type.
You need to distribute all product to the retail stores following these rules:

  • A store can only be given at most one product type but can given any amount of it.
  • After distribution, each store will have been given some number of products (possibly 0), Let $x$ represent the maximum number of products given to any store. You want $x$ to be as small as possible, i.e., you want to minimize the maximum of products that are given to any store.

Return the minimum possible $x$.

Example:

1
2
3
Input: n = 6, quantities = [11, 6];
Output = 3;
The 11 products of type 0 are distributed to the first four stores in the amount of [2, 3, 3, 3]. The 6 products of type 1 are distributed to the other two stores in the amount of [3, 3].
1
2
3
Input: n = 7, quantities = [15, 10, 10];
Output: 5;
[5, 5, 5, 5, 5, 5, 5];
1
2
Input: n = 1, quantities = [10000];
Output = 10000;

Constraints:

  • $1 \le m \le n \le 10^5$
  • $1 \le quantities_i \le 10^5$

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
int minimizedMaximum(int n, vector<int>& quantities) {
int low{1}; // same as 'int low = 1;', but in a more safe way.
int high = *max_element(quantities.begin(), quantities.end());
while (low < high) {
int mid = (low + high) / 2;
int needed{0};
for (int q : quantities) {
needed += (q + mid - 1) / mid;
}
if (needed <= n) high = mid;
else low = mid + 1;
}
return low
}
}

Explanation:
The key idea of this solution is binary search, the variable mid here is used to indicate the possible maximum quantity that can be distributed to a single store. Variables low and high hold the lower bound and the upper bound of the quantity for distribution. Then use binary search to update the variable mid to find the possible minimized maximum quantity. The way to update mid is to check whether this value can be distributed within $n$ stores. Here using variable needed to hold the number of store that needs for distributing under mid. So traverse the quantities to compute the needed number of stores to distribute q products under mid is the upper bound. For example, if q=7 then mid=3, since 7 products need 3 stores. If needed is less than $n$, which means the value of mid is greater, and there might a smaller solution, thus update high with mid. Otherwise, mid is to small, thus update low with mid + 1. When low and high converge, which means the minimized value mid is found, then return low.

0%