Устанавливаем программу rcconf:
sudo apt-get install rcconf
запускаем, звёздочкой отмечаем службы, которые должны запускаться при запуске системы.
Устанавливаем программу rcconf:
sudo apt-get install rcconf
запускаем, звёздочкой отмечаем службы, которые должны запускаться при запуске системы.
Выполняем команды от пользователя root:
sudo touch /forcefsck
reboot
Для того чтобы установить VNC Server на Ubuntu linux и при этом загружался нормальны рабочий стол, а не чёрно-белая хрень, нужно выполнить следующее:
sudo apt-get install vnc4server
Если Вы используете lxde или у Вас она по крайней мере установлена, то далее нужно отредактировать файл ~/.vnc/xstartup и привести его к такому виду:
#!/bin/sh
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresourceslxpanel &
/usr/bin/openbox-session &
/usr/bin/lxsession -s LXDE &
Далее запускаем vncserver, вводим пароль дважды и подключаемся к хосту по адресу x.x.x.x:1, где 1 — это номер виртуального экрана.
Чтобы остановить vncserver необходимо выполнить следующее:
vncserver -kill :1
где :1 — это номер виртуального экрана.
Если нужно запустить vncserver с особым разрешением, для этого запускаем его следующим образом:
vncserver -geometry 800×600
Это всё.
Создаём в корне сайта out.php
В неё внутри PHP-тегов пишем такой код:
if ((isset($_GET['link'])) AND (preg_match( '/^(http|https)://[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}'.'((:[0-9]{1,5})?/.*)?$/i' ,$_GET['link']))){
header("Location: ".$_GET['link']."");
}
После сохранения, заменяем все ссылки на сайте на подобные: /out.php?link-http://itblog.pp.ua. Это позволяет поисковым системам не считать эти ссылки за внешние, тем самым повышает, а точнее не снижает тИЦ и PR сайта.
Чтобы в WordPress скрипте были относительные ссылки, вместо привязанных к одному домену, необходимо в начало файла wp-config.php добавить следующие строки:
define('WP_SITEURL', '/');
define('WP_HOME', '/');
Работа с JTable в Java SE построена на основе паттерна MVC, поэтому работать мы будем с моделью компонента jTable.
package example.Models;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
public class DbTableModel extends AbstractTableModel {
private Object[][] content; //хранит данные
private String[] columnNames; //хранит названия заголовков
private Class[] columnClasses; //хранит типы полей (столбцов)
public DbTableModel(Connection con, String query, String tableName) throws SQLException {
//super();
getTableContent(con, query, tableName);
}
private void getTableContent(Connection conn, String query, String tableName) throws SQLException {
DatabaseMetaData md = conn.getMetaData();
ResultSet rs = md.getColumns(null, null, tableName, null);
ArrayList colNamesList = new ArrayList();
ArrayList colTypesList = new ArrayList();
while (rs.next()) {
colNamesList.add(rs.getString("COLUMN_NAME"));
int dbType = rs.getInt("DATA_TYPE");
switch (dbType) {
case Types.INTEGER:
colTypesList.add(Integer.class);
break;
case Types.FLOAT:
colTypesList.add(Float.class);
break;
case Types.DOUBLE:
case Types.REAL:
colTypesList.add(Double.class);
break;
case Types.DATE:
case Types.TIME:
case Types.TIMESTAMP:
colTypesList.add(java.sql.Date.class);
break;
default:
colTypesList.add(String.class);
break;
}
}
columnNames = new String[colNamesList.size()];
colNamesList.toArray(columnNames);
columnClasses = new Class[colTypesList.size()];
colTypesList.toArray(columnClasses);
Statement st = conn.createStatement();
rs = st.executeQuery(query);
ArrayList rowList = new ArrayList();
while (rs.next()) {
ArrayList cellList = new ArrayList();
for (int i = 0; i < columnClasses.length; i++) {
Object cellValue = null;
if (columnClasses[i] == String.class) {
cellValue = rs.getString(columnNames[i]);
}
else if (columnClasses[i] == Integer.class) {
cellValue = new Integer(rs.getInt(columnNames[i]));
}
else if (columnClasses[i] == Float.class) {
cellValue = new Float(rs.getInt(columnNames[i]));
}
else if (columnClasses[i] == Double.class) {
cellValue = new Double(rs.getDouble(columnNames[i]));
}
else if (columnClasses[i] == java.sql.Date.class) {
cellValue = rs.getDate(columnNames[i]);
}
else {
System.out.println("Can't define column type " + columnNames[i]);
}
cellList.add(cellValue);
}// for
Object[] cells = cellList.toArray();
rowList.add(cells);
}// while
content = new Object[rowList.size()][];
for (int i = 0; i < content.length; i++) {
content[i] = (Object[]) rowList.get(i);
}
rs.close();
st.close();
}
@Override
public int getRowCount() {
return content.length;
}
@Override
public int getColumnCount() {
if (content.length == 0) {
return 0;
} else {
return content[0].length;
}
}
@Override
public Object getValueAt(int row, int col) {
return content[row][col];
}
@Override
public Class getColumnClass(int col) {
return columnClasses[col];
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
@Override
public boolean isCellEditable(int rowIndex, int colIndex) {
if (colIndex == 1) {
return false;
} else {
return true;
}
}
}
В конструкторе класса, или методе getTableContent() есть 3 параметра:
con типа Connection, строковый query и строковый tableName.
В предыдущем посте мы использовали свой класс для работы с базой данных, у нас там есть метод getConnection(), который возвращает ссылку на используемый нами Connection, его и нужно передать в конструктор или метод.
В параметр query мы передаём SQL запрос, в ответ на который хотим получить необходимые данные (напоминаю, здесь поля можно представлять используя AS, чтобы заголовки можно было сделать и на русском языке, понятными пользователю Вашей программы, либо использовать представления — VIEW). Если необходимо выбрать все поля, то можно воспользоваться запросом, «SELECT * FROM tableName«, при этом третий параметр конструктора/метода tableName также обязательно необходимо заполнять именем таблицы.
В программе мы делаем следующее:
MySQLConnect myConnect = new MySQLConnect(Host, dbName, login, pass);
DbTableModel myTableModel = new DbTableModel(myCon.getConnection(), «SELECT * FROM tableName», «tableName»);
jTable1.setModel(myTableModel);
Пришлось мне как-то разрабатывать на Java проект, который был завязан на работе с базой данных MySQL. Я нашёл в Сети класс, который удобно работает с SQLite, и переделал его для работы с MySQL, собственно сделать это было нетрудно, дополнительно в этот класс можно добавить несколько методов для удобной работы, но это уже на Ваше пожелание. Собственно, для своих задач эти методы я создавал, а Вам они будут скорее всего не пригодятся, оставлю самые общие лишь.
Добавлены некоторые методы, возвращающие массив объектов из базы данных, переделать можно по своему усмотрению.
Уточняю, этот класс работает с базой данных минуя ORM, т.е. не использует ORM.
package example.Database;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
public class MySQLConnect {
private Connection con = null;
public MySQLConnect() {
//для того, чтобы подключение можно было сделать позже
}
public MySQLConnect(String url, String port, String dbName, String login, String pass) {
setConnection(url, port, dbName, login, pass);
}
public MySQLConnect(String url, String dbName, String login, String pass) {
setConnection(url, "3306", dbName, login, pass);
}
public void setConnection(String url, String port, String dbName, String login, String pass) {
try {
if (port == null) {
port = "3306"; // если порт не указан, то порт по умолчанию
}
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://" + url + ":" + port + "/" + dbName, login, pass);
} catch (ClassNotFoundException ex) {
System.err.println("MySQLdb: Cannot find this db driver classes. Install com.mysql.jdbc driver!");
} catch (SQLException e) {
System.err.println("MySQLdb: Cannot connect to " + dbName);
}
if (con != null) {
System.out.println("Connection to DB established successfully.");
}
}
public Connection getConnection() {
return con;
}
/* метод, выполняющий просмотр базы данных, по сути не нужный,
* т.к возвращает лишь успешно ли выполнена операция, но для
* примера выполнения запроса, оставлю
*/
public boolean executeQuery(String query) {
try {
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(query);
rs.close();
st.close();
return true;
} catch (SQLException e) {
System.err.println("There are problems with the query " + query + " in method "executeQuery"");
e.printStackTrace();
return false;
}
}
public void executeUpdate(String query) { //метод, выполняющий изменения в БД
try {
PreparedStatement statement = con.prepareStatement(query);
statement.executeUpdate();
} catch (SQLException e) {
System.err.println("There are problems with the query " + query + " in method "executeUpdate"");
e.printStackTrace();
}
}
public Object[][] getQueryResultByParam(String query, String idColumnName, String param) {
try {
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(query);
ArrayList idArrayList = new ArrayList();
ArrayList dataArrayList = new ArrayList();
while (rs.next()) {
idArrayList.add(rs.getString(idColumnName));
dataArrayList.add(rs.getString(param));
}
Object[][] result = new Object[2][];
result[0] = idArrayList.toArray();
result[1] = dataArrayList.toArray();
rs.close();
st.close();
return result;
} catch (SQLException e) {
System.err.println("There are problems with the query " + query + " in method "getQueryResultByParam"");
e.printStackTrace();
return null;
}
}
public Object[][] getQueryResultByParam(String query, String param) {
return this.getQueryResultByParam(query, "id", param);
}
public Object[][] getParam(String tableName, String param) {
return this.getQueryResultByParam("SELECT id, " + param + " FROM " + tableName + " WHERE deleted = '0' ORDER BY id", "id", param);
}
}
Часто на сайтах, которые используют баннеры, можно видеть как при прокрутке страницы, где содержимое боковых панелей уже закончилось, а центральная панель ещё продолжается, реклама остаётся вверху, и никто по ней не переходит.
Ситуацию с этим поможет решить зафиксированный блок.
| <div id=»myAd» style=»position: fixed; top: 10px; right: 2.78%; width: 170px; background: #ffffff; z-index: 1; visibility: hidden;»>
Здесь код баннера </div> |
в стилях для этого необходимо кроме прочих настроек отображения (здесь рассматривается общий случай, поэтому нет смысла описывать весь стиль этого элемента, т.к. у Вас всё равно будет частный случай):
position: fixed;
как видите из кода DIV’а, этот элемент изначально скрыт. Для того чтобы при прокрутке он отобразился, необходимо добавить JavaScript:
window.onscroll = function() {
var scrolled = window.pageYOffset || document.documentElement.scrollTop;
if (scrolled>2850){
document.getElementById('myAd').style.visibility = 'visible';
}
else{
document.getElementById('myAd').style.visibility = 'hidden';
}
}
В html коде страницы создаём в любом месте в пределах тега body (лишь бы не внутри любого другого контейнера), <div id="scrollBack" onClick="scrollBack()"></div> в пределах тегов <head></head> пишем следующий код:
var oldPos;
window.onscroll = function() {
var scrolled = window.pageYOffset || document.documentElement.scrollTop;
if (scrolled>0){
document.getElementById('scrollBack').style.visibility = 'visible';
document.getElementById('scrollBack').innerHTML = 'Up'; //здесь можно подставить например картинку со стрелкой вверх
}
else
{
document.getElementById('scrollBack').innerHTML = 'Down';// а здесь можно подставить например картинку со стрелкой ввниз
}
}
function scrollBack(){
if (window.pageYOffset || document.documentElement.scrollTop > 0){
oldPos = window.pageYOffset || document.documentElement.scrollTop;
window.scrollTo(0,0);
}
else{
window.scrollTo(0,oldPos);
}
}
а в стилях настраиваем нашу панельку с id scrollBack таким образом, чтобы она была слева, зафиксированна, и необходимой длины (я для примера использовал 100%ную высоту)
вот содержимое моего css:
#scrollBack {
position: fixed;
left: 1px;
top: 0px;
width: 80px;
height: 100%;
opacity: 0;
font-family: sans-serif;
font-weight: bold;
font-size: 0.5em;
color: #000088;
background: #e0e0ff;
border: 1px solid #fff;
padding: 2px;}
#scrollBack:hover {opacity: 0.8;}
Это элементарно просто, но для тех, кто только столкнулся с разработкой на Java может быть не понятен принцип взаимодействия с базой данных из кода через сторонние библиотеки.
Для начала идём на сайт http://dev.mysql.com/downloads/connector/j/ и скачиваем архив с библиотекой.
Распаковываем архив, берём оттуда только файл mysql-connector-java-x.x.xx-bin.jar (где x.x.xx — версия библиотеки).
После чего есть 2 способа подключения библиотеки к проекту:
1-й способ: Заходим в свойства проекта, ищем раздел «библиотеки» — в разных средах разработки по разному, но принцип тот же, и нажимаем «добавить jar файл», где указываем путь к файлу.
2-й способ: Копируем данный .jar файл в директорию, где у Вас установлена Java/jre7/lib/ext и также через свойства проекта в разделе «библиотеки», нажимаем «добавить библиотеку», где выбираем MySQLConnector.
Thats all folks.