C4droid (C/C++ compiler) Android上的C/C++的IDE和编译器

C4droid is a simple C/C++ IDE + C/C++ compiler for Android with Makefile support.
C4droid already has almost full C language support,
so you don’t need to wait when it will be added.

 

C4droid 是一个android上的,提供Makefile支持的,

简单的C/C++的IDE和C/C++的编译器。
C4droid 已经几乎完全支持C语言,

所以当它被编译时你已不需要等待。

Read More

【改】十分钟的极简操作系统

1)准备 nasm ,VirtualBox

sudo apt-get install nasm

sudo apt-get install virtualbox

====================================

2)编译boot0.0.1.asm


%ifdef BOOT_DEBUG
org 0100h ; 调试状态, 做成 .COM 文件, 可调试
%else
org 07c00h ; BIOS 将把 Boot Sector 加载到 0:7C00 处
%endif

mov ax, cs
mov ds, ax
mov es, ax
call DispStr ; 调用显示字符串例程
jmp $ ; 无限循环
DispStr:
mov ax, BootMessage
mov bp, ax ; ES:BP = 串地址
mov cx, 17 ; CX = 串长度
mov ax, 01301h ; AH = 13, AL = 01h
mov bx, 000ch ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
mov dl, 0
int 10h ; int 10h
ret
BootMessage: db “Ohhhh,wuwenjie!!!”
times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw 0xaa55 ; 结束标志


2.2)利用nasn 编译

nasm boot0.0.1.asm -o boot0.0.1.bin
2.3)dd if=boot0.0.1.bin of=myos0.0.1.img bs=512 count=1

生成img文件

 

==================================================

3)VirtualBox检验极简OS

步骤:

 

新建–>下一步–>名称(myos0.0.1)other other/unknown

 

–>下一步–>下一步–>下一步–>下一步–>下一步–>下一步

 

–>创建–>创建–>设置–>存储—>

 

添加软盘控制器(启动顺序默认软驱开始)–>

 

 

 

 

 

 

 

 

添加虚拟软驱—>选择磁盘–>选择刚刚生成的myos0.0.1.img–>

 

打开–>确定—>启动

 

 

====================================================

4)参考

1.[于渊]一个操作系统的实现

2.https://github.com/yyu/osfs01/blob/master/boot.asm

3.http://osfromscratch.org

 

 

Xfce 外框没了--解决

不知道为何
登录了Xubuntu

发现为社么程序的外框都没有的

用得十分的不习惯

找谷神 一问

有了以下解决方法:

1)Alt + F2

2)输入 rm -rf ~/.cache/sessions

删除 缓存

3)运行

4)reboot 重启

5) 完成


MORE:

Quick Fix

This requires you to log out and log in again.

 

    Alt+F2                           (run window)
    rm -rf ~/.cache/sessions         (delete the Xfce4 saved sessions files for your user)
    Click on "Run"                   (or hit the enter key)

Now you will log out and log in again. Make sure “Save session for future logins” is not checked.

If the Quick Fix fails, please try the next method.

 

XubuntuPanels
解決 Xubuntu/Xfce/Ubuntu Studio 12.04 視窗邊框消失問題

开源小项目:xhuloo1.3.2

xhuloo作为学习ANDROID编程的DEMO,UI设计十分差(基本没有设计),但它可作为初学的演示,它简单十分,浅显易懂。没有实用价值,作为编程(API)的探究。

 


xhuloo1.3.2 release 增加新功能

1)android id —>XhulooActivity_PHONE

2) 自定义列表 —->XhulooActivity_weatherreport(发展为天气预报功能)

3)震动 —> XhulooActivity_MEM

 

 

 


发展方向:

1)完善文件游览功能,BACK功能

2)读取 设备的IP地址,等信息

3)SERVICE后台功能

4)天气预报

 

 

———

project zip here MD5:0bd2ce8fc97b79736728b49ab18f58d9

apk : here MD5:e4b1ef927595b30a9214bb788aa3ccd7

 

 

 


XhulooActivity.java 的源代码

