+317
- 001
- 002
- 003
- 004
- 005
- 006
- 007
- 008
- 009
- 010
- 011
- 012
- 013
- 014
- 015
- 016
- 017
- 018
- 019
- 020
- 021
- 022
- 023
- 024
- 025
- 026
- 027
- 028
- 029
- 030
- 031
- 032
- 033
- 034
- 035
- 036
- 037
- 038
- 039
- 040
- 041
- 042
- 043
- 044
- 045
- 046
- 047
- 048
- 049
- 050
- 051
- 052
- 053
- 054
- 055
- 056
- 057
- 058
- 059
- 060
- 061
- 062
- 063
- 064
- 065
- 066
- 067
- 068
- 069
- 070
- 071
- 072
- 073
- 074
- 075
- 076
- 077
- 078
- 079
- 080
- 081
- 082
- 083
- 084
- 085
- 086
- 087
- 088
- 089
- 090
- 091
- 092
- 093
- 094
- 095
- 096
- 097
- 098
- 099
- 100
/**
* 连接指定的手环
*
* @param callback
*/
public void connect(BluetoothDevice device, final ActionCallback callback) {
this.io.connect(context, device, callback);
}
public void setDisconnectedListener(NotifyListener disconnectedListener) {
this.io.setDisconnectedListener(disconnectedListener);
}
/**
* 和手环配对, 实际用途未知, 不配对也可以做其他的操作
*
* @return data = null
*/
public void pair(final ActionCallback callback) {
ActionCallback ioCallback = new ActionCallback() {
@Override
public void onSuccess(Object data) {
BluetoothGattCharacteristic characteristic = (BluetoothGattCharacteristic) data;
Log.d(TAG, "pair result " + Arrays.toString(characteristic.getValue()));
if (characteristic.getValue().length == 1 && characteristic.getValue()[0] == 2) {
callback.onSuccess(null);
} else {
callback.onFail(-1, "respone values no succ!");
}
}
@Override
public void onFail(int errorCode, String msg) {
callback.onFail(errorCode, msg);
}
};
this.io.writeAndRead(Profile.UUID_CHAR_PAIR, Protocol.PAIR, ioCallback);
}
public BluetoothDevice getDevice() {
return this.io.getDevice();
}
/**
* 读取和连接设备的信号强度RSSI值
*
* @param callback
* @return data : int, rssi值
*/
public void readRssi(ActionCallback callback) {
this.io.readRssi(callback);
}
/**
* 读取手环电池信息
*
* @return {@link BatteryInfo}
*/
public void getBatteryInfo(final ActionCallback callback) {
ActionCallback ioCallback = new ActionCallback() {
@Override
public void onSuccess(Object data) {
BluetoothGattCharacteristic characteristic = (BluetoothGattCharacteristic) data;
Log.d(TAG, "getBatteryInfo result " + Arrays.toString(characteristic.getValue()));
if (characteristic.getValue().length == 10) {
BatteryInfo info = BatteryInfo.fromByteData(characteristic.getValue());
callback.onSuccess(info);
} else {
callback.onFail(-1, "result format wrong!");
}
}
@Override
public void onFail(int errorCode, String msg) {
callback.onFail(errorCode, msg);
}
};
this.io.readCharacteristic(Profile.UUID_CHAR_BATTERY, ioCallback);
}
/**
* 让手环震动
*/
public void startVibration(VibrationMode mode) {
byte[] protocal;
switch (mode) {
case VIBRATION_WITH_LED:
protocal = Protocol.VIBRATION_WITH_LED;
break;
case VIBRATION_10_TIMES_WITH_LED:
protocal = Protocol.VIBRATION_10_TIMES_WITH_LED;
break;
case VIBRATION_WITHOUT_LED:
protocal = Protocol.VIBRATION_WITHOUT_LED;
break;
default:
return;
}
@chineesedoc
iramailforspam,
15 Августа 2016
+319
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
template<typename OpeningBracketRange,
typename ClosingBracketRange,
typename StopTokenRange,
typename CommentBlockRangePairRange,
typename RecursiveCommentBlockRangePairRange>
Meta::EnableIf<
IsFiniteForwardRange<OpeningBracketRange>::_ &&
IsFiniteForwardRange<ClosingBracketRange>::_ &&
IsFiniteForwardRange<StopTokenRange>::_ &&
IsFiniteForwardRange<CommentBlockRangePairRange>::_ &&
IsFiniteForwardRange<RecursiveCommentBlockRangePairRange>::_,
decltype(Meta::Val<R>().Take(0))> ReadRecursiveBlock(int& counter, size_t* ioIndex,
OpeningBracketRange openingBracket, ClosingBracketRange closingBracket, StopTokenRange stopToken,
CommentBlockRangePairRange commentBlocks, RecursiveCommentBlockRangePairRange recursiveCommentBlocks)
{
R start = me();
size_t index = 0;
const size_t openingBracketLen = openingBracket.Count();
const size_t closingBracketLen = closingBracket.Count();
const size_t stopTokenLen = stopToken.Count();
while(!me().Empty() && counter!=0)
{
if(openingBracketLen!=0 && me().StartsWith(openingBracket))
{
counter++;
me().PopFrontExactly(openingBracketLen);
index += openingBracketLen;
continue;
}
if(closingBracketLen!=0 && me().StartsWith(closingBracket))
{
counter--;
me().PopFrontExactly(closingBracketLen);
index += closingBracketLen;
continue;
}
if(stopTokenLen!=0 && me().StartsWith(stopToken))
{
me().PopFrontExactly(stopTokenLen);
index += stopTokenLen;
break;
}
bool commentFound = false;
for(auto& commentBlock: commentBlocks)
{
commentFound = me().StartsWith(commentBlock.Get<0>());
if(!commentFound) continue;
const size_t commentBlockOpeningLen = commentBlock.Get<0>().Count();
const size_t commentBlockClosingLen = commentBlock.Get<1>().Count();
me().PopFrontN(commentBlockOpeningLen);
index += commentBlockOpeningLen;
me().FindAdvance(commentBlock.Get<1>(), &index);
me().PopFrontN(commentBlockClosingLen);
index += commentBlockClosingLen;
break;
}
if(commentFound) continue;
for(auto& commentBlock: recursiveCommentBlocks)
{
commentFound = me().StartsWith(commentBlock.Get<0>());
if(!commentFound) continue;
int commentCounter = 1;
ReadRecursiveBlock(commentCounter, &index, commentBlock.Get<0>(), commentBlock.Get<1>(), null, null);
break;
}
if(commentFound) continue;
me().PopFront();
}
if(ioIndex!=null) (*ioIndex) += index;
return start.Take(index);
}
Это мои последние достижения в написании сверх универсального обобщённого кода.
Начиналось всё с функции, которая парсила блок кода до закрывающей фигурной скобки, учитывая встречающиеся открывающие скобки. Затем появилась поддержка комментариев и строк. Позже я решил, что нечего привязываться к какому-то конкретному языку, ведь можно же таким же образом парсить другой язык, где вместо скобок begin end и комментарии по-другому оформляются.
А потом я подумал, зачем вообще привязывать типы параметров к строкам и массивам строк? И почему код, который парсится, вообще должен быть строкой, хранящейся в памяти непрерывно? В итоге мои размышления привели к такой реализации, которая способна парсить всё подряд, в том числе и связные списки, причём необязательно состоящие из символов. При этом открывающуюся скобку можно передать связным списком, закрывающуюся - массивом, а блоки комментариев передавать как массивом кортежей, так и хеш-таблицей.
При этом эта функция относится к классу примеси и наследованием её можно подмешать к любому классу, имеющему нужные методы.
gammaker,
15 Августа 2016
+261
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
/* load config */
for (i = 0; ; i++) {
conf[0] = '\0';
switch (i) {
case 0:
/* ~ */
snprintf(conf, sizeof conf, "%s/.%s",
pwd->pw_dir, SWM_CONF_FILE);
break;
case 1:
/* global */
snprintf(conf, sizeof conf, "/etc/%s",
SWM_CONF_FILE);
break;
case 2:
/* ~ compat */
snprintf(conf, sizeof conf, "%s/.%s",
pwd->pw_dir, SWM_CONF_FILE_OLD);
break;
case 3:
/* global compat */
snprintf(conf, sizeof conf, "/etc/%s",
SWM_CONF_FILE_OLD);
break;
default:
goto noconfig;
}
if (strlen(conf) && stat(conf, &sb) != -1)
if (S_ISREG(sb.st_mode)) {
cfile = conf;
break;
}
}
Вот так spectrwm грузит конфиги.
codemonkey,
15 Августа 2016
+273
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
#include <math.h>
#include <stdio.h>
double DoubleToTheInt(double base, int power) {
return pow(base, power);
}
int main() {
// приводим к указателю на функуцию с обратным порядком аргументов
double (*IntPowerOfDouble)(int, double) =
(double (*)(int, double))&DoubleToTheInt;
printf("(0.99)^100: %lf \n", DoubleToTheInt(0.99, 100));
printf("(0.99)^100: %lf \n", IntPowerOfDouble(100, 0.99));
}
"Изящный способ отстрелить себе ногу по самую голову."
Утащено с Хабры.
Vindicar,
15 Августа 2016
+341
- 1
- 2
$dom = new DOMDocument;
$dom->loadHTML('<?xml encoding="UTF-8">' . $document);
Выжал самое интересное.
Кто угадает, зачем к документу прилепляется строка '<?xml encoding="UTF-8">', тому ничего. Но без неё не работает. Точнее, работает, но неправильно.
inkanus-gray,
13 Августа 2016
+111
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
@AutoValidated
public void remove(
@NotNull PaymentProviderConfiguration paymentProviderConfiguration
) {
paymentProviderConfiguration.setDeleted(true);
paymentProviderConfiguration.setDisabled(true);
paymentProviderConfiguration.setEditable(false);
paymentProviderConfigurationDAO.update(paymentProviderConfiguration);
context.getHibernate().evict(paymentProviderConfiguration);
context.getHibernate().flush();
}
интересно еще и то, что внутри paymentProviderConfigurationDAO.update(p aymentProviderConfiguration); есть еще один flush
vorozhtsov,
12 Августа 2016
+9
- 1
- 2
- 3
- 4
- 5
var actualCharCount = DisplayCharactersCount;
while (DisplayCharactersCount != actualCharCount)
{
Thread.Sleep(500);
}
и такое бывает
ewenso,
12 Августа 2016
+4
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
// Change the color of the displayed status
if ($status == "active") {
$status_display = '<font color="white">' . $status . '</font>';
} elseif ($status == "sold") {
$status_display = '<font color="green">' . $status . '</font>';
} elseif ($status == "emis") {
$status_display = '<font color="orange">' . $status . '</font>';
} elseif ($status == "alert") {
//
} elseif ($status == "deleted") {
$status_display = '<font color="white">' . $status . '</font>';
//$style="text-decoration: line-through;";
} elseif ($status == "closed") {
$status_display = '<font color="closed">' . $status . '</font>';
} elseif ($status == "options_sent") {
$status_display = '<font color="yellow">' . $status . '</font>';
}
if ($trip_type == "one_way") {
$one_way = "SELECTED";
$round_trip = "";
$trip_type = '<font color="DarkBlue">One Way</font>';
} else {
$one_way = "";
$round_trip = "SELECTED";
$trip_type = '<font color="#348017">Round Trip</font>';
}
if ($cabin_class == "economy_class") {
$eco_class = "SELECTED";
$bus_class = "";
$ooo_class = "";
} elseif ($cabin_class == "business_class") {
$eco_class = "";
$bus_class = "SELECTED";
$ooo_class = "";
} elseif ($cabin_class == "o_class") {
$eco_class = "";
$bus_class = "";
$ooo_class = "SELECTED";
}
if ($num_pass == "1") {
$n1 = "SELECTED";
$n2 = "";
$n3 = "";
$n4 = "";
$n5 = "";
$n6 = "";
$n7 = "";
$n8 = "";
$n9 = "";
$n10 = "";
} elseif ($num_pass == "2") {
$n1 = "";
$n2 = "SELECTED";
$n3 = "";
$n4 = "";
$n5 = "";
$n6 = "";
$n7 = "";
$n8 = "";
$n9 = "";
$n10 = "";
} elseif ($num_pass == "3") {
$n1 = "";
$n2 = "";
$n3 = "SELECTED";
$n4 = "";
$n5 = "";
$n6 = "";
$n7 = "";
$n8 = "";
$n9 = "";
Вот почему не надо мелочиться. И нанимать нормальных программистов.
OMD,
11 Августа 2016
+4
- 1
var options = [<?php echo implode(',', range(App\Service\Service::CONSTANT_MIN, App\Service\Service::CONSTANT_MAX)); ?>];
Diwms,
11 Августа 2016
+8
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
#include <vector>
#include <iostream>
template<class T>
struct reverse_view_impl {
const T& cont;
reverse_view_impl(const T& cont): cont(cont) {}
using iterator = typename T::const_reverse_iterator;
};
template<class T>
reverse_view_impl<T> reverse_view(const T& cont) {
return reverse_view_impl<T>(cont);
}
template<class T>
typename reverse_view_impl<T>::iterator begin(const reverse_view_impl<T>& view) {
return view.cont.crbegin();
}
template<class T>
typename reverse_view_impl<T>::iterator end(const reverse_view_impl<T>& view) {
return view.cont.crend();
}
std::vector<int> one_two_three() { return { 1, 2, 3 }; }
int main() {
for (auto i : reverse_view(one_two_three())) {
std::cout << i << std::endl;
}
}
// Surprise, motherfucker
Bobik,
10 Августа 2016