Выполняем команды от пользователя root:
sudo touch /forcefsck
reboot
Выполняем команды от пользователя 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.
Если у вас наблюдается явление, когда один и тот же пост с дублируется на всех страницах вашего WordPress блога, то попробуйте удалить (можно из директории /wp-content/plugins через FTP) плагин advanced-xcluder. Почему-то такой глюк стал наблюдаться после переноса одного сайта с хостинга на хостинг.