package wo.wocom.xwell;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class XhulooActivity extends Activity {
/** Called when the activity is first created. */

private static final String TAG = "XA_Xhuloo";
//弹出框

String mEditText01_s =null;

/重力感应参数/
float x,y,z;
float currentAcceleration = 0;
float maxAcceleration = 0;

/生命周期/
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.main); //设置主布局

Log.i(XhulooActivity.TAG, "XA_start onCreate~");

final TextView main_textview=(TextView) findViewById(R.id.main_textview);
final Button ok_button = (Button) findViewById(R.id.widget40_button_OK);
final EditText mEditText01 = (EditText) findViewById(R.id. myEditText);
final CheckBox iAccept=(CheckBox)findViewById(R.id. CheckBox_Accept );
final String[] data = {"心怔煩亂敵若云","有炎百刃月無暈","靈威震怒鼓徹天","犀甲迸裂矣厥劍","永思故原遙難反",
"遠峙疊巒久無還","埋骨鬼雄血浸袍","藏懷青絲志誠傲","顧往舊徑櫻爛漫","逸鸞鳳鹮面桃然","雯華琉白馨而靨"};

/*按钮监听 */
ok_button.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v) {
ok_button.setText("Hi,clicked");

switch(v.getId()){
case R.id.widget40_button_OK:

mEditText01_s=mEditText01.getText().toString(); //获得文本编框的文字
//toast
Toast.makeText(XhulooActivity.this, "XA_Toast:"+mEditText01_s, Toast.LENGTH_LONG).show();
break;

default:
break;
}//switch
}//onclick_end

}
);

/* 设置EditText 用OnKeyListener 事件来启动 */
mEditText01.setOnKeyListener(new EditText.OnKeyListener(){
public boolean onKey(View v, int keyCode, KeyEvent event) {

if(mEditText01.getText().toString().length()!=0){ok_button.setText(mEditText01.getText().toString());}

else{
ok_button.setText("ok请提交");
AlertDialog.Builder my_ADialog=new AlertDialog.Builder(XhulooActivity.this); ;
/设置标题/
my_ADialog.setTitle("XA_AlertDialog.Builder");
/设置显示消息/
my_ADialog.setMessage("请提交");
/设置不能取消/
my_ADialog.setCancelable(false);

my_ADialog.setPositiveButton("退出Huloo;并访问官网",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
XhulooActivity.this.finish();
Uri uri=Uri.parse("http://www.wuwenjie.tk");
Intent intent=new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);} });

my_ADialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
/显示/
my_ADialog.show();
}

return false;
}//onkey_end
}
);//sokl_end

/*图片 */
final ImageView mImageView = (ImageView) findViewById(R.id.imageView1);
mImageView.setImageDrawable(getResources().getDrawable(R.drawable.action));

/*选择监听 */
iAccept.setOnClickListener(new CheckBox.OnClickListener(){
public void onClick(View v) {
if(iAccept.isChecked()){
main_textview.setText("checkbox checked");
mImageView.setVisibility(View.VISIBLE);
}
else{main_textview.setText(getString(R.string.hello));
mImageView.setVisibility(View.INVISIBLE);}
} }
);

/列表/
ListView lv = (ListView) findViewById(R.id.list1);
ArrayAdapter adapter = new ArrayAdapter(
this,android.R.layout.simple_list_item_1,data); //simple_list_item_1是系统本身有的布局
lv.setAdapter(adapter);

/重力感应功能/

//获得重力感应硬件控制器
SensorManager sm=(SensorManager) this.getSystemService(SENSOR_SERVICE);
final Sensor sensor=sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

