void MainWindow::readJson(QString fileName) { QString szContent = NMyUtils::readFile(NMyUtils::getFileFullPath(fileName)); QJsonDocument jDoc = QJsonDocument::fromJson(szContent.toUtf8()); QJsonObject jObj = jDoc.object(); QJsonArray jReminderItems = jObj.value(QString("Reminder")).toArray(); foreach (const QJsonValue & item, jReminderItems) { QJsonValue eName = (item.toObject())["EventName"]; QJsonValue tBegin = (item.toObject())["TimeBegin"]; QJsonValue tDue = (item.toObject())["TimeDue"]; QJsonValue comments = (item.toObject())["Comments"]; const NMyEvent *myevent = NMyEvent::newEvent(eName.toString(),tBegin.toString(),tDue.toString(),comments.toString()); eventArray->append(*myevent); } }
QT实现自动启动(Windows)
QString NMyUtils::getExeFullPathWithArgs() { QString exePath = QCoreApplication::applicationFilePath().replace("/","\\").replace("Reminder.exe","QTLoader.exe"); QString argPath = "\""+exePath+"\" TrayIcon"; qDebug()<<argPath; return argPath; } bool NMyUtils::isAutoStart() { QSettings reg("HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN", QSettings::NativeFormat); QString val = reg.value("NReminder").toString(); if(val.length()>0) { return true; } else { return false; } } void NMyUtils::setAutoStart() { QSettings reg("HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN", QSettings::NativeFormat); reg.setValue("NReminder",NMyUtils::getExeFullPathWithArgs()); } void NMyUtils::removeAutoStart() { QSettings reg("HKEY_LOCAL_MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN", QSettings::NativeFormat); reg.remove("NReminder"); }
QT实现TrayIcon
void MainWindow::initTrayIcon() { trayIcon=new QSystemTrayIcon(this); appIcon =new QIcon(NMyUtils::getFileFullPath("Reminder.png")); trayIcon->setIcon(*appIcon); this->setWindowIcon(*appIcon); autoStartAction = new QAction(tr("AutoStart"),this); autoStartAction->setCheckable(true); if(NMyUtils::isAutoStart()) { autoStartAction->setChecked(true); } connect(autoStartAction, SIGNAL(triggered()), this, SLOT(autoStart())); showHideAction = new QAction(tr("Show"),this); showHideAction->setCheckable(true); showHideAction->setChecked(true); connect(showHideAction, SIGNAL(triggered()), this, SLOT(showHide())); quitAction = new QAction(tr("Quit"),this); connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); trayIconMenu = new QMenu(this); trayIconMenu->addAction(autoStartAction); trayIconMenu->addAction(showHideAction); trayIconMenu->addSeparator(); trayIconMenu->addAction(quitAction); trayIcon->setContextMenu(trayIconMenu); trayIcon->setToolTip(tr("Reminder")); connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason))); trayIcon->show(); }
Android任务栏通知
private static int nId = 0; private void RaiseSysTrayAlert(List<NEventBean> eventList) { NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); Context context = getApplicationContext(); for(NEventBean bean : eventList) { Builder mBuilder = new Builder(context); mBuilder.setTicker("XXXX"); mBuilder.setSmallIcon(R.drawable.ic_launcher); mBuilder.setContentTitle("XXXX"); mBuilder.setContentText(bean.msg); mBuilder.setAutoCancel(true); Intent notifyIntent = new Intent(context, MainActivity.class); notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent pIntent = PendingIntent.getActivity(context, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT); mBuilder.setContentIntent(pIntent); nId++; nm.notify(nId, mBuilder.build()); } }
Android后台服务及自动运行
1、修改AndroidManifest.xml文件
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application ...> <service android:name="com.neohope.android.service.NService" android:enabled="true" android:exported="true" > </service> <receiver android:name="com.neohope.android.receiver.NBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> </application>
2、新增服务类
package com.neohope.android.service; import android.app.Service; import android.content.Context; import android.content.Intent; public class NService extends Service { public NService() { } @Override public void onCreate() { mainThread = new WorkThread (); mainThread.start(); } @Override public void onDestroy() { mainThread.bEnd = true; } class WorkThread extends Thread { private int nInterval = 1000*60; private boolean bEnd = false; public JsonReaderThread() { } @Override public void run() { while(!bEnd) { DoSomething(); try { Thread.sleep(nInterval); } catch (InterruptedException e) { Log.w("", ""); } } } private void DoSomething() { } }
3、新增广播处理类
package com.neohope.android.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import com.neohope.android.service.NService; public class NBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent startServiceIntent = new Intent(context, NService.class); context.startService(startServiceIntent); } }
4、在Activity中添加启动代码
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); doStartService(); } public void doStartService() { Context context = getApplicationContext(); Intent startServiceIntent = new Intent(context, NService.class); context.startService(startServiceIntent); }
Android读取网页内容
1、修改AndroidManifest.xml文件
<uses-permission android:name="android.permission.INTERNET" />
2、网页读取类
package com.neohope.android.web; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.URL; public class HttpUtils { public static String readStringFromUrl(String szUrl,String szCharcode) throws IOException { URL url = new URL(szUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5 * 1000); conn.setRequestMethod("GET"); String szJson = ""; int resPonseCode = conn.getResponseCode(); if (conn.getResponseCode() == 200) { InputStream is = conn.getInputStream(); byte[] data = readStream(is); szJson = new String(data,szCharcode); } return szJson; } private static byte[] readStream(InputStream inputStream) throws IOException { ByteArrayOutputStream bout = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = inputStream.read(buffer)) != -1) { bout.write(buffer, 0, len); } bout.close(); inputStream.close(); return bout.toByteArray(); } }
O2O必须能调动线下资源
最近看来,国内O2O的商业模式主要在拼命覆盖“吃、穿、住、用、行”,而且出现很明显的行业排名。
问题是,为什么会有公司成功,而多数的公司失败了呢?
个人感觉,以下几点比较重要:
1、O2O必须可以让用户和服务提供者的需求match起来,将线下资源调动到线上,让大家得到真正的收益(解决问题省钱省时间)
很简单的例子,就是打车软件。以打车为例,打车软件出现以前,打车的人无车可用,出租车找不到乘客。滴滴和快的,解决的问题是将打车需求及出租车资源带到线上,将双方match了起来。
2、时机很重要,该出手时就出手,赢家通吃
这个很容易理解。一旦有人搞出一种新模式,很多人就会一起上,然后就是大乱斗,最后尘埃落定,赢家通吃。
3、资金链超级重要,该出手时再出手,资金链断裂等于突然死亡
比如团购,雨后春笋般出现了几百家,资金链断裂,乱烧钱公司突然集体死亡。最后美团用剩下的资金占领了很大的市场,成功的活了下来。
4、从优惠及免费开始
不管是打车、团购还是外卖,在初期用过的话,你懂的。
5、从竞争走向合作
快的和滴滴的垄断优势,你懂的。
(再比如,互联网中的优酷和土豆)
6、积极寻找盈利点
站稳脚跟后,大家首先要考虑的问题就是盈利,毕竟是开公司,不是做慈善咯。
(再比如,互联网中的天猫)
7、改变规则
比如1号专车对出租车的冲击
(再比如,互联网中微信对短信的冲击,支付宝和微信支付对网银的冲击)
8、现在赢家通吃现象比较严重,长尾效应暂时没有显现
9、个人预测
外卖的战争开始了,诸位要加油哦。
超市资源还没有人调动到线上,超市的话很多时候是资源过剩,一些时候资源紧张。这是个不错的突破口。虽然B2C做的火热,但O2O还是有很大市场的呢。
解决了吃穿住用行,然后就是医疗健康,一定会有很多新的模式出现的。现在主流厂商的模式,根本没有成型,战争刚刚开始拉开序幕。
解决了吃穿住用行,人们就会开始追求自我价值,享受及艺术的时代,应该不远了。
维修、保洁类的上门服务,也可以考虑哦。
今天先写这么多吧。
运煤问题
提问:
一个山西煤老板,在矿区开采了3000吨煤需要运送到市场上去卖,从矿区到市场有1000公里。现在有一列烧煤的火车,该火车最多只能装1000吨煤,但其每一公里需要耗一吨煤作为燃料。请问,怎么运送才能运最多的煤到集市?(火车可以调头,火车最终不需要返回煤矿)
约束:
1、火车一定需要调头
2、调头的原则是,消耗的燃料越少越好
3、当煤不足一车时,仍然要当作一车运输
解答:
1、当煤多于2000吨时,火车一定要运三次,同样的路要跑五次
1000吨煤,走五次,可以走1/5路程
2、当煤多余1000吨时,火车一定要运两次,同样的路要跑三次
1000吨煤,走三次,可以走1/3路程
3、最终剩余1000吨时,直接跑到终点
最后剩余路程为1-1/5-1/3=7/15
跑完后剩余的煤为1000-7/15*1000=1000*8/15=533零1/3吨
以上。
HTML设置禁用缓存
<!-- HTTP 1.1 --> <meta http-equiv="pragma" content="no-cache"> <!-- HTTP 1.0 --> <meta http-equiv="cache-control" content="no-cache"> <!-- Prevent caching at the proxy server --> <meta http-equiv="expires" content="0">
跨语言翻译
1、Java翻译为JS
1.1、GWT
通过Eclipse+GWT插件,进行界面设计,界面响应方法与AWT类似。开否人员可以用JavaGUI设计的方式进行复杂界面开否,然后翻译为H5+JS的页面。
1.2、RAP/RWT
通过Eclipse SWT方式来进行界面开发,通过RAP/RWT将页面翻译为H5+JS的页面。可以通过相对可控的代价,将原来CS架构的SWT项目,转换为Web架构。问题也是一样的,就是全部的修改,要从CS架构改起。
2、wrapper
2.1、swig
可以将c/c++项目进行包装,支持Java, JS, GO, C#, Perl, PHP, Python, Ruby, Lua, R, Android等多种语言调用。