V2EX - 技术 |
- 技术老大对开发闭源了基础库,打算自己写一套代替
- 2021 安卓最强保活
- 有什么基于短数字的唯一 id 生成器的实现?
- F**K,数据库被黑客删光了
- Linux 下程序开发的正确姿势是什么?想尽量接近 Windows 下 Visual Studio 和 TortoiseGit 这类工具的体验
- DNSPod Public DNS 专业版出来了
- Windows 更换系统字体哪个更好看
- 是插本还是接着工作?
- Java 有没有轻量级的服务注册中心,现在搜了一圈下来就看到阿里的有个 nacos,如果自己写的话 是不是更好
- SDK 开发中,模块间的通信问题
- 有什么长续航的安卓备用机推荐吗?
- 怎么修改用户名?我想发文,但是不想被同事认出来
- windows11 有没有对 wsl2 做改进啊
- tcp/ip 协议栈中,子网掩码是存哪的?
- 用 Travis CI 发布 Github Pages 是真的方便,求分享 GitHub 心得。
- omnet 创建四个节点相互传送信息,核心代码是什么啊
- 请问网页选择思源黑体,应该用什么格式的字体文件?
- 使用 mix/vega + mix/db 进行现代化的原生 PHP 开发
- 最全开源硬件(安全研究方向)列表,打板么?
- Linux 提交内核补丁,以支持 Rust 作为内核开发第二语言,各位怎么看
- Github Copilot 是否违反 GPL 协议?
- 有人知道 ansible setup 这个模块的原理吗?
- RN 使用 expo 如何保证信息送达 ?
- 为什么 Chrome 在 iPad 上没法放大字体?
- 请问有在安卓设备上开发社保卡的吗
- 编程久了是不是动手能力就提升了
- 成为全栈式数据管控平台, CloudQuery 1.4 概述
- 已解决
- 大家怎么做账户系统中的短信验证码注册/登录、一键手机号验证注册/登录的?请问是自己从头开发,手写接入,还是有现成的框架可以用
- 想请教一下,这个图片中的字体是什么呀?
- Python 起多个线程会充分用到多核 cpu 的资源吗
- 有没有面向开发者的音乐试听的服务?
- 那些一起写过的代码 – 7 年编码环境变化记(https://gangdaomeimei.cn/?p=567)
- 兄弟们,有没有因为夏天天气太热而睡不好的,求支招!
Posted: 07 Jul 2021 04:04 AM PDT 公司两个后端项目公用一个基础库,技术老大从之前项目中抽出来的,然后闭源了(他还在公司)。。。只给 jar 包,没有代码,也没有文档,现在开发起来很 tm 蛋疼,像吃了苍蝇一样。 具体内容包括数据库访问,授权验证,http 服务器,程序启动和销毁等等,想改点东西都得通过他,比如想加个 log,记一下所有的 http 访问记录,只有在他的库里才能改。 这不只是一个技术问题,涉及到公司和技术老大之间的一堆事。 现在小弟在考虑通过技术手段解决,自己写一遍,尽量少动业务,去掉他的库,在考虑 Spring,但是没有相关的经验,各位有没有推荐的 spring 相关项目可以参考一下?或者有没有类似的经历交流交流? 这个库大概包括:
公司现在的技术栈是 kotlin,mysql,jdbc, http 服务器用的 javalin,没上大框架。他的库不知道多少代码,估计大概一万行左右 |
Posted: 07 Jul 2021 03:57 AM PDT 有没有需要的? |
Posted: 07 Jul 2021 03:56 AM PDT 我目前看到的雪花算法生成的 id 基本都是长整型,有没有短数字唯一 id 生成,直接生成 int,比如 b 站 av 号之类的。既然是短数字的唯一 id 生成,那就不会应用到类似"订单 id 生成"等诸如 1 秒内生成几百几千个 id 的场景中, 希望能在服务端内部生成,不用必须依赖数据库来生成 id,能控制长度(比如长度固定,或者数字长度不低于几位不高于几位之类的) 有没有序无所谓,当然如果能选择无序模式或有序模式的话,那最好不过了。 那么有哪些实现的呢,或者哪些工具类有这些功能了 |
Posted: 07 Jul 2021 03:56 AM PDT 删的啥都没了,建了一个 README 表。里面写了句话: 以下数据库已被删除:**** 。 我们有一个完整的备份。 要恢复它,您必须将 0.018 比特币( BTC )支付给我们的比特币地址 bc1qs82lvzrrag7aqpnyme4njv32qquky0slrclftr 。 有关说明,请通过 yang21@tutanota.com 通过电子邮件联系我们。 任何与付款无关的邮件都将被忽略! 反思: 1 、不要开放 3306 端口公开访问 2 、密码设置的要复杂 |
Linux 下程序开发的正确姿势是什么?想尽量接近 Windows 下 Visual Studio 和 TortoiseGit 这类工具的体验 Posted: 07 Jul 2021 03:53 AM PDT 如题,以前一直是在 Windows 平台上开发。 现在有项目需要在 Linux 下进行编译和调试,想了解下正确姿势是什么。 网上搜索看到的一些回答感觉比较偏执,如果在 Linux 中开发时,图形界面程序就是都是垃圾我也就认了,老老实实地去熟悉命令行操作。如果有更方便的、能提高效率的方式,还是很想知道的。 举几个具体操作的例子,可能更清楚些: 1. 在 Visual Studio 中编译之后的警告和错误信息会统一在问题面板中列出,双击就能定位到源码中的位置。 在 Linux 中,一般是怎么做的?直接在终端中看输出的错误信息吗?还是配置一下 VS Code 之类的工具来调用编译,并且把结果按格式显示 2. 在 Linux 中一般怎么调试?如果没用 IDE 的话,就只能直接命令行 gdb 吗? 用 IDE 的话,有什么用着方便可靠的吗? 3. Windows 下我用 TortoiseGit, Linux 下图形界面的 Git 客户端有没有好用的? SmartGit 还没试,因为定价太高了。GitKraken 刚试过,作为一个订阅费每月 $5 的软件,操作居然会卡,也远到不了 TortoiseGit 的水平 |
Posted: 07 Jul 2021 03:49 AM PDT https://dns.pub 选择专业版,登陆你的 DNSPod 账号,创建一个新配置 然后,感受下? |
Posted: 07 Jul 2021 03:49 AM PDT [![RHtjBj.png]( https://z3.ax1x.com/2021/07/07/RHtjBj.png)]( https://imgtu.com/i/RHtjBj) 苹果电脑的字体确实美观看起来丝滑般的清澈,我也想在 Windows 更改系统字体为苹果方或者其他字体,各位大佬有测试过吗 那种字体更加适合 windows 系统字体 |
Posted: 07 Jul 2021 03:45 AM PDT 大专狗一枚,今年 7 月份毕业了,去年开始出来实习 |
Java 有没有轻量级的服务注册中心,现在搜了一圈下来就看到阿里的有个 nacos,如果自己写的话 是不是更好 Posted: 07 Jul 2021 03:38 AM PDT 背景 目前只是简单的几个按业务不同,单独以域名的方式分割了两三个服务,每个服务三四台机器,都是 spring boot 单机版 需求 现在有两个服务可能有相互通信的必要,因为要更新应用内部的一些信息,所以需要按 IP 加端口的形式去通知。比如说后台更新了分组,需要通知到特征计算各个机器上去。目前就是简单的特征项目启动的时候上报自己的 IP+节点,然后后台挨个去通知。 但是为了响应统一号召,我们全面再切 k8s,所以就不像之前的物理机了,IP 都是固定,机器数量也可能变得动态,所以可能需要一个简单的服务注册中心。并且实时的判断特征服务的节点是否还活着 有没有简单版的注册中心 目前有个想法是直接用公司现有基于 etcd 的,我自己做个轻量级常驻的 watch 就行了 题外话 阿里的 nacos 不知道实际用起来轻量不轻量,但是福报厂的东西有些质量很一般,还有些没法自定义的东西,或者宣传吹的很牛逼,实际跑起来 250 。 |
Posted: 07 Jul 2021 03:22 AM PDT Context:
如果是一般的 App 开发,借助 ARouter 可以实现类似的功能,但因为我是 SDK 开发,所以尽量不依赖外部 SDK 。 解决方案:
当时停留在方案 2 了,最近脑子里总冒出来这个问题,大家有其他建议吗? |
Posted: 07 Jul 2021 03:18 AM PDT 预算 2000 左右,最好小屏~ |
Posted: 07 Jul 2021 03:13 AM PDT |
Posted: 07 Jul 2021 03:11 AM PDT 还是真就只换了个 UI ? 现在 wsl2 至少我遇到的问题就是 localhost 访问时灵时不灵,有时得用 ip 才能访问,不知道是啥问题 |
Posted: 07 Jul 2021 03:10 AM PDT 网络数据报文里好像没有保存子网掩码的部分。假设有如下场景: 路由器,A 口网段:192.168.128.0/24,B 口网段:192.168.128.0/23,如果有人给 192.168.128.0/24 网段的某个机器发了个数据报,路由器怎么知道是转发给 A 口还是 B 口? |
用 Travis CI 发布 Github Pages 是真的方便,求分享 GitHub 心得。 Posted: 07 Jul 2021 03:05 AM PDT 多年前使用 GitHub Pages,还需要自己构建后向仓库推送代码,现在只需要在 Github Marketplace 中安装 Travis CI,在项目里加入一个 .travis.yml 文件简单配置下就可以享受云端的 CI 服务,还是相当方便的。 推送到 https://github.com/lcomplete/TechShare 上之后,CI 服务自动构建并更新 github pages 分支。 使用 VuePress 构建的 https://lcomplete.github.io/TechShare/ 网站,使用起来也是挺简单的,多年前用 Octopress 还挺折腾的。 还有哪些 GitHub 实用心得,求分享。 |
Posted: 07 Jul 2021 02:58 AM PDT 这个是 ned 代码 package tictocs;simple Txcs1{ gates: input in[]; output out[];}network Tictocs1{ submodules: t[4]:Txcs1; connections: t[0].out++ --> { delay = 100ms; } --> t[1].in++; t[0].in++ <-- { delay = 100ms; } <-- t[1].out++; t[0].out++ --> { delay = 100ms; } --> t[2].in++; t[0].in++ <-- { delay = 100ms; } <-- t[2].out++; t[0].out++ --> { delay = 100ms; } --> t[3].in++; t[0].in++ <-- { delay = 100ms; } <-- t[3].out++; t[1].out++ --> { delay = 100ms; } --> t[2].in++; t[1].in++ <-- { delay = 100ms; } <-- t[2].out++; t[1].out++ --> { delay = 100ms; } --> t[3].in++; t[1].in++ <-- { delay = 100ms; } <-- t[3].out++; t[2].out++ --> { delay = 100ms; } --> t[3].in++; t[2].in++ <-- { delay = 100ms; } <-- t[3].out++; } |
Posted: 07 Jul 2021 02:32 AM PDT https://github.com/adobe-fonts/source-han-sans/tree/release 思源黑体, 它这个 github 仓库有好多字体文件, 请问我网页应该选择哪个? 感谢🙏 |
使用 mix/vega + mix/db 进行现代化的原生 PHP 开发 Posted: 07 Jul 2021 02:13 AM PDT 最近几年在 javascript 、golang 生态中游走,发现很多 npm 、go mod 的优点。最近回过头开发 MixPHP V3,发现 composer 其实一直都是一个非常优秀的工具,但是 phper 们对 composer 的用法很多都不是很深入,今天我就采用 composer 手撸一个原生项目,帮助大家理解现代化的原生 PHP 开发流程。 PHP 的开发者可能是所有语言里被惯坏的最厉害的,因为几乎每个框架都提供了脚手架,像这样: 这个在 npm 、go mod 是没有这个功能的,需要自己创建程序骨架,当然 npm 和 go 生态产生了自己的解决方案,就是 vue-cli 和 mixcli 这样的脚手架工具来负责创建。 创建一个项目和 npm init 、go mod init 一样,我们使用 composer init 创建一个项目 交互式填写一些内容后,生成了 composer.json 文件 这个文件是以 composer 库的标准创建的,必须要两级名称,这让我很蛋疼,所以我修改一下 选择我需要使用的库和 node.js 、go 生态一样,第二步就是寻找我们需要的库,通常我们的需求是写一个 API 服务,就需要一个 http server 库,一个 db 库就可以开始工作了。 由于是现代化的 PHP 开发,因此我选择了 PHP CLI 模式的常驻高性能库,这里我选择的是:
这两个都是 MixPHP V3+ 的核心组件。 Mix Vega & Mix Database 安装Vega 同时支持 Swoole 、WorkerMan,以后还会支持 Swow,最简单原则,因为 WorkerMan 可以不需要安装扩展即可执行,开发先采用 WorkerMan 来驱动 Vega,上线可根据自己的需要切换。 安装 Workerman 安装 Mix Vega 安装 Mix Database 创建一个入口文件vue 的入口通常是 然后我们模仿 npm 的搞法,在 composer.json 增加: 这里我非常困惑 composer 的搞法,npm 的入口文件中可不需要 现在我们 写一个 API 接口我们将上面的入口文件改造一下,写一个用户查询接口,Vega 的使用非常简单。 curl 测试一下: 使用 PSR 调整一下目录结构前面我们定义了 PSR 接下来我们采用自动加载来合理拆分上面入口文件的代码,拆分后目录结构如下:
调整完基本就完成了一个正式项目的雏形了,接下来大家可以自由发挥。 压测一下mysql: docker mysql8 本机 |
Posted: 07 Jul 2021 02:11 AM PDT 最近"嘉立创"推出了四层,双层,单层打样全免费,大家开始躁动了,按捺不住想薅一把。到了要打什么板的时候了,有什么可以打的呢?总结了一些开源硬件项目放在文末,师傅们开整(下单)吧! 开源硬件。研究人员开源了软硬件方案,爱好者可以自行定制打板制作。打板可以去嘉立创(打样免费),然后买芯片自己焊接,最后刷写软件部分。
更多内容见微信公众号:从 0 到 1 建设物联网安全实验室之设备篇 扫描下方二维码查看。 |
Linux 提交内核补丁,以支持 Rust 作为内核开发第二语言,各位怎么看 Posted: 07 Jul 2021 02:07 AM PDT 镜像讨论:rust for linux |
Posted: 07 Jul 2021 01:47 AM PDT 看见公众号推送的,想了想觉得挺有意思:
|
Posted: 07 Jul 2021 01:39 AM PDT 源码看不大明白,使用这个模块能获取到目标服务器的详细信息,包括 cpu,内存,磁盘,网卡,用户等等几乎常见的信息,在 playbook 中指定 gather_facts=true 也能达到相同目的,ansible 没有 agent,如果是通过 ssh 连接到目标服务器再查看相关系统信息效率应该不高吧,再加上 python 执行效率本来就捉襟见肘,那么有没有什么不为人知的骚操作? |
Posted: 06 Jul 2021 11:54 PM PDT 最近研究手机 APP,因为不懂原生开发,选择了 expo.io 来处理,后面丰富的库给开发提供了帮助。还有很多贴心的小组件。 碰到一个推送的问题,expo 需要我们第三方服务器,里面会有用户的设备 token 跟用户 id,来推送不同信息到他们 expo 的服务器。expo 的服务器负责信息分发到 firebase 和 APNs 服务。 我们信息通过后端到他们服务器,会有一个叫做 push tikect 的东西,但是他的返回不会包括我们用户 id (我们没有办法在推送信息中添加), 而是他们生成的 id 。https://docs.expo.io/push-notifications/sending-notifications/ 官方文档 然后根据这个 tikect 集合来轮训 消息是否到达 firebase 或者 APNs 服务。 因为他们的结果返回只包括他们自己的 id,没有办法知道,这个 id 或者这条信息跟本地设备的关系。支付宝回调会返回支付宝的处理 id 跟我们自己加入的 id 。 不知道有没有老哥做过这样的业务。 根据文档提到的 "The requests above will respond with a JSON object with two optional fields, data and errors. data will contain an array of push tickets in the same order in which the messages were sent (or one push ticket object, if you send a single message to a single recipient)." 返回的 数据,跟推送的数据顺序一样,难道要自己重写个算法来确定 消息推送是否成功么? Push tickets 返回的例子,id 是 expo 生成的。。 我的情景是,如果信息没有送达,就不会继续推送。 |
Posted: 06 Jul 2021 11:49 PM PDT 手机上是有的,iPad 上没有 zoom text 的选项,怎么回事? |
Posted: 06 Jul 2021 09:50 PM PDT 最近需要在设备上开发社保卡的相关功能,硬件都没问题,就是社保 cpu 卡相关的文档实在看不懂,网上也搜不到什么有用的,有没有大佬做过的帮帮忙 |
Posted: 06 Jul 2021 09:44 PM PDT 没用过的后端框架,一查就能上手撸,比如 uniapp,一查就重构个小程序,这个是属于有难度还是没难度的啊。敲了 lumen 几天,我可以说我会 laravel 吗,用 uniapp uview 几天,我可以说我会了吗。 |
成为全栈式数据管控平台, CloudQuery 1.4 概述 Posted: 06 Jul 2021 08:50 PM PDT 「近年来,新兴的互联网服务领域,以及电信、金融和交通等各传统行业出现了数据资产的爆炸性增长,这些数据资产的类型以非结构化和半结构化为主,如何低成本且高效率地存储和处理 PB 甚至 EB 量级的数据成了极大的挑战。」 ——摘自《 Hbase 权威指南》 "随着大数据时代 数据量不断增长、企业规模不断扩大、业务系统更加多元,我们面对同源、异源数据的分析处理能力无时无刻在经受巨大的考验,分布式系统对数据一致性要求极高,同时大量的业务数据以及数据上云的时代趋势数次证明了数仓的便利性,但在数仓的实际工作中只有 20%的时间花费在数据挖掘上,其余时间大多用来数据同步、任务调度、数据清洗等等构造符合条件的数据上。本文从该时代背景出发来介绍本次 CloudQuery 1.4 版本整体新增的功能点以及未来迭代规划。 引入「 DTS 」概念,数据工具大集成上文中提到数仓工作中大量的时间用来进行数据处理,CloudQuery 本意旨在解决用户在数据操作中遇到的问题。1.4 之前的版本我们将重心放在优化编辑器体验以及攻克重难点上,在我们逐步完善数据操作工作台时也发现以 SQL 方式(手写 SQL 或可视化数据查询编辑、终端操作)来进行数据操作只是数据库相关人员工作中的一部分,更多时候我们需要跟数据进行批量交互,如批量数据导入、数据迁移等,此时再采用 SQL 或终端的形式则远远达不到我们对于该功能的期望。 因此 CloudQuery 在 1.4 版本提出「 DTS 」概念,意为「数据库工具箱服务」。「导入导出」作为「 DTS 」的一个子模块,为 DBA 、运维等角色提供了数据传输上的便利。 1.4.0 版本,我们首先推出 MySQL 和 Oracle 数据库的 dump 格式导出数据功能,后续会根据每个数据源进行针对性的数据工具支持,例如 PostgreSQL dump 相关导入导出功能,同时数据库工具也纳入权限管控,用户使用数据库工具需要管理员进行授权。 此外,在 1.4 的迭代过程中,「数据迁移」也会作为一个工具加入「 CloudQuery DTS 」大家庭。我们在设计「数据迁移」模块时考虑到当前分布式业务系统通常不会使用单一数据源进行数据存储的情况,提出了「同源 /异源迁移」,同时根据数据库结构的异同会存在「同构 /异构迁移」的情况,所以提供的迁移形式也更加多样化,具体如下:
因为「数据迁移」的设计相对复杂且包含范围较广,所以「数据迁移」功能我们会在 1.4 版本中持续推出完善,也希望大家在使用中提出自己的建议,我们在认真分析之后会对功能进行调整。 「可视化」模块,数据操作无需有求于人如果说「 DTS 」贴近数据库底层数据,那么「可视化」则更贴近业务场景。CloudQuery 1.4 版本推出的第二大功能就是「可视化」,包括两个模块:「可视化辅助查询」和「 ER 建模」。 可视化辅助查询企业中并非每一个用户都能熟练使用 SQL 语句,对于没有 SQL 基础但需要进行数据查询的用户就需要「可视化」来辅助。 CloudQuery 1.4.0 版本新增「可视化辅助查询」功能,让用户以图形化的方式进行数据操作,添加查询、筛选、排序等条件时更加简便易懂,即使不懂 SQL 或不懂数据库也能得到自己需要的结果数据。 同时,我们后续也会支持用户查询画布保存或生成 SQL 语句保存,方便在以后的使用中直接获取结果。 ER 建模「 ER 建模」则针对相对高阶用户,以 ER 图的形式来渲染数据库下表关系,让主外键以及约束关系更加直观。 同时在 ER 图呈现画布上支持针对表结构的变更操作,例如 添加表、设计表、删除表、添加约束等。ER 图画布同样支持图片格式导出,方便 DBA 进行数据库元素关系整理,在业务内部传阅。 新增数据源支持,覆盖全类型数据库CloudQuery 作为数据库统一入口,数据源支持是最基础的功能,同时作为以社区为重心的产品,用户的需求至关重要。我们在 1.3 版本迭代过程中持续收集社区用户的使用建议,经过评估后我们会在 1.4 迭代过程中加入以下数据源:
CloudQuery 在持续扩充数据源种类的同时也不会忽略每个数据源自身的特性,同时在未来不久的版本中会对数据操作区的自动提示、结果集展示进行整体优化。 OpenAPI,发挥社区的力量CloudQuery 是在社区中持续成长的产品,但同时我们自身能做的事情又十分有限。所以在我们功能迭代的路上将持续开放 API,方便有开发能力的用户来进行企业内部第三方应用、组织架构以及其他资源接入。 接下去我们会优先开放「用户」模块的部分接口,但在调用接口前需要系统管理员在平台内部开发者中心进行指定用户的开发者身份激活,身份激活后会得到 appID 和对应的 secret,以此作为密钥来进行 API 接口的鉴权和调用。 总结以上就是 CloudQuery 在未来的 1.4 版本中整体的功能以及迭代规划。后面我们对针对 1.4 版本的新功能出系列文章,详细阐述每个新功能点及其背后技术,让大家更好地了解 CloudQuery 的体系。同时我们会持续完善自身的基础能力,为社区用户带来更加便利、快捷的数据操作与交互体验。 官网地址: https://cloudquery.club/ |
Posted: 06 Jul 2021 07:55 PM PDT 已解决 |
大家怎么做账户系统中的短信验证码注册/登录、一键手机号验证注册/登录的?请问是自己从头开发,手写接入,还是有现成的框架可以用 Posted: 06 Jul 2021 07:35 PM PDT 如果只是基于用户名密码的登录注册,Keycloak 看起来直接就能用。但现在需要短信验证码注册 /登录、一键手机号验证注册 /登录功能。我知道发短信、手机号验证都有 API 可以直接调用,但如果自己写代码接入到 Keycloak 的话,可能存在一些代码安全风险。 因此请问大家是怎么做的?如果是自己写代码接入的话,如何保证安全性的? |
Posted: 06 Jul 2021 07:24 PM PDT |
Posted: 06 Jul 2021 10:02 AM PDT 各位大佬给个建议 |
Posted: 06 Jul 2021 08:33 AM PDT 最近项目中需要一个音乐试听的功能,试听时间在 30 秒以上,最好可以指定试听的开始时间,搜索了下没找到比较满意的。 有人用过类似的服务吗? 提供 API 或 SDK, 没有版权争议,最好是国外的。 谢谢~ |
那些一起写过的代码 – 7 年编码环境变化记(https://gangdaomeimei.cn/?p=567) Posted: 06 Jul 2021 07:20 AM PDT 翻了翻我的照片,发现 7 年很快就过去了,我也从当时懵懂无知的少年变成了一个懵懂无知的职场人士。和大家分享一下我的桌面变迁。 |
Posted: 06 Jul 2021 06:43 AM PDT 坐标北京。 最喜欢夏天了,有各种水果可以吃,也不用穿那么多繁琐的衣物,而且白天时间还最长,能各种玩,各种浪,但是也有一点不太好,就是太热有时候睡不着觉。 开空调睡觉,一是感觉声音大,嗡嗡的睡不着,二是空调风吹到身体上总感觉不舒服。 不开空调,开窗户睡觉也是有噪音,而且早上鸟儿起的特别早,叽叽喳喳的总是被吵醒,夜里下雨稀稀拉拉的也容易醒。 没办法,最近买了隔音耳塞试了试,发现这个东西也不太好用,虽然能隔(部分噪)音,但是自己的呼吸声和心跳声又会感觉特别大,而且塞进耳朵里总会感觉不舒服。 也尝试了不开空调也不开窗户睡觉,实在是太闷了...... |
You are subscribed to email updates from V2EX - 技术. To stop receiving these emails, you may unsubscribe now. | Email delivery powered by Google |
Google, 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States |
No comments:
Post a Comment