//添加重力感应侦听,并实现其方法,
SensorEventListener sel=new SensorEventListener(){

double calibration = SensorManager.STANDARD_GRAVITY;
//系统设置的重力加速度标准值,设备在水平静止的情况下就承受这个压力,
//所以默认Y轴方向的加速度值为STANDARD_GRAVITY
public void onSensorChanged(SensorEvent se) {
x=se.values[SensorManager.DATA_X];
y=se.values[SensorManager.DATA_Y];
z=se.values[SensorManager.DATA_Z];

//计算三个方向的加速度
double a =Math.round(Math.sqrt(Math.pow(x,2)+Math.pow(y,2) +Math.pow(z,2)));

//消去原有的重力引起的压力
currentAcceleration = Math.abs((float)(a-calibration));
if (currentAcceleration > maxAcceleration)
maxAcceleration = currentAcceleration;

TextView textView_sensor=(TextView) findViewById(R.id.textView_sensor);
//设置显示文字
textView_sensor.setText("重力感应:"+"\n"+"x="+x+"\n"+"y="+y+" "+"(int)z="+(int)z+"\n"
+"maxA:"+maxAcceleration+"\n"+"current:"+currentAcceleration+"\n"
+"Name:"+sensor.getName()+" "+"Type:"+sensor.getType()+"\n" //得到传感器信息
+"Version:"+sensor.getVersion()+" "+"vendor:"+sensor.getVendor()+"\n"
+"MAXrange:"+sensor.getMaximumRange()+" "+"power:"+sensor.getPower()+"\n"
+"Resolution:"+sensor.getResolution()+"\n"
);

}// onSensorChanged
public void onAccuracyChanged(Sensor arg0, int arg1) { }
};
//注册Listener,SENSOR_DELAY_GAME为检测的精确度,
sm.registerListener(sel, sensor,SensorManager.SENSOR_DELAY_GAME);

}//oncreate end

protected void onRestart() {
super.onRestart();
Log.i(TAG, "XA_start onRestart");
Toast.makeText(XhulooActivity.this, "XA_Toast:onRestart", Toast.LENGTH_SHORT).show();
}

protected void onResume() {
super.onResume();
Log.i(TAG, "XA_start onResume");
Toast.makeText(XhulooActivity.this, "XA_Toast:onResume", Toast.LENGTH_SHORT).show();
}

protected void onPause() {
super.onPause();
Log.i(TAG, "XA_start onPause");
Toast.makeText(XhulooActivity.this, "XA_Toast:onPause", Toast.LENGTH_SHORT).show();
}

protected void onStop() {
super.onStop();
Log.i(TAG, "XA_start onStop");
Toast.makeText(XhulooActivity.this, "XA_Toast:onStop", Toast.LENGTH_SHORT).show();
}

protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "XA_start onDestroy");
Toast.makeText(XhulooActivity.this, "XA_Toast:onDestroy", Toast.LENGTH_LONG).show();
}

