首页 文章 精选 留言 我的

精选列表

搜索[启动程序],共10000篇文章
优秀的个人博客,低调大师

阿里云API创新应用大赛启动:智慧开放,互链解决

2017年6月11日,阿里云第一届API大赛在上海国际采购会展中心完美落幕,然而时隔6个月,第二届API创新应用大赛于12月12日应约而归。 有人说 API 带动了 IOT 的增长,也有人说一个发展的 IOT 生态系统推动了强大的 API 及 API 经济的需求。API帮助企业领导人实现公司转型、围绕现有产品打造新的生态系统,也变现核心资本、服务和产品。 互联网云计算时代,如何打破封闭的系统,让企业内外充分连接和互动?成了各企业管理者们面临的紧要问题。而API简单便捷的调用方式,提高了开发效率,加强了系统的灵活性和可扩展性,提高了快速交付的能力。 得益于API这种便捷的商业模式,许多过去不可及的功能,今天也在逐渐变成现实。不管是新零售,金融,还是物联网,API经济都正在帮助他们迈入一个新的时代。 为此阿里云方也希望通过API创新应用大赛的

优秀的个人博客,低调大师

android140 360 黑名单 启动service和分页加载

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView style="@style/TitleStyle" android:text="黑名单管理" /> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="11"> <LinearLayout android:id="@+id/ll_pb" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:visibility="invisible"> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" /> <!-- 加载的圆圈 --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="玩命加载中..." /> </LinearLayout> <include android:id="@+id/list_view" layout="@layout/list_view"></include> </FrameLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:onClick="prePage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="上一页" android:layout_weight="1"/> <Button android:onClick="nextPage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下一页" android:layout_weight="1"/> <Button android:onClick="jump" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳转" android:layout_weight="1"/> <EditText android:id="@+id/et_page_number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"/> <TextView android:id="@+id/tv_page_numbeer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0/10" android:textSize="18sp" android:layout_weight="1"/> </LinearLayout> </LinearLayout> service package com.itheima52.mobilesafe.service; import main.java.com.itheima52.mobilesafe.activity.CallSafeService; import main.java.com.itheima52.mobilesafe.activity.SettingActivity; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.IBinder; import android.telephony.SmsMessage; import android.view.View; import android.view.View.OnClickListener; import com.itheima52.mobilesafe.db.dao.BlackNumberDao; /* //根据黑名单服务是否运行来更新checkbox boolean serviceRunning = ServiceStatusUtils.isServiceRunning(this, "com.itheima52.mobilesafe.service.CallSafeService"); if (serviceRunning) { siv_callsafe.setChecked(true); } else { siv_callsafe.setChecked(false); } siv_callsafe.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (siv_callsafe.isChecked()) { siv_callsafe.setChecked(false); stopService(new Intent(SettingActivity.this, CallSafeService.class));// 停止黑名单服务 } else { siv_callsafe.setChecked(true); startService(new Intent(SettingActivity.this, CallSafeService.class));// 开启黑名单服务 } } }); */ public class CallSafeService extends Service { private BlackNumberDao dao; public CallSafeService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } @Override public void onCreate() { super.onCreate(); dao = new BlackNumberDao(this); //初始化短信的广播 InnerReceiver innerReceiver = new InnerReceiver(); IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); intentFilter.setPriority(Integer.MAX_VALUE); registerReceiver(innerReceiver, intentFilter); } private class InnerReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { System.out.println("短信来了"); Object[] objects = (Object[]) intent.getExtras().get("pdus"); for (Object object : objects) {// 短信最多140字节, // 超出的话,会分为多条短信发送,所以是一个数组,因为我们的短信指令很短,所以for循环只执行一次 SmsMessage message = SmsMessage.createFromPdu((byte[]) object); String originatingAddress = message.getOriginatingAddress();// 短信来源号码 String messageBody = message.getMessageBody();// 短信内容 //通过短信的电话号码查询拦截的模式 String mode = dao.findNumber(originatingAddress); /** * 黑名单拦截模式 * 1 全部拦截 电话拦截 + 短信拦截 * 2 电话拦截 * 3 短信拦截 */ if(mode.equals("1")){ abortBroadcast(); }else if(mode.equals("3")){ abortBroadcast(); } //智能拦截模式 发票 你的头发漂亮 分词(与数据库进行校验判断) if(messageBody.contains("fapiao")){ abortBroadcast(); } } } } @Override public void onDestroy() { super.onDestroy(); } } Acticity package main.java.com.itheima52.mobilesafe.activity; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.Editable; import android.text.TextUtils; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.Adapter; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.NumberPicker; import android.widget.TextView; import android.widget.Toast; import java.util.List; import main.java.com.itheima52.mobilesafe.adapter.MyBaseAdapter; import main.java.com.itheima52.mobilesafe.bean.BlackNumberInfo; import main.java.com.itheima52.mobilesafe.db.dao.BlackNumberDao; public class CallSafeActivity extends Activity { private ListView list_view; private List<BlackNumberInfo> blackNumberInfos; private LinearLayout ll_pb; private BlackNumberDao dao; private CallSafeAdapter adapter; /** * 开始的位置 */ private int mStartIndex = 0; /** * 每页展示20条数据 */ private int maxCount = 20; /** * 一共有多少页面 */ private int totalPage; private int totalNumber; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_call_safe2); initUI(); initData(); } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { ll_pb.setVisibility(View.INVISIBLE); if(adapter == null){ adapter = new CallSafeAdapter(blackNumberInfos, CallSafeActivity.this); list_view.setAdapter(adapter); }else{ adapter.notifyDataSetChanged(); } } }; private void initData() { dao = new BlackNumberDao(CallSafeActivity.this); //一共有多少条数据 totalNumber = dao.getTotalNumber(); new Thread() {//异步加载数据 @Override public void run() { //分批加载数据 if (blackNumberInfos == null) { blackNumberInfos = dao.findPar2(mStartIndex, maxCount); } else { //把后面的数据。追加到blackNumberInfos集合里面。防止黑名单被覆盖 blackNumberInfos.addAll(dao.findPar2(mStartIndex, maxCount)); } handler.sendEmptyMessage(0); } }.start(); } /** * 添加黑名单 */ public void addBlackNumber(View view) { AlertDialog.Builder builder = new AlertDialog.Builder(this); final AlertDialog dialog = builder.create(); View dialog_view = View.inflate(this, R.layout.dialog_add_black_number, null); final EditText et_number = (EditText) dialog_view.findViewById(R.id.et_number); Button btn_ok = (Button) dialog_view.findViewById(R.id.btn_ok); Button btn_cancel = (Button) dialog_view.findViewById(R.id.btn_cancel); final CheckBox cb_phone = (CheckBox) dialog_view.findViewById(R.id.cb_phone); final CheckBox cb_sms = (CheckBox) dialog_view.findViewById(R.id.cb_sms); btn_cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); btn_ok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String str_number = et_number.getText().toString().trim(); if(TextUtils.isEmpty(str_number)){ Toast.makeText(CallSafeActivity.this,"请输入黑名单号码",Toast.LENGTH_SHORT).show(); return; } String mode = ""; if(cb_phone.isChecked()&& cb_sms.isChecked()){ mode = "1"; }else if(cb_phone.isChecked()){ mode = "2"; }else if(cb_sms.isChecked()){ mode = "3"; }else{ Toast.makeText(CallSafeActivity.this,"请勾选拦截模式",Toast.LENGTH_SHORT).show(); return; } BlackNumberInfo blackNumberInfo = new BlackNumberInfo(); blackNumberInfo.setNumber(str_number); blackNumberInfo.setMode(mode); blackNumberInfos.add(0,blackNumberInfo); //把电话号码和拦截模式添加到数据库。 dao.add(str_number,mode); if(adapter == null){ adapter = new CallSafeAdapter(blackNumberInfos, CallSafeActivity.this); list_view.setAdapter(adapter); }else{ adapter.notifyDataSetChanged(); } dialog.dismiss(); } }); dialog.setView(dialog_view); dialog.show(); } private void initUI() { ll_pb = (LinearLayout) findViewById(R.id.ll_pb); //展示加载的圆圈 ll_pb.setVisibility(View.VISIBLE); list_view = (ListView) findViewById(R.id.list_view); //设置listview的滚动监听 list_view.setOnScrollListener(new AbsListView.OnScrollListener() { //状态改变时候回调的方法 /** * @param scrollState 表示滚动的状态 * AbsListView.OnScrollListener.SCROLL_STATE_IDLE 闲置状态 * AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL 手指触摸的时候的状态 * AbsListView.OnScrollListener.SCROLL_STATE_FLING 惯性 */ @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case AbsListView.OnScrollListener.SCROLL_STATE_IDLE://闲置状态 //获取到最后一条显示的数据 int lastVisiblePosition = list_view.getLastVisiblePosition(); System.out.println("lastVisiblePosition==========" + lastVisiblePosition); if(lastVisiblePosition == blackNumberInfos.size() - 1){//每次加载20条数据 // 加载更多的数据。 更改加载数据的开始位置 mStartIndex += maxCount; if (mStartIndex >= totalNumber) { Toast.makeText(getApplicationContext(), "没有更多的数据了。", Toast.LENGTH_SHORT).show(); return; } initData(); } break; } } //listview滚动的时候调用的方法 //时时调用。当我们的手指触摸的屏幕的时候就调用 @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } }); } private class CallSafeAdapter extends MyBaseAdapter<BlackNumberInfo> { private CallSafeAdapter(List lists, Context mContext) { super(lists, mContext); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = View.inflate(CallSafeActivity.this, R.layout.item_call_safe, null); /*<TextView android:id="@id/tv_mode" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_below="@id/tv_number" android:text="电话拦截"/> <!-- ids.xml <?xml version="1.0" encoding="utf-8"?> <resources> <item type="id" name="tv_mode" /> </resources> -->*/ holder = new ViewHolder(); holder.tv_number = (TextView) convertView.findViewById(R.id.tv_number); holder.tv_mode = (TextView) convertView.findViewById(R.id.tv_mode); holder.iv_delete = (ImageView) convertView.findViewById(R.id.iv_delete); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag();//节约内存中的convertView对象,内存中永远只有一屏幕个数的convertView。 } holder.tv_number.setText(lists.get(position).getNumber()); String mode = lists.get(position).getMode(); if (mode.equals("1")) { holder.tv_mode.setText("来电拦截+短信"); } else if (mode.equals("2")) { holder.tv_mode.setText("电话拦截"); } else if (mode.equals("3")) { holder.tv_mode.setText("短信拦截"); } final BlackNumberInfo info = lists.get(position); holder.iv_delete.setOnClickListener(new View.OnClickListener() {//也只是holder.iv_delete的一个属性。 @Override public void onClick(View v) { String number = info.getNumber(); boolean result = dao.delete(number); if (result) { Toast.makeText(CallSafeActivity.this, "删除成功", Toast.LENGTH_SHORT).show(); lists.remove(info); //刷新界面 adapter.notifyDataSetChanged(); } else { Toast.makeText(CallSafeActivity.this, "删除失败", Toast.LENGTH_SHORT).show(); } } }); return convertView; } } static class ViewHolder { TextView tv_number; TextView tv_mode; ImageView iv_delete; } } 本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/5136343.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Openstack:计算节点没法启动的一次排查过程