/菜单制作/
public boolean onCreateOptionsMenu(Menu menu) {
/*
*

  • add()方法的四个参数,依次是:
  • 1、组别,如果不分组的话就写Menu.NONE,
  • 2、Id,这个很重要,Android根据这个Id来确定不同的菜单
  • 3、顺序,那个菜单现在在前面由这个参数的大小决定
  • 4、文本,菜单的显示文本
  • /

menu.add(Menu.NONE, Menu.FIRST + 1, 7, "删除").setIcon(

android.R.drawable.ic_menu_delete);

menu.add(Menu.NONE, Menu.FIRST + 2, 2, "保存").setIcon(

android.R.drawable.ic_menu_edit);

menu.add(Menu.NONE, Menu.FIRST + 3, 6, "帮助").setIcon(

android.R.drawable.ic_menu_help);

menu.add(Menu.NONE, Menu.FIRST + 4, 1, "添加").setIcon(

android.R.drawable.ic_menu_add);

menu.add(Menu.NONE, Menu.FIRST + 5, 4, "详细").setIcon(

android.R.drawable.ic_menu_info_details);

menu.add(Menu.NONE, Menu.FIRST + 6, 3, "myplaces").setIcon(

android.R.drawable.ic_menu_myplaces);

menu.add(Menu.NONE, Menu.FIRST + 7, 5, "天气").setIcon(

android.R.drawable.ic_menu_today);

menu.add(Menu.NONE, Menu.FIRST + 8, 8, "退出").setIcon(

android.R.drawable.ic_menu_revert);

return true;

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {

case Menu.FIRST + 1:

Toast.makeText(this, "XA_删除菜单点击", Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST + 2:

Toast.makeText(this, "XA_保存菜单点击", Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST + 3:

Toast.makeText(this, "XA_帮助:wewenjie.tk", Toast.LENGTH_SHORT).show();

AlertDialog.Builder my_ADialog=new AlertDialog.Builder(XhulooActivity.this);
my_ADialog.setTitle("XA_AlertDialog"); //设置标题
my_ADialog.setMessage("帮助:访问wuwenjie.tk的项目页|访问GPL"); //设置显示消息
my_ADialog.setCancelable(true); //设置能取消

my_ADialog.setPositiveButton("访问wwj",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Uri uri=Uri.parse("http://www.wuwenjie.tk");
Intent intent=new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);} });

my_ADialog.setNegativeButton("访问GPL", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Uri uri=Uri.parse("http://www.gnu.org/copyleft/gpl.html");
Intent intent=new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent); }
} );
/显示/
my_ADialog.show();

break;

case Menu.FIRST + 4:

Toast.makeText(this, "XA_添加菜单点击", Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST + 5:

Toast.makeText(this, "XA_详细菜单点击", Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST + 6:

Toast.makeText(this, "XA_myplaces点击", Toast.LENGTH_SHORT).show();

/*跳转新界面activity */
Intent intent = new Intent(); //新建Intent意图
intent.setClass(XhulooActivity.this, XhulooActivity_myplaces.class);
//方便的调用名称为,返回一个Class对象
Bundle mBundle = new Bundle();
mBundle.putString("XA_Data", "XA_data from X:"+mEditText01_s);
//加入数据 参数:key-Data value +mEditText01_s
intent.putExtras(mBundle); //添加附加信息
startActivityForResult(intent, 0); //跳转,此处的0 OR >=0

break;

case Menu.FIRST + 7:

Toast.makeText(this, "XA_天气菜单点击", Toast.LENGTH_SHORT).show();

/*跳转新界面activity */
Intent intent01 = new Intent(); //新建Intent意图
intent01.setClass(XhulooActivity.this, XhulooActivity_weatherreport.class);
startActivityForResult(intent01, 0); //跳转,此处的0 OR >=0

break;

case Menu.FIRST + 8:

Toast.makeText(this, "XA_退出菜单点击", Toast.LENGTH_SHORT).show();
Log.i(TAG, "XhulooActivity.this.finish()");
XhulooActivity.this.finish();

break;

}

return false;

}

@Override
public void onOptionsMenuClosed(Menu menu) {
Toast.makeText(this, "选项菜单关闭", Toast.LENGTH_SHORT).show();
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
Toast.makeText(this,
"选项菜单显示前onPrepareOptionsMenu会被调用,可用来调整菜单",
Toast.LENGTH_SHORT).show();

// 如果返回false,此方法就把用户点击menu的动作给消费了,onCreateOptionsMenu方法将不会被调用
return true;
}

/处理返回值 startActivityForResult/

protected void onActivityResult
(int requestCode, int resultCode, Intent data) {
switch (resultCode) {
//resultCode为回传的标记,回传的是RESULT_OK
case RESULT_OK:
Bundle b=data.getExtras();
//data回传的Intent
String str=b.getString("MP_msg");
//str即为msg回传的值
Toast.makeText(this, "XA_str getString("msg"):"+str+"b.toString:"+b.toString(), Toast.LENGTH_LONG).show();
Log.i(TAG, "XA_onActivityResult:---"+"XA_str getString("msg"):"+str+" b.toString:"+b.toString());
break;
default:
break;
}
}

}

开源小项目:xhuloo

xhuloo作为学习ANDROID编程的DEMO,UI设计十分差(基本没有设计),但它可作为初学的演示,它简单十分,浅显易懂。没有实用价值,作为编程(API)的探究。

下面是几张EMULATER的演示图片:

 

1.Application information

 

 

 

 

 

2.XhulooActivity

 

 

 

 

 

 

 

 

 

 

3.按钮监听响应

 

 

 

 

 

 

 

 

 

 

 

4.XhulooActivity_myplaces

 

 

 

 

 

 

 

 

 

 

 

5.listview的监听响应

 

 

 

 

 

 

 

 

 

 

 

6.其他功能:activity之间的通信;RatingBar的监听响应;

重力感应;等

 


发展方向:

1)完善文件游览功能

2)读取 设备的IP地址,手机号码等信息

3)SERVICE后台功能

4)第3个ACTIVITY

5)减少图片大小


project zip here MD5:33af67ed45142c3270f0ab933ed24af5

apk : here MD5:946d6e199b35670769003a315876fa46

 

今天姐姐结婚

不错,姐姐得到了幸福。

而我,而我的幸福,寄托在个一我上,

不知能坚持多久,觉得,

每个人,终将得到自己的幸福。。。

兰湖相拥兰湖相拥

 

 

 

 

 

 

 

 

 

 

 

后记

暗恋是一场没结果的纯真的闷骚。。。。

mencoder转码

mencoder [若干选项] 文件 [文件|URL|-] [-o 文件 | file://文件 | smb://[用户名:密码@]主机/文件路径]
mencoder [若干选项] 文件1 [该文件专用的选项] [文件2] [该文件专用的选项]

 

[caption id=”attachment_487” align=”alignleft” width=”205” caption=”mplayer”]mplayermplayer[/caption]

 

 

 

 

 

 

 

 

 

 

 

 


实例 1:f4v—>mp4

mencoder a.f4v -o a1.mp4 -oac mp3lame -lameopts cbr:br=128 -ovc x264 -x264encopts bitrate=440 -vf scale=480:320

 


解释:

a.fv4是指输入的视频,要转换的视频。
-o a1.avi 中的“-o”是指你要输出视频,输出视频名为a1.avi
-oac 设置音频编码器。
mp3lame 设置音频编码器为mp3lame,就是mp3
-lameopts 设置mp3lamer的相关参数
cbr:br=128 设置音频的码率为128。96、112、128、192、256、320Kbps
-ovc 设置视频编码器。
x264 设置视频编码器为x264。

-x264encopts 设置x264的参数。
bitrate=440 设置x264的视频的码率为440。
-vf scale=480:320 设置视频的宽为480,高为320.( -vf scale=448:-3) -3是让mencoder来设置最佳宽度。

 

 


实例 2: flv—>mp3

mencoder b.flv -o b.mp3 -ovc frameno -oac mp3lame -lameopts cbr:br=320 -of rawaudio -ss 1:30 -endpos 2:45


解释:

b.flv 输入源文件
-o b.mp3 输出的目标文件名称
-ovc frameno 不处理视频编码
-oac mp3lame 输出的音频编码格式为mp3
-lameopts cbr:br=320 音频附件选项,cbr(常量比特率)编码格式,音频码流为320bps
-of rawaudio 输出文件为原始音频流
-ss 1:30 音频截取的起始时间(表示从b.flv的第1分30秒开始截取)
-endpos 2:45 预截取音频的长度(表示预截取的音频长度是2分45秒,可计算出其结束时间4:15)(-endpos 10mb 编码数据量为10M)

 

 

 

 

 

 

 

 


注:

1)
-of <格式>(用于 BETA 测试!)
编码为指定的容器格式(默认值:AVI)
-of lavf
使用 libavformat 流合并器编码

EX:mencoder a.f4v -o a1.mp4 -oac mp3lame -lameopts cbr:br=128 -ovc x264 -x264encopts bitrate=440 -vf scale=480:320 -of lavf

2)安装 sudo apt-get install mencoder


参考:

1)man mplayer man mencoder

2)http://baike.baidu.com/view/3353694.htm

3)http://www.mplayerhq.hu/DOCS/HTML/zh_CN/mencoder.html

4)http://www.mplayerhq.hu/DOCS/HTML/zh_CN/index.html

5)http://hi.baidu.com/hailoong/blog/item/545cfa17baefe4084b90a77c.html

 

 

 

 

JTextArea添加滚动条的简单实例

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
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class gd2{

public static void main(String[] args){

JFrame f=new JFrame();
JPanel p1=new JPanel();
JTextArea t1=new JTextArea(35,25);

p1.setLayout(new FlowLayout());

t1.setLineWrap(true);

p1.add(new JScrollPane(t1));
//将JTextArea放入JScrollPane中,这样就能利用滚动的效果
f.add(p1);
f.pack();
f.setVisible(true);

f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0);} });
}
}