openstack的控制节点和计算节点重启后,在控制节点上查看计算资源的状态: 1 2 3 4 5 6 7 8 9 10 [root@linux-node1~] #openstackcomputeservicelist +----+------------------+------------------------+----------+---------+-------+---------------------- |ID|Binary|Host|Zone|Status|State|UpdatedAt| +----+------------------+------------------------+----------+---------+-------+---------------------- |1|nova-conductor|linux-node1.wanwan.com|internal|enabled|up|2017-03-10T03:00:40.000000| |2|nova-scheduler|linux-node1.wanwan.com|internal|enabled|up|2017-03-10T03:00:41.000000| |3|nova-consoleauth|linux-node1.wanwan.com|internal|enabled|up|2017-03-10T03:00:45.000000| |7|nova-compute|linux-node1.wanwan.com|nova|enabled|up|2017-03-10T03:00:38.000000| |8|nova-compute|linux-node2.wanwan.com|nova|enabled|down|2017-03-10T02:28:39.000000| +----+------------------+------------------------+----------+---------+-------+---------------------- 居然发现计算节点node02没有起来,如上在计算节点上查看下状态 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@linux-node2~] #systemctlstatusopenstack-nova-compute.service ●openstack-nova-compute.service-OpenStackNovaComputeServer Loaded:loaded( /usr/lib/systemd/system/openstack-nova-compute .service;enabled;vendorpreset:disabled) Active:activating(start)sinceFri2017-03-1010:49:08CST;12minago MainPID:2261(nova-compute) CGroup: /system .slice /openstack-nova-compute .service └─2261 /usr/bin/python2 /usr/bin/nova-compute Mar1010:49:08linux-node2.wanwan.comsystemd[1]:StartingOpenStackNovaComputeServer... [root@linux-node2~] #systemctlstartopenstack-nova-compute.service 启服务,发现一直处于卡住的状态,查看下日志文件 -f101b84fa432]AMQPserveron10.10.10.11:5672isunreachable:[Errno113]EHOSTUNREACH.Tryingagain in 32seconds.Clientport:None 2017-03-1010:58:19.8462261ERRORoslo.messaging._drivers.impl_rabbit[req-187b6306-0117-4c40-944d-53dd8bf054be-----][16162492-f445-4cb0-ad0e-f101b84fa432]AMQPserveron10.10.10.11:5672isunreachable:[Errno113]EHOSTUNREACH.Tryingagain in 32seconds.Clientport:None 2017-03-1010:58:51.9442261ERRORoslo.messaging._drivers.impl_rabbit[req-187b6306-0117-4c40-944d-53dd8bf054be-----][16162492-f445-4cb0-ad0e-f101b84fa432]AMQPserveron10.10.10.11:5672isunreachable:[Errno113]EHOSTUNREACH.Tryingagain in 32seconds.Clientport:None 2017-03-1010:59:24.0762261ERRORoslo.messaging._drivers.impl_rabbit[req-187b6306-0117-4c40-944d-53dd8bf054be-----][16162492-f445-4cb0-ad0e-f101b84fa432]AMQPserveron10.10.10.11:5672isunreachable:[Errno113]EHOSTUNREACH.Tryingagain in 32seconds.Clientport:None 2017-03-1010:59:56.1912261ERRORoslo.messaging._drivers.impl_rabbit[req-187b6306-0117-4c40-944d-53dd8bf054be-----][16162492-f445-4cb0-ad0e-f101b84fa432]AMQPserveron10.10.10.11:5672isunreachable:[Errno113]EHOSTUNREACH.Tryingagain in 32seconds.Clientport:None 2017-03-1011:00:28.3022261ERRORoslo.messaging._drivers.impl_rabbit[req-187b6306-0117-4c40-944d-53dd8bf054be-----][16162492-f445-4cb0-ad0e-f101b84fa432]AMQPserveron10.10.10.11:5672isunreachable:[Errno113]EHOSTUNREACH.Tryingagain in 32seconds.Clientport:None 2017-03-1011:01:00.4112261ERRORoslo.messaging._drivers.impl_rabbit[req-187b6306-0117-4c40-944d-53dd8bf054be-----][16162492-f445-4cb0-ad0e-f101b84fa432]AMQPserveron10.10.10.11:5672isunreachable:[Errno113]EHOSTUNREACH.Tryingagain in 32seconds.Clientport:None 2017-03-1011:01:33.5212261ERRORoslo.messaging._drivers.impl_rabbit[req-187b6306-0117-4c40-944d-53dd8bf054be-----][16162492-f445-4cb0-ad0e-f101b84fa432]AMQPserveron10.10.10.11:5672isunreachable:[Errno113]EHOSTUNREACH.Tryingagain in 32seconds.Clientport:None 提示AMQP不可达,这个时候我就开始怀疑消息队列是否正常,继续检查 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [root@linux-node1~] #lsof-i:5672 COMMANDPIDUSERFDTYPEDEVICESIZE /OFF NODENAME nova-cons1171nova5uIPv4306130t0TCPlinux-node1:40614->linux-node1:amqp(ESTABLISHED) beam.smp1173rabbitmq52uIPv6291240t0TCP*:amqp(LISTEN) beam.smp1173rabbitmq53uIPv6311520t0TCPlinux-node1:amqp->linux-node1:40614(ESTABLISHED) beam.smp1173rabbitmq54uIPv6311760t0TCPlinux-node1:amqp->linux-node1:40624(ESTABLISHED) beam.smp1173rabbitmq55uIPv6311800t0TCPlinux-node1:amqp->linux-node1:40626(ESTABLISHED) beam.smp1173rabbitmq56uIPv6311830t0TCPlinux-node1:amqp->linux-node1:40628(ESTABLISHED) beam.smp1173rabbitmq57uIPv6311930t0TCPlinux-node1:amqp->linux-node1:40630(ESTABLISHED) beam.smp1173rabbitmq58uIPv6311970t0TCPlinux-node1:amqp->linux-node1:40632(ESTABLISHED) beam.smp1173rabbitmq59uIPv6312550t0TCPlinux-node1:amqp->linux-node1:40640(ESTABLISHED) beam.smp1173rabbitmq60uIPv6313210t0TCPlinux-node1:amqp->linux-node1:40646(ESTABLISHED) beam.smp1173rabbitmq61uIPv6313550t0TCPlinux-node1:amqp->linux-node1:40654(ESTABLISHED) beam.smp1173rabbitmq62uIPv6350790t0TCPlinux-node1:amqp->linux-node1:40670(ESTABLISHED) nova-sche1186nova7uIPv4311920t0TCPlinux-node1:40630->linux-node1:amqp(ESTABLISHED) nova-comp2091nova4uIPv4311680t0TCPlinux-node1:40624->linux-node1:amqp(ESTABLISHED) nova-comp2091nova5uIPv4311790t0TCPlinux-node1:40626->linux-node1:amqp(ESTABLISHED) nova-comp2091nova21uIPv4318980t0TCPlinux-node1:40654->linux-node1:amqp(ESTABLISHED) nova-comp2091nova22uIPv4358820t0TCPlinux-node1:40670->linux-node1:amqp(ESTABLISHED) nova-cond3265nova7uIPv4311960t0TCPlinux-node1:40632->linux-node1:amqp(ESTABLISHED) nova-cond3265nova8uIPv4318330t0TCPlinux-node1:40646->linux-node1:amqp(ESTABLISHED) nova-cond3267nova7uIPv4306230t0TCPlinux-node1:40628->linux-node1:amqp(ESTABLISHED) nova-cond3267nova8uIPv4317500t0TCPlinux-node1:40640->linux-node1:amqp(ESTABLISHED) 没发现有异常,尝试清除下iptables [root@linux-node1~] #iptables-F [root@linux-node1~] #iptables-X [root@linux-node1~] #iptables-Z 再次进行检查 [root@linux-node1~] #openstackcomputeservicelist +----+------------------+------------------------+----------+---------+-------+---------------------- |ID|Binary|Host|Zone|Status|State|UpdatedAt| +----+------------------+------------------------+----------+---------+-------+---------------------- |1|nova-conductor|linux-node1.wanwan.com|internal|enabled|up|2017-03-10T03:08:40.000000| |2|nova-scheduler|linux-node1.wanwan.com|internal|enabled|up|2017-03-10T03:08:41.000000| |3|nova-consoleauth|linux-node1.wanwan.com|internal|enabled|up|2017-03-10T03:08:45.000000| |7|nova-compute|linux-node1.wanwan.com|nova|enabled|up|2017-03-10T03:08:48.000000| |8|nova-compute|linux-node2.wanwan.com|nova|enabled|up|2017-03-10T03:08:40.000000| +----+------------------+------------------------+----------+---------+-------+---------------------- 如上,可以发现计算节点已经恢复正常了,看来iptables一定要记得清空策略 本文转自 冰冻vs西瓜 51CTO博客,原文链接:http://blog.51cto.com/molewan/1905064,如需转载请自行联系原作者

优秀的个人博客,低调大师

Openstack compute 环境服务启动与关闭不需要的服务

#/usr/bin/env bash service(){ need_srv="network sshd ntpd crond irqbalance iptables mdmonitor smartd messagebus xinetd openstack-ceilometer-compute openstack-nova-compute openstack-nova-extend openstack-nova-network" forbidden=$(chkconfig --list | grep -Ei '(2|3|4|5):on' | awk '{ print $1 }'|grep -Evi "`echo $need_srv|sed 's, *,|,g'`" ) for _name in $forbidden do chkconfig --level 2345 $_name off > /dev/null 2>&1 done for _name in $need_srv do chkconfig --level 2345 $_name on > /dev/null 2>&1 done } service 本文转自 swq499809608 51CTO博客,原文链接:http://blog.51cto.com/swq499809608/1380487

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册